四、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];//控制顯示隱藏
                    }
                }
            }
        }
    }];

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