0

我正在发送几何查询以显示在地图上选择的要素并获取选定的要素。这两件事都工作正常,但是当我检查一个特性的属性字典时,它只包含 5 个键/值对,但 android 中的相同函数返回 10 个键/值对。

我正在做这样的查询

let query = AGSQueryParameters()

    if let selectionGraphicGeometry = selectionGraphic?.geometry {
        let geometry = AGSGeometryEngine.simplifyGeometry(selectionGraphicGeometry)

        query.geometry = geometry
    }

        selectableLayer?.selectFeatures(withQuery: query, mode: AGSSelectionMode.add, completion: { (result, error) in
        if let features = result?.featureEnumerator().allObjects {
            for feature in features {
                let keys = feature.attributes.allKeys
            }
        }

    }

我不知道我在哪里做错了

4

1 回答 1

2

在 Version 100 Runtime 中,为了提高效率,我们采用了稍微不同的方法。

默认情况下,功能将仅包含渲染和编辑所需的最少字段集。当您进行选择时,您正在使用这些功能,这就是您看到较小的字段集的原因。

如果您需要所选功能的所有字段,您实际上应该对您AGSServiceFeatureTable的功能执行查询并根据该查询选择功能。

像这样的东西:

let table = selectableLayer.featureTable as? AGSServiceFeatureTable
table?.queryFeatures(with: query, queryFeatureFields: .loadAll) { (result, error) in
    guard error == nil else {
        print("Error selecting features: \(error!.localizedDescription)")
        return
    }

    guard let features = result?.featureEnumerator().allObjects else {
        return
    }

    selectableLayer.select(features)

    for feature in features {
        let keys = feature.attributes.allKeys
        print(keys)
    }
}

奇怪的是,您说您在 Android 上看到的字段数量与在 iOS 上不同。您确定 Android 应用使用相同的渲染器显示相同的图层吗?

还有一点:使用Esri 社区 (GeoNet)可能会更好。可以在此处找到适用于 iOS 论坛的 ArcGIS Runtime SDK 。如果您在 iOS 和 Android 上看到具有相同层和渲染器的不同数量的字段,请在此处发布问题。

希望这可以帮助!

PS 您可能想知道两件相关的事情。

  1. AGSArcGISFeature实例现在是Loadable。因此,如果您有一个单独的功能并且您想从源服务中获取它的所有字段,您可以调用load(completion:)它。或者您可以将[AGSArcGISFeature]数组传递给ASGLoadObjects()辅助函数。但是,该功能将为每个功能发出单独的网络请求,因此如果您的阵列不小,可能会导致糟糕的用户体验。
  2. 您可以将您的设置AGSServiceFeatureTable.featureRequestMode.manualCache. 然后,您需要调用populateFromServiceWithParameters()以在本地加载所需的精确数据(并且当您平移和缩放地图时,您将需要手动管理此缓存)。有关更多详细信息,请参见此处
于 2018-04-06T17:54:37.940 回答