ArcGIS for Android入门程序之DrawTool

来源:互联网 发布:天星教育php招聘 编辑:程序博客网 时间:2024/06/06 03:51

ArcGIS for Android是Esri公司推出的基于Android平台的移动开发包。与ArcGIS for IOS及ArcGIS for Windows Phone一样,ArcGIS for Android访问ArcGIS Server发布的REST服务,包括动态服务、切片服务、要素服务等地图服务,Query、Identify、GP等空间分析服务。

ArcGIS for Android提供了很好的开发资料,包括API Reference、Sample等,为了方便开发,还提供了ArcGIS Plugin for Eclipse,用于创建专门基于ArcGIS for Android的项目。至于如何配置开发环境、如何使用ArcGIS for Android SDK实现MobileGIS的基本功能,可以参考牛人牛魔王有关ArcGIS for Android的系列技术文章(牛魔王博客:http://blog.csdn.net/warrenwyf)。

了解了一点ArcGIS for Android之后,发现在开发中对于手势事件的响应是一个需要一点时间琢磨的问题,所以写了一个入门程序DrawTool。DrawTool是一个可以画点、线、矩形、多边形、圆形的工具类,进行了简单封装,能满足一般的画图需求。通过这个程序能够较好的掌握ArcGIS for Android中该如何处理各种手势事件。程序中的DrawToolActivity.java展示了如何调用DrawTool。

DrawToolActivity.java代码如下,源代码下载地址:http://download.csdn.net/source/3552287

 

ArcGIS Android SDK 2.0版本下的DrawTool2.0:http://blog.csdn.net/arcgis_mobile/article/details/8084763

 

package com.esrichina.android;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import com.esri.android.map.GraphicsLayer;import com.esri.android.map.MapView;import com.esri.core.symbol.MarkerSymbol;import com.esri.core.symbol.SimpleMarkerSymbol;import com.esrichina.android.ext.drawtool.DrawEvent;import com.esrichina.android.ext.drawtool.DrawEventListener;import com.esrichina.android.ext.drawtool.DrawTool;import com.esrichina.demo.geocoding.R;/** *  * @author ropp gispace@yeah.net *  * 由于要响应DrawTool的画图事件,此处需要实现DrawEventListener接口 */public class DrawToolActivity extends Activity implements DrawEventListener{    private MapView mapView;    private GraphicsLayer drawLayer;    private DrawTool drawTool;    private MarkerSymbol markerSymbol;    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                this.mapView = (MapView)this.findViewById(R.id.map);        this.drawLayer = new GraphicsLayer(this.mapView.getContext());        this.mapView.addLayer(this.drawLayer);        // 初始化DrawTool实例        this.drawTool = new DrawTool(this.mapView);        // 将本Activity设置为DrawTool实例的Listener        this.drawTool.addEventListener(this);                // 此处可以根据需要设置DrawTool实例画图时使用的各种symbol        this.markerSymbol = new SimpleMarkerSymbol(Color.RED, 20, SimpleMarkerSymbol.STYLE.CIRCLE);        //this.drawTool.setMarkerSymbol(markerSymbol);    }        @Override    public boolean onCreateOptionsMenu(Menu menu) {MenuInflater inflater = this.getMenuInflater();inflater.inflate(R.menu.menu, menu);return true;    }        @Override    public boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case R.id.point:drawTool.activate(DrawTool.POINT);break;case R.id.envelope:drawTool.activate(DrawTool.ENVELOPE);break;case R.id.polygon:drawTool.activate(DrawTool.POLYGON);break;case R.id.polyline:drawTool.activate(DrawTool.POLYLINE);break;case R.id.freehandpolygon:drawTool.activate(DrawTool.FREEHAND_POLYGON);break;case R.id.freehandpolyline:drawTool.activate(DrawTool.FREEHAND_POLYLINE);break;case R.id.circle:drawTool.activate(DrawTool.CIRCLE);break;case R.id.clear:this.drawLayer.clear();this.drawLayer.postInvalidate();this.drawTool.deactivate();break;}return true;    }    // 实现DrawEventListener中定义的方法    public void handleDrawEvent(DrawEvent event) {// 将画好的图形(已经实例化了Graphic),添加到drawLayer中并刷新显示this.drawLayer.addGraphic(event.getDrawGraphic());this.drawLayer.postInvalidate();    }}

效果图如下:


 

原创粉丝点击