ArcGIS for Android入门程序之DrawTool

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();
    }
}

效果图如下:


 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值