Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios ArcGIS Runtime 100的AGSFeature.attributes现在在其字典中提供参数_Ios_Swift_Arcgis Runtime - Fatal编程技术网

Ios ArcGIS Runtime 100的AGSFeature.attributes现在在其字典中提供参数

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

我正在发送一个几何查询,以显示地图上选定的特征,并获取选定的特征。 这两个功能都正常工作,但当我检查一个功能的属性字典时,它只包含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
            }
        }

    }

我不知道我哪里做错了

在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中,他们正在一个接一个地加载该功能,以获得完整的属性。但当我们选择数百个特性时,这是一个糟糕的方法。我用了你的程序,效果非常好。再次感谢:)