0

我刚刚更新了我的 ArcGis sdk 以使用 sdk 版本 100.2.1。

以前获取我使用的图层名称

AGSFeatureLayer *featureLayer = (AGSFeatureLayer *) layer;
layerName = featureLayer.serviceLayerName

现在在 sdk 100.2.1 中没有参数名称

layerName = layer?.name

但它返回不同的字符串

在 10.2.1 中,它正在返回 POI,在 100.2.1 中,它正在返回图像位置

我已经实现了一个支持的逻辑,所以有没有办法在运行时 100 中获得相同的服务名称?

4

2 回答 2

0

在进行研究时,我发现在android 的 arcgis sdk 10 中,我们从要素层的layerInfo 参数获取服务名称,但在 ios 中没有任何 layerInfo 参数,我们有一个直接参数 serviceLayerName 来获取图层的服务名称。

所以我发现在ArcGis sdk 100 arcgis 中引入了 feature layer 中的 layer info 参数

let serviceFeatureTable = featureLayer?.featureTable
serviceFeatureTable.load { (error) in
     if let layerName = serviceFeatureTable.layerInfo?.serviceLayerName {

     }
}
于 2018-06-07T05:48:09.697 回答
0

看起来您想要服务的名称而不是图层的名称:

layerName = (layer?.featureTable as? AGSServiceFeatureTable)?.tableName

如果您要使用离线工作流程,或者您不确定并希望在未来发生这种情况时让自己适应未来,您可以扩大范围(请参阅此处的类层次结构图)和利用:

layerName = (layer?.featureTable as? AGSArcGISFeatureTable)?.tableName

更新: 请注意,正如您在回复中提到的,您需要确保已加载功能表,因此这样的事情可能更合适:

let serviceLayerTable = layer?.featureTable as? AGSServiceFeatureTable
serviceLayerTable?.load(completion: { error in
    guard error == nil else {
        print("Error loading table: \(error!.localizedDescription)")
        return
    }
    if let layerName = serviceLayerTable?.tableName {

    }
})

如果您愿意,您可以阅读layerInfo,但该tableName属性应该适合您(一旦加载表格:))。

于 2018-06-06T13:32:33.067 回答