ArcGIS Java中ServiceFeatureTable查询仅返回单个要素的解决方法
解决ArcGIS Runtime Java查询仅返回单个要素的问题
你遇到的问题其实很直观——你的代码只获取了查询结果里的第一个要素,并没有遍历所有返回的结果!下面是具体的解决方案:
1. 核心问题:只取了第一个要素
你当前的代码里,判断iterator.hasNext()后只调用了一次iterator.next(),所以不管查询结果有多少条,都只会输出第一个要素。要获取所有要素,需要用循环遍历整个迭代器。
2. 修改后的代码示例
ServiceFeatureTable featureTable = new ServiceFeatureTable(this.SERVICE_FEATURE_URL); QueryParameters query = new QueryParameters(); query.setWhereClause("1=1"); query.setReturnGeometry(true); // 设置返回所有要素(0表示不限制,或者设置一个足够大的数值) query.setMaxFeatures(0); ListenableFuture<FeatureQueryResult> queryFeaturesAsync = featureTable.queryFeaturesAsync(query); try { FeatureQueryResult result = queryFeaturesAsync.get(); Iterator<Feature> iterator = result.iterator(); // 循环遍历所有要素 while (iterator.hasNext()) { Feature feature = iterator.next(); System.out.println("要素属性:" + feature.getAttributes()); System.out.println("要素几何:" + feature.getGeometry()); System.out.println("---"); // 分隔每个要素,方便查看 } } catch (Exception e) { e.printStackTrace(); }
3. 额外注意事项
- setMaxFeatures的正确用法:设置为
0表示返回所有符合查询条件的要素(前提是服务端允许返回这么多)。如果服务本身有默认的最大返回限制(比如ArcGIS Online默认可能限制为1000条),你可能需要:- 检查ArcGIS Online要素图层的设置,确认是否调整了最大返回记录数;
- 如果数据量极大,考虑使用分页查询(通过
QueryParameters.setStartIndex()和setMaxFeatures()配合分批获取)。
- 无需FeatureLayer/MapView:你完全可以直接通过
ServiceFeatureTable查询要素,不需要关联地图视图,这部分你的做法是没问题的。
内容的提问来源于stack exchange,提问作者Naveen Kumar H S
相关产品推荐
相关产品推荐

