ArcGIS API for Android 案例教程 10

I. 查询和识别

仅仅在客户端进行交互是不够的,用户大多数的时候都需要和服务交互,而最基础的需求就是对服务进行查询,涉及到空间查询、属性查询、要素识别等。

空间查询和属性查询

在这里,我想首先让用户在屏幕上绘制一个几何对象,至于怎么绘制这在上面的《通过交互绘制几何对象》一节中已经了解了,所以,这里我们可以简化一点:比如我们现在需要在屏幕上画了一个点,然后想用这个点做一个空间查询。

在这里,我把这些工作都放在屏幕长按的事件监听中,当用户在屏幕上长按时,我们认为用户在屏幕上画了一个点,取到这个点以后我们就可以将其作为Query对象的几何对象进行查询。在这里出现的Query和QueryTask对象如果你接触过ArcGIS Server开发想必是非常的眼熟,使用的方法也是非常类似。在下面高亮的代码中,我们可以看到对Query进行一定设置后,再执行QueryTask的execute方法,执行成功后就可以得到这次空间查询的结果:FeatureSet。

this.map.setOnLongPressListener(new OnLongPressListener() {

public void onLongPress(float x, float y) {

Point pt = AgsQuery.this.map.toMapPoint(x, y);

Query query = new Query("http://server.arcgisonline.com/ArcGIS/rest/services
/Demographics/USA_1990-2000_Population_Change/MapServer/4");

query.setGeometry(pt);

query.setReturnGeometry(true);

query

.setSpatialRelationship(Query.SpatialRelationship.INTERSECTS);

QueryTask queryTask = new QueryTask(query);

try {

FeatureSet fs = queryTask.execute();

SimpleFillSymbol symbol = new SimpleFillSymbol(Color.BLACK);

AgsQuery.this.gLayer

.setRenderer(new SimpleRenderer(symbol));

AgsQuery.this.gLayer.clear();

AgsQuery.this.gLayer.addGraphics(fs.getGraphics());

AgsQuery.this.gLayer.postInvalidate();

} catch (Exception e) {

e.printStackTrace();

}

}

});

FeatureSet对象中包含了所有结果Graphic的集合,这个集合甚至可以被直接批量添加到GraphicsLayer上去。这个例子运行的结果是这样的:

clip_image002

图 26 通过一个点进行空间查询

同样,使用QueryTask同样可以进行属性查询,比如我们稍微修改一下,只使用一个属性过滤:

Query query = new Query(queryUrl);

query.setWhere("RATE_POP<0.2");

query.setReturnGeometry(true);

QueryTask queryTask = new QueryTask(query);

这样的查询可能就会有多个结果返回了,同样,把所有的结果绘制到GraphicsLayer上,得到的结果就是这个样子的:

clip_image004

图 27 通过表达式进行属性查询

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值