关于图层的加载,参见前面的教程: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];//控制显示隐藏
}
}
}
}
}];