android arcgis 按钮,ArcGIS Runtime For Android 开发(4)

这篇博客介绍了如何在ArcGISRuntimeForAndroid中使用GraphicsLayer进行图形绘制。通过创建ActionCommand枚举处理绘制命令,监听地图点击事件,使用不同类型的Symbol绘制点、线和面。详细步骤包括初始化GraphicsLayer,实现OnSingleTapListener,以及根据用户操作绘制图形。
摘要由CSDN通过智能技术生成

第四课 图形绘制

加载完地图以后,我们可能需要做一些数据采集的操作,那么绘制图形就非常的有用处了。在ArcGIS Runtime For Android 中,我们使用GraphicsLayer来承载绘制的图形。

我们先看一下绘制的逻辑:

AAffA0nNPuCLAAAAAElFTkSuQmCC

地图中应该包含绘制层---------->GraphicsLayer

在界面上,点击按钮向系统发送命令-------->需要一个枚举类,存放命令

地图需要监听点击事件 ---------->OnSingleTapListener

每个图形需要一个默认的符号------>Symbol

图形是根据点来绘制的,所以需要保存图形的点数据------->List

那么接下来就简单了,根据ArcGIS Runtime For Android 提供的API,我们就可以完成图形的绘制。

首先,新建一个ActionCommand枚举类

public enum ActionCommand {

NULL, //置空

DRAW_POINT, //绘制点

DRAW_LINE, //绘制线

DRAW_POLYGON //绘制面

}

在地图界面,实例化一个GraphicsLayer,并将这个GraphicsLayer加入到Map中;

GraphicsLayer drawLayer;

MapView mapView;

List tempDrawPoints;

PloyLine pPloyLine;

Ploygon pPloygon;

……

public void InitControl()

{

mapView =(MapView) findViewById(R.id.mapView);

mapView.setOnSingleTapListener(onSingleTap);

}

public InitData()

{

String url ="https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer";

ArcGISTiledMapServiceLayer serviceLayer=new ArcGISTiledMapServiceLayer(url );

mapView.addLayer(serviceLayer);//添加图层到地图窗口中

drawLayer=new GraphicsLayer ();

mapView.addLayer(drawLayer);

tempDrawPoints=new ArrayList();

}

添加监听事件:

OnSingleTapListener onSingleTapListener = new OnSingleTapListener() {

@Override

public void onSingleTap(float v, float v1) {

Point pnt = mapView.toMapPoint(v, v1);

switch (SystemManager.curAction) {

case NULL:

break;

case DRAW_POINT:

DrawPoint(pnt );

break;

case DRAW_LINE:

DrawLine(pnt );

break;

case DRAW_POLYGON:

DrawPolygon(pnt );

break;

}

}

};

然后是绘制图形:

public void DrawPoint(Point pnt)

{

Graphic graphic = new Graphic(curPoint, simpleSymbol);

drawLayer.addGraphic(graphic);

}

public void DrawLine(Point pnt)

{

if (tempPoints.size() == 1) {

Point point = tempDrawPoints.get(0);

DrawPoint(point )

}

esle{

drawLayer.removeAll();

pPloyLine= new PloyLine();

for (int i = 1; i < tempDrawPoints.size(); i++) {

Point sPoint = tempDrawPoints.get(i - 1);

Point ePoint = tempDrawPoints.get(i);

Line line = new Line();

line.setStart(sPoint);

line.setEnd(ePoint);

pPloyLine.addSegment(line, false);

}

Graphic polylineGraphic= new Graphic(pPloyLine,

MapManager.simpleLineSymbol);

int UID=drawLayer.addGraphic(polylineGraphic);}

}

public void DrawPolygon()

{

if (tempPoints.size() == 1) {

Point point = tempDrawPoints.get(0);

DrawPoint(point )

}

else {

drawLayer.removeAll();

pPolygon = new Polygon();

for (int i = 1; i < tempDrawPoints.size(); i++) {

Point sPoint = tempDrawPoints.get(i - 1);

Point ePoint = tempDrawPoints.get(i);

Line line = new Line();

line.setStart(sPoint);

line.setEnd(ePoint);

pPolygon.addSegment(line, false);

}

Graphic polygonGraphic = new Graphic(pPolygon,

MapManager.simpleFillSymbolInspection);

int UID=drawLayer.addGraphic(polygonGraphic);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值