ArcGIS API for Android 案例教程 12

I. 几何对象操作与地理处理

几何对象(Geometry)的操作和地理处理(GeoProcessing/GP)是在地图基础上实现更复杂GIS能力的必要功能,在这一章中让我们来看看在ArcGIS Android API中的如何对几何对象进行操作和如何使用GP服务。

几何对象的操作

ArcGIS Android API对几何对象的操作和其它ArcGIS的Web API有很大区别,它并不是依赖ArcGIS Sever的Geometry Service,而是在API库中本身就包含了对几何对象的定义和处理。

如果我们相对一个几何对象进行buffer操作,这时不需要再指定一个Geometry Service的地址了,而是使用ArcGIS Android API提供的GeometryEngine类就可以实现这些类似的功能。

比如下面的代码实现了一个buffer的功能:

map.setOnLongPressListener(new OnLongPressListener() {

public void onLongPress(float x, float y) {

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

Polygon pg = GeometryEngine.buffer(pt, map

.getSpatialReference(), 1000000, null); //null表示采用地图单位

Graphic g = new Graphic();

g.setGeometry(pg);

AgsGeometryEngine.this.gLayer.addGraphic(g);

AgsGeometryEngine.this.gLayer.postInvalidate();

}

});

这样,当我在地图上长按时,程序会捕捉到地图上的坐标,然后通过GeometryEngine的静态方法buffer对这个点进行一个缓冲操作,最后把结果绘制到GraphicsLayer上去,这个程序执行的效果是这个样子的:

clip_image002

图 29 使用GeometryEngine对点进行缓冲的结果

如果我还想对生成的这个多边形进行一下裁剪,依然可以使用GeometryEngine实现:

map.setOnLongPressListener(new OnLongPressListener() {

public void onLongPress(float x, float y) {

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

Polygon pg = GeometryEngine.buffer(pt, map

.getSpatialReference(), 2000000, null);

Geometry geo = GeometryEngine.clip(pg, map.getExtent(), map

.getSpatialReference());//用当前地图范围进行裁剪

Graphic g = new Graphic();

g.setGeometry(geo);

AgsGeometryEngine.this.gLayer.addGraphic(g);

AgsGeometryEngine.this.gLayer.postInvalidate();

}

});

这样,当我在程序左上角边界附近处长按屏幕生成一个圆形的多边形后,程序还会调用GeometryEngine进行一个clip操作,通过这个操作多边形将只保留在当前程序窗口内的部分,所以,如果再拖动一下地图就可以看到,这个多边形已经成为了一个饼状的图形,如图 30。

clip_image004 clip_image006

30 使用GeometryEngine对一个多边形进行裁剪后的结果

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值