接著上節繼續介紹圖層...
2 動態圖層
與靜態圖層相反,動態圖層(AGSDynamicLayer)擷取的資料都是由服務端即時產生的,除了基本資料外,還聲明了exportMapImage方法和exportDelegate委託,從對應的地圖服務動態擷取地圖資料,是所有動態服務圖層的基類:
圖3-2-8 動態圖層的繼承關係
2.1 動態地圖服務圖層(AGSDynamicMapServiceLayer)
動態地圖服務圖層(AGSDynamicMapServiceLayer)對應了動態地圖服務,也是ArcGISServer最基本的服務,url結構:http://<server:port>/<instance>/rest/services/<service>/MapServer,以下是圖層初始化代碼:
NSURL* url = [NSURL URLWithString: @"http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/ Specialty/ESRI_StateCityHighway_USA/MapServer"]; NSError *error = nil; //同步擷取服務資訊的方法,不建議放在主線程中使用。 AGSMapServiceInfo *info = [AGSMapServiceInfo mapServiceInfoWithURL:urlerror:&error]; //確認服務的資訊後再初始化動態地圖服務圖層 ... AGSDynamicMapServiceLayer* layer = [AGSDynamicMapServiceLayerdynamicMapServiceLayerWithMapServiceInfo: info];
2.2 影像服務圖層(AGSImageServiceLayer)
影像服務圖層(AGSImageServiceLayer)對應了影像服務,是Web動態訪問影像資料的最佳選擇,url結構:http://<server:port>/<instance>/rest/services/<service>/ImageServer,以下是圖層初始化代碼:
NSURL* url = [NSURL URLWithString: @"http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Portland/CascadeLandsat/ImageServer"]; AGSImageServiceLayer* layer = [AGSDynamicMapServiceLayerimageServiceLayerWithURL: url]; 此外還提供了一些影像資料特有的屬性和方法,如:壓縮比、波段組合、鑲嵌規則、渲染規則和柵格插值,這裡就不一一展開介紹。 //單波段灰階圖 NSArray* grayscaleBandIds = [NSArrayarrayWithObject:[NSNumber numberWithInt:0] ]; layer.bandIds = grayscaleBandIds; //Red, Green, Blue多波段組合 NSArray* rgbBandIds = [NSArrayarrayWithObjects:[NSNumber numberWithInt:2], [NSNumber numberWithInt:5],[NSNumber numberWithInt:0], nil ]; layer.bandIds = rgbBandIds;
2.3 WMS服務圖層(AGSWMSLayer)
WMS服務圖層(AGSWMSLayer)對應了符合OGC WMS1.1\1.1.1\
1.3標準的網路地圖服務,WMS服務是類REST風格,因此可以直接繼承AGSDynamicLayer,url結構:http://<server:port>/<instance>/services/<service>/MapServer/WMSServer,以下是圖層初始化代碼:
NSURL* url = [NSURL URLWithString: @"http://sampleserver1.arcgisonline.com/ArcGIS/services/Specialty/ESRI_StateCityHighway_USA/MapServer/WMSServer"]; AGSWMSLayer* wmsLayer = [[AGSWMSLayeralloc] initWithURL:url] autorelease];
2.4 圖形圖層(AGSGraphicLayer)
圖形圖層(AGSGraphicLayer)比較特殊,不對應任何Service,完全由用戶端建立、更新和銷毀,是我們響應使用者輸入、展示查詢分析結果的利器。常用的方法包括:addGraphic添加圖形,removeGraphic清除圖形,dataChanged更新資料等,以下是圖層初始化代碼:
AGSGraphicsLayer*myGraphicsLayer = [AGSGraphicsLayer graphicsLayer];
在其基礎上還衍生出了要素服務圖層和草圖繪製圖層,下面依次進行介紹。
2.5 要素服務圖層(AGSFeatureLayer)
要素服務圖層(AGSFeatureLayer)對應了要素服務或動態地圖服務,要素服務的特點是提供了空間資料編輯能力,包括要素的幾何形狀、屬性和附件。
圖3-2-2-9 要素服務圖層的繼承關係
從功能設計上可以理解為AGSFeatureLayer = AGSQueryTask + AGSGraphicLayer,先從動態服務查詢要素,再把結果填充到圖形圖層中展示,url結構:
http://<server:port>/<instance>/rest/services/<service>/FeatureServer(MapServer)/<layerid>,以下是圖層初始化代碼:
NSURL* url = [NSURL URLWithString: @"http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer/0"]; AGSFeatureLayer* featureLayer =[AGSFeatureLayer featureServiceLayerWithURL: url mode:AGSFeatureLayerModeOnDemand];
Mode參數是個枚舉值:快照(Snapshot)/按需(On-Demand)/按查詢(Selection),其中Snapshot模式會一次性擷取所有要素,適合於要素數量少的情境;On-Demand模式按當前視野動態擷取要素,適合要素數量多,且更新頻率高的情境;Selection模式預設不擷取任何要素,按查詢條件動態擷取。
AGSFeatureLayer常用的操作包括:查詢要素(queryDelegate)、過濾顯示(selectFeaturesWithQuery)和編輯要素(updateFeatures)。
* AGSFeatureLayer的詳細用法將在“線上編輯”裡介紹。
2.6 草圖編輯圖層(AGSSketchGraphicLayer)
草圖編輯圖層(AGSSketchGraphicLayer)在圖形圖層基礎上對要素的幾何編輯操作進行了封裝,傳承了ArcGIS專業的編輯模式,包括:要素選中,節點拖動,撤銷操作、恢複操作、放大鏡效果等等。
圖3-2-2-10 草圖繪製服務圖層的繼承關係
草圖編輯的主要幾何對象:
表3-2-1 草圖繪製的主要對象
· 節點(Vertex) · 中點(Mid-point) · 選中的節點(Selected Vertex) · 線(Line) · 面填充(Fill) |
|
使用的一般流程是:建立草圖編輯圖層-擷取要素圖形(AGSGraphic對象)-響應觸摸操作(點擊、長按)-儲存圖形編輯結果-更新要素圖形,以下是圖層初始化代碼:
AGSSketchGraphicsLayer* sketchLyr =[[[AGSSketchGraphicsLayer alloc] initWithGeometry:nil]autorelease]; [self.mapViewaddMapLayer:sketchLyr withName:@"Sketch Layer"];
*AGSSketchGraphicLayer不用不知道,用了都說好:),詳細用法將在“線上編輯”裡介紹。