常见问题

创建日期:2024-06-21
更新日期:2025-01-20

1、QueryParameters缺少setOutFields方法,FeatureTable.queryFeaturesAsync方法没有第二个参数,导致queryFeaturesAsync返回的要素属性不全。

解决方法:将FeatureTable转换为ServiceFeatureTable,调用queryFeaturesAsync方法,第二个参数传ServiceFeatureTable.QueryFeatureFields.LOAD_ALL即可。

/**
     * 获取相交要素
     *
     * @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;
    }