ArcGIS API For IOS 實現圖層顯示控制分兩個粒度,分別是服務的顯示控制,然後是圖層的顯示控制。
1)服務的顯示控制
服務的顯示控制用AGSMapView Class實現。每個UIViewController介面如果載入地圖都會有一個AGSMapView對象執行個體,那麼設定這個AGSMapView 執行個體的hidden=TRUE;比如:AGSTiledMapServiceLayer *tiledLayer = [[AGSTiledMapServiceLayer alloc] initWithURL:[NSURL URLWithString:kTiledEMapZoneMapServiceURL ]];
UIView *emapzoneTiledMap = [self.mapView addMapLayer:tiledLayer withName:@"Tiled Layer"];
emapzoneTiledMap.hidden = NO;2)地圖視圖上服務的顯示控制
單個地圖服務的顯示控制用AGSDynamicLayerView或AGSTiledLayerView實現,比如:
NSDictionary *dict=self.mapView.mapLayerViews;
NSArray *arr=[dict allValues];
for (int i = 0; i < [arr count]; i++) {
AGSDynamicLayerView *mapLayerView=[arr objectAtIndex:i];
if (顯示控制條件) {
mapLayerView.hidden=TRUE;
}
}
3)單個服務內有多個圖層的顯示控制
NSURL* url = [NSURL URLWithString: @"http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer"];AGSDynamicMapServiceLayer*
layer = [AGSDynamicMapServiceLayer dynamicMapServiceLayerWithURL: url];
//only display ‘ushigh’ (id=0) and ‘states’ (id=1) layer
layer.visibleLayers = [NSArray arrayWithObjects:[NSNumber numberWithInt:0],[NSNumber numberWithInt:1], nil];
通過設定visibleLayers 來確定圖層是否可見。
4) 小結
物件模型圖表如下:
實際上AGSMapView 、AGSLayerView對象都是UIView的子類,所以最終控制的是UIView是否可見。這樣通過設定UIView是否隱藏來進行圖層顯示的控制。