先來看看最終的效果圖吧!
對於島嶼情況:
相信很多人都做過關於河流的分析,而其中多少會涉及到河流的網格划分。二這也一直是一個難點,尤其是在Web端(本文只針對Silverlight)。而就目前查閱的資料來看,關於這方面的資料少之又少。大部分的網格划分要不就是理論,要不就是基於桌面的,而桌面的網格划分要比Web容易的多,此外,還有一種情況就是先在ArcMap中划分好,在Web端查詢一定區域的網格划分點。
Web端的河流網格划分有以下幾個難點:
(1).如何對河流進行網格划分得到網格點(網格划分點落在河流之內)
(2).得到的網格點如何與Web地圖結合,建立地理關系
(3).針對不同的河流復雜程度(例如:河流彎曲程度不一,包含島嶼等),網格划分方法同樣適用
解決了以上3個問題,那么河流網格划分問題就基本可以解決了。
下面我們來看看如何解決上面的3個問題。
目前在多數的網格划分采用的是貼體網格划分,通過求解微分方程,將不規則的河流轉化到X-Y坐標系下,從而便於求解,這種方式得到的網格點很好,然而繁瑣,特別是在在Web端實現更加困難,同時也無法直接與地圖結合。此外偏微分方程的求解還需要一定的數學功底,因此並不適合我們普通的開發人員。
在這里我們采取添加控制點——繪制多邊形——等分多邊形——求交線——等分交線的方式來得到最后的網格。請看下面的示意圖:
a.添加控制點,得到多邊形
我們繪制了一個沿着河流的多邊形,接下來,我們按照設置的等分數,等分多邊形,如下圖所示:
這里實現的原理的,得到河流兩邊的控制點,根據各邊的控制點,得到各邊的總長度,然后根據總長度按照設置的等分數,等分兩邊的多邊形。接着連接兩邊的等分點。接下來我們就需要求解這些等分線與河流的交線。如下圖所示:
這樣得到與河流的交線之后,我們再對每一段的交線進行等距划分,然后得到等分點,最后如下圖所示:
這樣我們便得到了最終的網格點。
以上過程不需要借助任何第三方控件,只需要使用ArcGIS API for Silverlight,結合GeometryService即可完成,代碼量不多,實現起來也不難。
在此提供這么一種方法大家可以自己試一試。具體代碼在后續的工作中將給出。
總結:
本文方法方法的優點:
1.適用於彎曲程度不一的河流,包括河流包含島嶼等情況
2.可以按照指定的點的個數,疏密情況進行網格划分。
3.可以很好的結合Web地圖
該方法的缺點:
1.目前還無法在河流交叉地方進行網格划分。
2.網格線不能保證與河流的中心線垂直。
3.多邊形控制點直接影響着網格的質量。
如果您有什么好的建議或者改進的方法,歡迎留言分享。
(版權所有,轉載請標明出處)