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;
}