Ios ArcGIS Runtime 100的AGSFeature.attributes现在在其字典中提供参数
我正在发送一个几何查询,以显示地图上选定的特征,并获取选定的特征。 这两个功能都正常工作,但当我检查一个功能的属性字典时,它只包含5个键/值对,但在android中相同的函数返回10个键/值对 我是这样问的Ios ArcGIS Runtime 100的AGSFeature.attributes现在在其字典中提供参数,ios,swift,arcgis-runtime,Ios,Swift,Arcgis Runtime,我正在发送一个几何查询,以显示地图上选定的特征,并获取选定的特征。 这两个功能都正常工作,但当我检查一个功能的属性字典时,它只包含5个键/值对,但在android中相同的函数返回10个键/值对 我是这样问的 let query = AGSQueryParameters() if let selectionGraphicGeometry = selectionGraphic?.geometry { let geometry = AGSGeometryEngine.simp
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
}
}
}
我不知道我哪里做错了在Version100运行时,为了提高效率,我们采取了稍微不同的方法 默认情况下,功能仅包括渲染和编辑所需的最小字段集。当您进行选择时,您正在使用这些功能,因此您会看到较小的字段集 如果您需要所选功能的所有字段,您应该实际在
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应用程序使用相同的渲染器显示相同的层吗
还有一点:您最好使用。可以找到iOS论坛的ArcGIS运行时SDK。如果你在iOS和Android上看到相同图层和渲染器的不同字段数,请在此处发布问题
希望这有帮助
另外,你可能想知道两件相关的事情
agsargisfeature
实例现在已启用。因此,如果您有一个单独的功能,并且您想要,您可以对其调用load(completion:)
。或者您可以将[AGSArcGISFeature]
数组传递给ASGLoadObjects()
helper函数。但是,该功能将为每个功能发出单独的网络请求,因此,如果阵列不小,可能会导致糟糕的用户体验AGSServiceFeatureTable.featureRequestMode
设置为.manualCache
。然后需要调用populateFromServiceWithParameters()
来加载本地所需的精确数据(在平移和缩放地图时,需要手动管理此缓存)。有关更多详细信息,请参阅在Version100运行时中,为了提高效率,我们采用了稍微不同的方法 默认情况下,功能仅包括渲染和编辑所需的最小字段集。当您进行选择时,您正在使用这些功能,因此您会看到较小的字段集 如果您需要所选功能的所有字段,您应该实际在
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应用程序使用相同的渲染器显示相同的层吗
还有一点:您最好使用。可以找到iOS论坛的ArcGIS运行时SDK。如果你在iOS和Android上看到相同图层和渲染器的不同字段数,请在此处发布问题
希望这有帮助
另外,你可能想知道两件相关的事情
agsargisfeature
实例现在已启用。因此,如果您有一个单独的功能,并且您想要,您可以对其调用load(completion:)
。或者您可以将[AGSArcGISFeature]
数组传递给ASGLoadObjects()
helper函数。但是,该功能将为每个功能发出单独的网络请求,因此,如果阵列不小,可能会导致糟糕的用户体验AGSServiceFeatureTable.featureRequestMode
设置为.manualCache
。然后需要调用populateFromServiceWithParameters()
来加载本地所需的精确数据(在平移和缩放地图时,需要手动管理此缓存)。有关更多详细信息,请参阅谢谢@Nixta。我刚刚知道,在android中,他们正在一个接一个地加载该功能,以获得完整的属性。但当我们选择数百个特性时,这是一个糟糕的方法。我用了你的程序,效果非常好。再次感谢:)谢谢@Nixta。我刚刚知道,在android中,他们正在一个接一个地加载该功能,以获得完整的属性。但当我们选择数百个特性时,这是一个糟糕的方法。我用了你的程序,效果非常好。再次感谢:)