關於圖層的加載,參見前面的教程:https://blog.csdn.net/qq_31672459/article/details/79729826
一個圖層服務上多個圖層時,結合服務的鏈接地址訪問查看詳細信息進行代碼編寫會更方便,形如以下這個arcgis服務:
http://arcgis.wuhanrt.cn:6080/arcgis/rest/services/Base/DLG/MapServer
一般會用到arcgis服務的企業,其數據或多或少是涉密的,所以這裏僅提供一個圖層截圖以供參考:
參照這個信息來進行圖層控制再方便不過了,iOS控制代碼也很簡單,如下(比如只顯示範圍線):
//加載動態圖層,一般該圖層拿來展示元素以供展示管線數據、管控數據等,還有查詢等用途
AGSArcGISMapImageLayer *dynamicLayer = [AGSArcGISMapImageLayer ArcGISMapImageLayerWithURL:[NSURL URLWithString:@"http://地址及端口號/arcgis/rest/services/CJXCMap/CJXCMapService/MapServer"]];
[self.map.operationalLayers addObject:dynamicLayer];
[dynamicLayer loadWithCompletion:^(NSError * _Nullable error) {
if (!error) {
//獲取子圖層
for (AGSArcGISMapImageSublayer *subLayer in dynamicLayer.mapImageSublayers) {
if (subLayer.sublayerID != 14) {
//控制隱藏或者顯示
[subLayer setVisible:NO];
}
}
}
}];
可能是100.2.1還沒寫好,明明AGSArcGISMapImageSublayer類有個sublayers屬性,但是一旦調用就會造成死循環,項目閃退,因此,多個元素圖層層級的需要迂迴獲取,代碼如下:
[dynamicLayer loadWithCompletion:^(NSError * _Nullable error) {
if (!error) {
//獲取子圖層
for (AGSArcGISMapImageSublayer *subLayer in dynamicLayer.mapImageSublayers) {
NSLog(@"所有圖層id:%@",@(subLayer.sublayerID));//第一層級元素圖層
for (id<AGSLayerContent>subSubLayer in subLayer.subLayerContents) {
if ([subLayer isKindOfClass:[AGSArcGISSublayer class]]) {
AGSArcGISSublayer *subSubGisLayer = (AGSArcGISSublayer *)subSubLayer;
NSLog(@"所有子圖層id:%@",@(subSubGisLayer.sublayerID));//第二層級元素圖層
[subSubGisLayer setVisible:NO];//控制顯示隱藏
}
}
}
}
}];