我已经在ArcGIS Online上创建了一个要素服务,该服务具有大约2000个要素。每个功能都有四个字段:名称,纬度,经度和一个布尔验证字段(真/假)。使用了两个自定义符号-一个用于验证的特征,一个用于未验证的特征。
我已经从我的本机(xcode / swift)iOS应用程序成功连接到要素服务,并且要素正确显示在底图的顶部。
我已经实现了触摸委托,并成功检测到何时点击了功能符号。我遇到的问题是尝试查询(读取)与所点击符号关联的“名称”字段属性。我尝试使用下面的代码,但无法读取属性:
func geoView(_ geoView: AGSGeoView, didTapAtScreenPoint screenPoint: CGPoint, mapPoint: AGSPoint) {
if let activeSelectionQuery = activeSelectionQuery {
activeSelectionQuery.cancel()
}
guard let featureLayer = featureLayer else {
return
}
//tolerance level
let toleranceInPoints: Double = 12
//use tolerance to compute the envelope for query
let toleranceInMapUnits = toleranceInPoints * viewMap.unitsPerPoint
let envelope = AGSEnvelope(xMin: mapPoint.x - toleranceInMapUnits,
yMin: mapPoint.y - toleranceInMapUnits,
xMax: mapPoint.x + toleranceInMapUnits,
yMax: mapPoint.y + toleranceInMapUnits,
spatialReference: viewMap.map?.spatialReference)
//create query parameters object
let queryParams = AGSQueryParameters()
queryParams.geometry = envelope
//run the selection query
activeSelectionQuery = featureLayer.selectFeatures(withQuery: queryParams, mode: .new) { [weak self] (queryResult: AGSFeatureQueryResult?, error: Error?) in
if let error = error {
print("error: ",error)
}
if let result = queryResult {
print("\(result.featureEnumerator().allObjects.count) feature(s) selected")
print("name: ", result.fields)
}
}
}
我正在使用ArGIS iOS 100.6 SDK。
在解决此问题方面的任何帮助将不胜感激。
最佳答案
featureLayer
选择方法仅更新地图视图显示以在视觉上突出显示要素。
从featureLayer
,您应该获得featureTable
,然后在其上调用query()
。请注意,有两种方法。一个简单的query()
可以获取最少的属性,或者an override on AGSServiceFeatureTable
可以让您指定要返回所有字段。您可能需要在该覆盖上指定.loadAll
来取回name
字段。我们这样做是为了避免下载过多的信息(默认情况下,我们下载的内容足以符号化和标记功能)。
关于swift - 无法从ArcGIS Online Feature Service查询要素属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58769608/