ArcGIS API for Silverlight開發系列之二:緩存圖層與動態圖層及圖層總結

作爲ESRI的平臺的一份子arcgis api for silverlight,自然與ESRI的其它產品有聯繫。上一篇我們做了一個地圖瀏覽的程序,它的確很簡單。只是有一點不大明白: <esri:ArcGISTiledMapServiceLayer ID="MyLayer" Url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" />這個是什麼意思。想弄明白這個問題,我們就不得不提到圖層的概念。

ArcGISTiledMapServiceLayer:是緩存圖層,通過預先將地圖數據切片緩存在服務器硬盤,客戶端訪問時服務會根據其當前訪問區域計算出顯示的圖片返回給客戶端。客戶端就可以看到地圖了,其實是幾張圖片組合起來的。

ArcGISDynamicMapServiceLayer:是動態圖層,動態圖層是預先沒有切片的,客戶端訪問時服務會根據其訪問的區域實時生成一張圖片返回給客戶端。這個明顯的速度上就比不過做了緩存的圖層。

所以,明顯的一般作爲基礎數據的地圖(比如上海市基礎圖),我們就可以把它發佈成緩存地圖,因爲基礎圖一般不會變動,那麼我們就預先切片緩存;而爲了滿足自己業務需求的專題地圖(比如電力行業路燈信息等),就作爲動態圖層發佈,以爲這些信息時經常變動的,做緩存明顯沒有意義。

當然,這兩個圖層是可以疊加在一起的。也正是這樣,就可以滿足我們一般的地圖開發功能。下面就是一段疊加的例子:

<esri:Map x:Name="MyMap" WrapAround="True">
<esri:ArcGISTiledMapServiceLayer ID="StreetMapLayer"
Url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"
InitializationFailed="Layer_InitializationFailed" />
<esri:ArcGISDynamicMapServiceLayer ID="DynamicLayer"
Url="http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Earthquakes/RecentEarthquakesRendered/MapServer"
InitializationFailed="Layer_InitializationFailed" />
</esri:Map>

下面系統總結一下arcgis api for silverlight中圖層的結構

Layer
|--TiledMapServiceLayer
| |--ArcGISTiledMapServiceLayer
|--DynamicLayer
| |--DynamicMapServiceLayer
| |--ArcGISDynamicMapServiceLayer
| |--ArcGISImageServiceLayer
| |--GPResultImageLayer
|--GraphicsLayer
| |--FeatureLayer
|--ElementLayer
 

1、Layer:
繼承自Silverlight中的DependencyObject,並實現了INotifyPropertyChanged接口,是Silverlight API中其他圖層的基類。

2、TiledMapServiceLayer:
繼承自Layer,是所有使用了緩存的地圖服務的基類。通過它可以在程序中加入經過緩存的,來自不同數據源的地圖服務。比如ArcGIS Server的地圖服務,Google Map的地圖,Virtual Earth的地圖等;

3、ArcGISTiledMapServiceLayer:
繼承自TiledMapServiceLayer。像上面說的一樣,這個圖層擴展了TiledMapServiceLayer,於是支持由ArcGISServer 9.3版本發佈的經過緩存的地圖服務。

4、DynamicLayer:
繼承自Layer,是動態地圖服務的基類;

5、DynamicMapServiceLayer:
繼承自DynamicLayer,對應於TiledMapServiceLayer,要使用未經過緩存的動態地圖服務,就得通過擴展這個圖層來實現。

6、ArcGISDynamicMapServiceLayer:
繼承自DynamicMapServiceLayer,針對ArcGIS Server9.3版本發佈的動態地圖服務。同理,如果要在客戶端API中使用其他動態地圖服務,比如OGC的WMS服務,則也需要像這個圖層一樣,擴展上面的DynamicMapServiceLayer來實現;

7、ArcGISImageServiceLayer:
繼承自DynamicMapServiceLayer,針對ArcGIS Server 9.3版本發佈的ImageService,因爲影像服務也屬於動態的地圖服務。在客戶端API中,可以通過ArcGISImageServiceLayer的一些屬性,方便通過瀏覽器來展示服務器端的影像數據,比如通過BandIds屬性,可以快速調整影像數據顯示波段的組合(RGB通道),提供不同結果供用戶查看。點擊這裏http://serverapps.esri.com/javascript_examples/image_service_band_spinners.html,查看一個實例;
8、GPResultImageLayer:
繼承自DynamicMapServiceLayer,針對Geoprocessing服務所產生的結果。可以請求服務器端的GP服務將結果動態生成一張圖片,將此圖片作爲GPResultImageLayer圖層直接添加到Map控件中;
9、GraphicsLayer
繼承自Layer,這個圖層一般滿足我們與地圖交互時呈現的元素。比如拉框放大,我們能看見鼠標所畫的一個矩形;又比如對興趣點的查詢,結果通常是將符合條件的興趣點的形狀高亮顯示等。我們做GPS位置跟蹤時,一般才用的也就是它。

10、FeatureLayer
繼承自GraphicsLayer,這也是Silverlight API中的亮點之一,通過它可以完成一個比較炫的專題圖Renderer。
11、ElementLayer:
繼承自Layer,它可以用來專門呈現Silverlight中原生的FrameworkElement,比如視頻,音頻等。雖然在FillSymbol的Fill屬性中也能利用Brush類來展現一段視頻,但畢竟有些“小氣”,在ElementLayer中可以大大方方的放置Silverlight元素。你可能會問,在Map控件之外,Grid等佈局元素中不是也能放置Silverlight的東西嗎,爲什麼要放在ElementLayer裏呢?其實有個問題經常困擾GIS開發人員,就是想讓一些非地理數據元素隨着地圖範圍的變化(放大,縮小,平移)而變化,而無須自己在Extent變化後重新計算客戶端座標,手工改變這些元素的位置。瞧,ElementLayer正解決了這個問題。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章