解决ArcGIS Runtime API queryFeaturesAsync无法返回全部属性问题

2025-09-05 10:27:15 2025-10-08 08:58:27 李腾 30 次阅读 0 次点赞
本文针对ArcGIS Runtime API开发中遇到的常见问题:FeatureTable的queryFeaturesAsync方法默认只返回CODE等少数属性字段,无法获取完整要素属性。通过分析API差异,提出将FeatureTable强制转换为ServiceFeatureTable的解决方案,利用其支持QueryFeatureFields.LOAD_ALL参数的queryFeaturesAsync方法重载版本。文档包含完整的Java代码实现,详细说明参数设置、异常处理和超时控制,帮助开发者快速解决实际开发中的要素属性获取不全问题。

问题描述

FeatureTable 的 queryFeaturesAsync 方法只有一个参数,签名如下:

public ListenableFuture<FeatureQueryResult> queryFeaturesAsync(QueryParameters queryParameters);

默认只会返回CODE等少数属性。网上说第二个参数加上ServiceFeatureTable.QueryFeatureFields.LOAD_ALL 即可返回所有属性,但是FeatureTable的queryFeaturesAsync方法没有第二个参数。

解决方法

把 FeatureTable 强制转换为 ServiceFeatureTable 即可。ServiceFeatureTable 的 queryFeaturesAsync方法有第二个参数,示例代码如下。

    /**
     * 获取相交要素
     *
     * @param table    数据表
     * @param geometry 几何
     * @param timeout  超时时间
     * @return 结果
     */
    public static R<List<Feature>> getIntersectFeatures(FeatureTable table, Geometry geometry, long timeout) {
        QueryParameters query = new QueryParameters();
        query.setSpatialRelationship(QueryParameters.SpatialRelationship.INTERSECTS);
        query.setGeometry(geometry);
        query.setMaxFeatures(100000);
        query.setOutSpatialReference(spatialReference);
        query.setReturnGeometry(true);

        R<List<Feature>> result = new R<>();

        ListenableFuture<FeatureQueryResult> featuresAsync = ((ServiceFeatureTable) table).queryFeaturesAsync(query, ServiceFeatureTable.QueryFeatureFields.LOAD_ALL);
        try {
            List<Feature> features = new ArrayList<>();
            featuresAsync.get(timeout, TimeUnit.SECONDS).forEach(features::add);
            result.setOk(features);
        } catch (Exception e) {
            e.printStackTrace();
            result.setFail(e.getMessage());
        }

        return result;
    }
本文由人工编写,AI优化,请仔细甄别,转载请注明转自www.hylab.cn,原文地址:ArcGIS Runtime API queryFeaturesAsync返回所有属性字段的解决方法

评论 (0)

登录后发表评论

暂无评论,快来发表第一条评论吧!