ArcGis for Java :使用serviceFeatureTable 获取图层layer、获取图层属性attibutes、获取图层layer中的所有geometry
不得不说网上arcgis相关的内容太太太少了,找来找去都没找到太多需要的信息,所以在这里做详细记录,希望能拯救下一个遇到同样问题的倒霉鬼。
获取图层
官网里面有个小教程:戳这里
ArcGISRuntimeEnvironment.setApiKey("YOUR_API_KEY");
// 创建一个地图
ArcGISMap map = new ArcGISMap(BasemapStyle.ARCGIS_TOPOGRAPHIC);
// 创建一个layer
FeatureLayer layer = new FeatureLayer(new ServiceFeatureTable("https://services3.arcgis.com/GVgbJbqm8hXASVYi/arcgis/rest/services/Parks_and_Open_Space_Styled/FeatureServer/0"));
// 把layer添加进地图
map.getOperationalLayers().addAll(Arrays.asList(layer));
可以发现,它在创建layer的时候,和java srcipt的api不同,js直接穿了个url,但这里传的是一个ServiceFeatureTable。
官方文档介绍了很多,以我四级考八次的水平,嗯.....看不懂。
但是获取要素是要从这个ServiceFeatureTable下手的。
获取要素
ListenableFuture
是通过查询的方式实现的,queryParams就是查询参数,这里不能为空。
如果要查询所有的要素,直接queryParams.setWhereClause("1=1")就可以了。
注意这个Async,它是一个异步的查询。
需要接收一下查询的结果,再处理。
result.addDoneListener(new Runnable() {
@Override
public void run() {
// 获取查询结果的对象
resultObject = queryresult.get();
// 通过迭代器获取要素
while (resultObject.iterator.hasNext()) {
// 获取要素
Feature feature = iterator.next();
// 获取几何图形
Geometry geometry = feature.getGeometry();
// 获取坐标系
SpatialReference spatialReference = feature.getGeometry().getSpatialReference();
}
}
});
其实还可以用httprequest直接发送get请求到图层服务url,接收结果。
最后强调一下,这是个异步哦。