什么是圖層
圖層是用來在 ArcGIS 產品套件中顯示地理數據集的機制。每個圖層代表一種數據集(可以是地圖服務、圖形或是矢量數據),並指定該數據集是如何描繪使用一組屬性的。
包含一個地圖控件的每個應用程序是通過添加一系列圖層組裝的。圖層以特定的順序顯示在地圖上,列在最底部的圖層在地圖的最上面顯示,也就是先添加的圖層在下面顯示(原理類似於“棧”)。比如,在XAML代碼中,最靠上的圖層在顯示時會出現在Map控件的最底端,如圖:
圖層介紹
第一個圖層的空間坐標系SpatialReference決定了地圖的空間坐標系,圖層只能在UI線程上進行實例化。以下是所有的圖層類:
所有的圖層都是從Layer類型繼承而來的,可以參考下載的API中的對象模型圖。
Layer
|–TiledMapServiceLayer
| |–ArcGISTiledMapServiceLayer
|–DynamicLayer
| |–DynamicMapServiceLayer
| |–ArcGISDynamicMapServiceLayer
| |–ArcGISImageServiceLayer
| |–GPResultImageLayer
|–GraphicsLayer
| |–FeatureLayer
|–ElementLayer
Layer是最基本的基類,常用的幾種圖層類型已經用紅色標記出來了。
(1)Layer:繼承自DependencyObject,並實現了INotifyPropertyChanged接口,是其他圖層的基類。
(2)TiledMapServiceLayer:繼承自Layer,是所有使用了緩存的地圖服務的基類。通過它可以在程序中加入經過緩存的,來自 不同數據源的地圖服務。比如ArcGIS Server的地圖服務,Google Map的地圖,Virtual Earth的地圖等。
(3)ArcGISTiledMapServiceLayer:繼承自TiledMapServiceLayer。這個圖層擴展了TiledMapServiceLayer,支持由ArcGIS Server發布的經過緩存的地圖服務。
(4)DynamicLayer:繼承自Layer,是動態地圖服務的基類。
(5)DynamicMapServiceLayer:繼承自DynamicLayer,對應於TiledMapServiceLayer,要使用未經過緩存的動態地圖服務,就得通過擴展這個圖層來實現。
(6)ArcGISDynamicMapServiceLayer:繼承自DynamicMapServiceLayer,針對ArcGIS Server 9.3版本發布的動態地圖服務。同理,如果要在客戶端API中使用其他動態地圖服務,比如OGC的WMS服務,則也需要像這個圖層一樣,擴展上面的 DynamicMapServiceLayer來實現。
(7)ArcGISImageServiceLayer:繼承自DynamicMapServiceLayer,針對ArcGIS Server 9.3版本發布的Image Service,因為影像服務也屬於動態的地圖服務。在客戶端API中,可以通過ArcGISImageServiceLayer的一些屬性,方便通過瀏 覽器來展示服務器端的影像數據,比如通過BandIds屬性,可以快速調整影像數據顯示波段的組合(RGB通道),提供不同結果供用戶查看。點擊這里,查看一個實例。
(8)GPResultImageLayer:繼承自DynamicMapServiceLayer,針對Geoprocessing服務所產生的 結果。可以請求服務器端的GP服務將結果動態生成一張圖片,將此圖片作為GPResultImageLayer圖層直接添加到Map控件中。
(9)GraphicsLayer:繼承自Layer,是圖形數據集中展現的地方。GraphicsLayer是保留在內存中的一種圖層(與 ArcMap、ArcGIS Engine、ArcGIS Server ADF程序中的相應概念類似),顧名思義是很多Graphic的集合,而所有與用戶交互的內容通常都用Graphic來顯示。比如多邊形查詢中用戶畫出的 多邊形,屬性/空間查詢結果中的所有要素(Feature)等內容,都是Graphic。可以說,除了地圖本身,基本上看到的所有與地理位置有關的東西都 可以用Graphic來表示。Graphic對象有3個重要的屬性:Geometry,Symbol和Attributes。Geometry代表了一個 Graphic的幾何形狀(可疑是點、線、面任意一種)或地理位置,而Symbol則表示Graphic的呈現樣子,比如顏色、效果,同時有了這兩個屬性 (缺一不可),Graphic就可以顯示到地圖上了。而Attributes是鍵值對集合,可在里面存儲任意類型的對象,比如一個要素的屬性信息。
(10)FeatureLayer:繼承自GraphicsLayer,這也是ArcGIS API for Silverlight/WPF 中的亮點之一,通過它可以完成一些比較炫的功能。FeatureLayer繼承自GraphicsLayer,它與后者的區別 是,GraphicsLayer中的Graphic都是人為創建出來的,而FeatureLayer中的Graphic都是從ArcGIS Server發布的服務中讀取出來的,因此FeatureLayer比GraphicsLayer多了一個URL屬性。這個URL通常指向一個 ArcGIS Server發布的MapService或FeatureService的子圖層(對應一個FeatureClass)。FeatureLayer有了這 個URL后,就可以讀取出該服務對應子圖層里的所有要素內容,因此FeatureLayer里Graphic的Geometry屬性會自動被 FeatureClass的Shape字段填充,而Graphic的Attributes字段則會根據要求,被FeatureClass中的屬性信息所填 充。如果發布服務的服務器是ArcGIS Server 10版本,則Graphic的Symbol屬性會自動被服務的DrawingInfo信息填充。另外,FeatureLayer是客戶端API中對 FeatureService的唯一載體,這是它另一個非常重要的作用(也是主要作用)。
(11)ElementLayer:繼承自Layer,它可以用來專門呈現Silverlight/WPF中原生的 FrameworkElement,比如視頻,音頻等。雖然在FillSymbol的Fill屬性中也能利用Brush類來展現一段視頻,但畢竟有些“小 氣”,在ElementLayer中可以大大方方的放置Silverlight/WPF元素。雖然在Map控件之外,Grid等布局元素中也能放置 Silverlight的東西,但是ElementLayer的優勢在於:當一些非地理數據元素隨着地圖范圍的變化(放大,縮小,平移)的時候,無須在地 圖Extent變化后重新計算客戶端坐標,再改變這些元素的位置。
ArcGISTiledMapServiceLayer和ArcGISDynamicMapServiceLayer分別用於加載ArcGIS Server發布的緩存地圖服務和動態地圖服務。GraphicsLayer和FeatureLayer,可以說這是API中最常用的兩種圖層,大部分的 程序功能都要基於它們來完成。