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

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

1.前言

在前幾章中咱們已經瞭解了什麼是矢量查詢、屏幕座標與地理座標以前的轉換以及要素的設計,有了這些知識,這一章裏咱們終於能夠進行矢量圖層的設計了。函數

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

2.提出幾個需求

(1).有一段公路須要在地圖上顯示出來,而且公路上的每一個節點也要明顯的標註出來。設計

(2).須要顯示出一個消防中隊所在的位置,而且將其以服務半徑做爲緩衝得出的緩衝顯示出來。blog

(3).但願顯示出各個關注的人員在地圖上的位置,而且鼠標移到人員圖標上後,可以有氣泡彈出,展現該人員的目前相關信息。繼承

3.  分析需求

若是咱們按照ArcGIS中點、線、面圖層的思路來設計的話,第一個需求裏,咱們就須要設計出兩個圖層來,一個線圖層,一個面圖層。一樣對第二個需求,咱們也須要專門製做出一個點圖層和一個面圖層來。事件

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

一樣,第二個問題的解決思路就是將點要素和麪要素(圓要素)整合在一塊兒即可。而第三個問題的解決思路就更簡單了,只須要添加點(圖標)要素便可。在要素的設計中咱們已經詳解了每一個要素都是繼承UIComponent的,都能監聽鼠標事件,因此彈出氣泡的需求也便天然而然的能夠實現了。博客

4.設計圖

 

5.設計流程圖

 

6.由一個案例進行詳解

這裏,咱們以以前提出的需求中的第一個道路顯示問題來進行詳解。後臺

第一步,客戶端列出請求參數,好比須要顯示的道路的ID號等,而後向矢量服務發送請求。若是是最短路徑分析,能夠把起始點和終點做爲參數,向後臺的NA服務發送請求。

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

第三步,將全部實例化出的點要素和線要素添加到道路圖層(Canvas)中,並觸發每一個要素的繪畫函數。因爲每一個要素均有重繪以及座標轉換的內部實現,因此咱們不須要在Canvas中再實現相同功能。

不過,這裏我須要說明一個問題,在咱們的自制圖層中,咱們仍是須要監聽地圖事件來進行一些必須的操做的。而這個操做是跟地圖平移有關係。不然在地圖進行拖動後,該圖層上的要素進行重繪時,會發生偏移問題。和上節提到的同樣,地圖中要素偏移問題我會在之後專門花一節跟你們來探討。

7.總結

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

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

活着即是爲了受苦,爲了歷練,爲了明白到底咱們須要的是什麼。

相關文章
相關標籤/搜索