(十二) WebGIS中矢量圖層的設計


文章版權由作者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/

1.前言

在前幾章中我們已經了解了什么是矢量查詢、屏幕坐標與地理坐標之前的轉換以及要素的設計,有了這些知識,這一章里我們終於可以進行矢量圖層的設計了。

在Catalog里創建一個FeatureClass時,我們能夠選擇是創建點圖層或者線圖層或者面圖層等。所謂點圖層,即該圖層中的要素只能是點,其他幾個圖層顧名思義,也是如此。那么在WebGIS中,我們同樣也可以按照ArcGIS里的這個設計思路來設計我們的矢量圖層,雖然這個方法是肯定可行的,但是在實際的業務需求中,如果按照這種點圖層等來嚴格控制的話,代碼的靈活性以及簡約性會大大的降低。那么到底我們該如何設計我們的矢量圖層方能達到最好的效果呢?下面我們來一起談談。

2.提出幾個需求

(1).有一段公路需要在地圖上顯示出來,並且公路上的每個節點也要明顯的標注出來。

(2).需要顯示出一個消防中隊所在的位置,並且將其以服務半徑作為緩沖得出的緩沖顯示出來。

(3).希望顯示出各個關注的人員在地圖上的位置,並且鼠標移到人員圖標上后,能夠有氣泡彈出,展示該人員的目前相關信息。

3.  分析需求

如果我們按照ArcGIS中點、線、面圖層的思路來設計的話,第一個需求里,我們就需要設計出兩個圖層來,一個線圖層,一個面圖層。同樣對第二個需求,我們也需要專門制作出一個點圖層和一個面圖層來。

現在,我們能否換一個思路來想呢,我們能否將點圖層、線圖層、面圖層融合成一個業務圖層呢?比如第一個需求,其實就只要線要素和點要素添加到同一個Canvas下即可了,一張以業務來划分的矢量圖層就產生了。

同樣,第二個問題的解決思路就是將點要素和面要素(圓要素)整合在一起便可。而第三個問題的解決思路就更簡單了,只需要添加點(圖標)要素即可。在要素的設計中我們已經詳解了每個要素都是繼承UIComponent的,都能監聽鼠標事件,所以彈出氣泡的需求也便自然而然的可以實現了。

4.設計圖

 

5.設計流程圖

 

6.由一個案例進行詳解

這里,我們以之前提出的需求中的第一個道路顯示問題來進行詳解。

第一步,客戶端列出請求參數,比如需要顯示的道路的ID號等,然后向矢量服務發送請求。如果是最短路徑分析,可以把起始點和終點作為參數,向后台的NA服務發送請求。

第二步,解析服務器返回的數據。得出數據中的各個要素的Geometry和Attribute。然后根據Geometry中的geometryType進行對應的要素的實例化,將Geometry和Attribute作為該實例化要素的屬性。在此需求中,首先需要根據返回的線要素數據實例化相同個數的線要素。同時根據線要素的Geometry中的端點信息,實例化出點要素。

第三步,將所有實例化出的點要素和線要素添加到道路圖層(Canvas)中,並觸發每個要素的繪畫函數。由於每個要素均有重繪以及坐標轉換的內部實現,所以我們不需要在Canvas中再實現相同功能。

不過,這里我需要說明一個問題,在我們的自制圖層中,我們還是需要監聽地圖事件來進行一些必須的操作的。而這個操作是跟地圖平移有關系。否則在地圖進行拖動后,該圖層上的要素進行重繪時,會發生偏移問題。和上節提到的一樣,地圖中要素偏移問題我會在以后專門花一節跟大家來探討。

7.總結

至此,在這個系列中,對柵格圖層和矢量圖層的設計以及所涉及到的內容我均已講完了。對於地圖的顯示和一些基本的業務定制功能實現,我想大家應該都有一些思路了。在接下來的一個系列里,我想和大家一起探討地圖工具欄中基本功能的設計實現,比如放大、縮小、平移、全圖、I查詢、興趣點查詢、定位等。希望大家持續關注。祝大家節日快樂。

                                                                                                  ----歡迎轉載,但保留版權,請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/

活着便是為了受苦,為了歷練,為了明白到底我們需要的是什么。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM