android arcgis 绘制圆_Android应用开发arcgis for android 实现绘图功能

本文详细介绍了如何在Android应用开发中利用ArcGIS for Android实现地图的绘图功能,包括绘制点、线、面。通过创建MapOnTouchListener监听地图点击,使用SimpleMarkerSymbol、SimpleLineSymbol和SimpleFillSymbol设置样式,创建GraphicsLayer来存储图形,并将其添加到地图上。文章还提供了具体的代码示例,帮助开发者理解实现过程。
摘要由CSDN通过智能技术生成

本文将带你了解Android应用开发arcgis for android 实现绘图功能,希望本文对大家学Android有所帮助。

<

一:实现绘图功能的思路

1:首先需要一个点击地图的一个监听函数,可以实现点击地图画点、线、面。arcgis提供一个MapOnTouchListener类。

2:创建点、线、面对象,arcgis提供的类有Point,Polygon,Line

3:设置样式,不管是点、线、面都有自己的样式。arcgis提供了SimpleLineSymbol (线样式类)SimpleMarkerSymbol(点样式类)SimpleFillSymbol(面样式类)

4:创建一个绘画的图层,GraphicsLayer

5:将绘画图层添加到地图上。

二:实现代码

1:创建一个类继承MapOnTouchListener用来监听地图的点击

public class MapTouchListener extends MapOnTouchListener {/**     * 单击地图     */    public boolean onSingleTap(MotionEvent point) {}}

2:创建点、线、面对象

//屏幕坐标转化成空间坐标Point mapPoint = map.toMapPoint(point.getX(),point.getY());

3:创建样式

//设置点、线、面的样式private void initSymbols(){    markerSymbol = new SimpleMarkerSymbol(Color.BLUE,10,STYLE.CIRCLE);    lineSymbol =  new SimpleLineSymbol(Color.BLACK, 1, SimpleLineSymbol.STYLE.SOLID);    fillSymbol = new SimpleFillSymbol(Color.BLACK, SimpleFillSymbol.STYLE.SOLID);    fillSymbol.setAlpha(33);//设置的透明度}

4:创建一个绘画图层

//创建绘图图层 对象drawLayer = new GraphicsLayer();mMapView.addLayer(drawLayer);

5:添加到地图上(这一定要加上,否则地图的监听事件无法实现)

//绑定触摸事件监听器    mapTouchListener=new MapTouchListener(EarthquakeActivity.this,mMapView);    mapTouchListener.setLayer(drawLayer);    mMapView.setOnTouchListener(mapTouchListener);

6:完成代码

package cn.zzu.Graphic; import java.text.DecimalFormat;import java.util.ArrayList; import android.content.Context;import android.graphics.Color;import android.view.MotionEvent;import android.widget.Toast; import cn.zzu.Global.Variable;import cn.zzu.Query.MyIdentifyTask; import com.esri.android.map.GraphicsLayer;import com.esri.android.map.MapOnTouchListener;import com.esri.android.map.MapView;import com.esri.core.geometry.Envelope;import com.esri.core.geometry.Geometry;import com.esri.core.geometry.Geometry.Type;import com.esri.core.geometry.GeometryEngine;import com.esri.core.geometry.Line;import com.esri.core.geometry.MultiPath;import com.esri.core.geometry.Point;import com.esri.core.geometry.Polygon;import com.esri.core.geometry.Polyline;import com.esri.core.geometry.SpatialReference;import com.esri.core.map.Graphic;import com.esri.core.symbol.SimpleFillSymbol;import com.esri.core.symbol.SimpleLineSymbol;import com.esri.core.symbol.SimpleMarkerSymbol;import com.esri.core.symbol.SimpleMarkerSymbol.STYLE;import com.esri.core.tasks.identify.IdentifyParameters; public class MapTouchListener extends MapOnTouchListener {    private Context context;//上下文    private MapView map;//地图对象    private GraphicsLayer graphicsLayer;//画图图层    private Geometry.Type geoType = null;//绘图的对象    private Point endPonit = null;    private Polygon polygon;    private Polygon webPolygon;    private SimpleLineSymbol lineSymbol;      private SimpleMarkerSymbol markerSymbol;      private SimpleFillSymbol fillSymbol;    private ArrayListpoints=null;//记录全部点    private IdentifyParameters params;    public MapTouchListener(Context context, MapView map) {             super(context, map);        this.context = context;        this.map = map;        //样式初始化        initSymbols();    }         // 根据用户选择设置当前绘制的几何图形类型    public void setDrawType(Geometry.Type geotype)    {        this.geoType=geotype;        //将上一次绘图的图形删除        graphicsLayer.removeAll();        endPonit = null;        if(geoType == Geometry.Type.POLYGON)            points=new ArrayList();    }    /**     * 判断是否量测     * @param measure     */    public void setMeasure(boolean measure){        if(geoType == Geometry.Type.POLYLINE)            Variable.measureLength = measure;        if(geoType == Geometry.Type.POLYGON)            Variable.measureArea = measure;    }    /**     *      * 创建画图图层     * @param drawLayer     */    public void setLayer(GraphicsLayer drawLayer){        this.graphicsLayer=drawLayer;    }    //设置点、线、面的样式    private void initSymbols(){        markerSymbol = new SimpleMarkerSymbol(Color.BLUE,10,STYLE.CIRCLE);        lineSymbol =  new SimpleLineSymbol(Color.BLACK, 1, SimpleLineSymbol.STYLE.SOLID);        fillSymbol = new SimpleFillSymbol(Color.BLACK, SimpleFillSymbol.STYLE.SOLID);        fillSymbol.setAlpha(33);//设置的透明度    }          public void setQueryParams(){        //实例化对象,并且给实现初始化相应的值        params = new IdentifyParameters();//创建查询的对象        params.setTolerance(20);//设置识别的容差        params.setDPI(98);//设置自分辨率        params.setLayers(new int[]{0,1,2,3,6});//设置识别的图层        params.setLayerMode(IdentifyParameters.ALL_LAYERS);//设置模式为识别服务上所有的图层    }     /**     * 单击地图     */    public boolean onSingleTap(MotionEvent point) {        //屏幕坐标转化成空间坐标        Point mapPoint = map.toMapPoint(point.getX(),point.getY());        if(Variable.singleQuery&&geoType ==null){            params.setGeometry(mapPoint);            params.setSpatialReference(map.getSpatialReference());    // 设置坐标系                                                     params.setMapHeight(map.getHeight());            params.setMapWidth(map.getWidth());            Envelope env = new Envelope();            map.getExtent().queryEnvelope(env);            params.setMapExtent(env);              //我们自己扩展的异步类            MyIdentifyTask mTask = new MyIdentifyTask(context,map,mapPoint);            mTask.execute(params);//执行异步操作并传递所需的参数            }                 if(geoType == Geometry.Type.POLYGON)            points.add(mapPoint);//将当前点加入点集合中        if(geoType == null)            return true;        if(geoType == Geometry.Type.POINT){            //画点            Graphic graphic = new Graphic(mapPoint,markerSymbol);            graphicsLayer.addGraphic(graphic);        }else{            if(endPonit==null){                //线或者面的第一个点                Graphic graphic = new Graphic(mapPoint,markerSymbol);                graphicsLayer.addGraphic(graphic);            }else{                //画点                Graphic graphic = new Graphic(mapPoint,markerSymbol);                graphicsLayer.addGraphic(graphic);                //两点连线                Line line = new Line() ;                line.setStart(endPonit);//起始点                 line.setEnd(mapPoint);//终止点                                 //画折线                if(geoType == Geometry.Type.POLYLINE){                    Polyline polyline = new Polyline();                     polyline.addSegment(line, true);                      Graphic iGraphic=new Graphic(polyline,lineSymbol);                     graphicsLayer.addGraphic(iGraphic);                    if(Variable.measureLength)                        measure(endPonit,mapPoint,geoType);                }                if(geoType == Geometry.Type.POLYGON){                    graphicsLayer.removeAll();                      //画面                      if(polygon==null){                            polygon=new Polygon();                           webPolygon=new Polygon();                      }                        Polygon polygon = new Polygon();                        Point startPoint = null;                        Point endPoint = null;                          // 绘制完整的多边形                         for(int i=1;i1000){                mathLength=mathLength/1000;                String format = new DecimalFormat("0.00").format(mathLength);//保留小数点后两位                length = format+"公里";            }else{                String format = new DecimalFormat("0.00").format(mathLength);//保留小数点后两位                length = format+"米";            }            Toast.makeText(context, "距离:"+length, Toast.LENGTH_SHORT).show();        }                 if(geoType == Geometry.Type.POLYGON ){             Polygon polygon = new Polygon();                  Point startPoint = null;              Point endPoint = null;              // 绘制完整的多边形              for(int i=1;i1000000){                mathArea2D=mathArea2D/1000000;                String format = new DecimalFormat("0.00").format(mathArea2D);//保留小数点后两位                Area = format+"平方公里";            }else{                String format = new DecimalFormat("0.00").format(mathArea2D);//保留小数点后两位                Area = format+"平方米";            }            Toast.makeText(context, "面积:"+Area, Toast.LENGTH_SHORT).show();        }             } }

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值