您的位置:首页 > 移动开发 > Android开发

ArcGIS API for Android 案例教程 12

2011-02-22 11:48 483 查看

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上去,这个程序执行的效果是这个样子的:



图 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。





图 30 使用GeometryEngine对一个多边形进行裁剪后的结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: