四、ArcGIS Runtime SDK for iOS 100.2.1教程系列之图层控制显示隐藏

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章