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官方文档介绍

官方文档介绍了很多,以我四级考八次的水平,嗯.....看不懂。

但是获取要素是要从这个ServiceFeatureTable下手的。

获取要素

ListenableFuture result = serviceFeatureTable.queryFeaturesAsync(queryParams,ServiceFeatureTable.QueryFeatureFields.LOAD_ALL);

是通过查询的方式实现的,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,接收结果。

最后强调一下,这是个异步哦。

posted on 2022-01-18 15:19  northwest  阅读(492)  评论(0编辑  收藏  举报

导航