地图标绘(点线面)

/**
 * 绘制点线面:点击“添加额外服务”后,地图放大缩小拖拽等功能失效
 */
add_gService = (Button) findViewById(R.id.add_gservice);
add_gService.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        gLayer = new GraphicsLayer();
        map.addLayer(gLayer);
        map.setOnTouchListener(new View.OnTouchListener() {
            Point previous = null;
            Polygon polygon = null;

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                float x = event.getX();
                float y = event.getY();
                Point currPoint = map.toMapPoint(x, y);

                if (isChoose == true) {
                    previous = null;
                    polygon = null;
                }
                if (type == Geometry.Type.POINT) {
                    Graphic graphic = new Graphic(currPoint, symbol);
                    gLayer.addGraphic(graphic);
                } else {
                    if (previous == null) {
                        previous = currPoint;
                        Graphic graphic = new Graphic(previous, new SimpleMarkerSymbol(Color.RED, 7,
                                SimpleMarkerSymbol.STYLE.CIRCLE));
                        gLayer.addGraphic(graphic);

                    } else {
                        Graphic graphic = new Graphic(currPoint, new SimpleMarkerSymbol(Color.RED, 7,
                                SimpleMarkerSymbol.STYLE.CIRCLE));
                        gLayer.addGraphic(graphic);
                        Line line = new Line();
                        line.setStart(previous);
                        line.setEnd(currPoint);
                        if (type == Geometry.Type.POLYLINE) {
                            Polyline polyline = new Polyline();
                            polyline.addSegment(line, true);
                            Graphic graphic1 = new Graphic(polyline, symbol);
                            gLayer.addGraphic(graphic1);
                        } else if (type == Geometry.Type.POLYGON) {
                            if (polygon == null) {
                                polygon = new Polygon();
                            }
                            polygon.addSegment(line, false);
                            Graphic graphic1 = new Graphic(polygon, fillSymbol);
                            gLayer.addGraphic(graphic1);
                        }
                    }
                }
                isChoose = false;
                previous = currPoint;
                return false;
            }
        });
    }

});

/**
 * 动态加载菜单:不占用地图显示空间
 */
@Override
public boolean onCreateOptionsMenu(Menu menu) {

    SubMenu pointSubMenu = menu.addSubMenu("点");
    pointSubMenu.setHeaderTitle("绘制点");
    pointSubMenu.add(0, 0, 0, "红点");
    pointSubMenu.add(0, 1, 0, "绿点");
    pointSubMenu.add(0, 2, 0, "蓝点");

    SubMenu lineSubMenu = menu.addSubMenu("线");
    lineSubMenu.setHeaderTitle("绘制线");
    lineSubMenu.add(1, 0, 0, "红线");
    lineSubMenu.add(1, 1, 0, "绿虚线");
    lineSubMenu.add(1, 2, 0, "蓝线");

    SubMenu polygonSubMenu = menu.addSubMenu("面");
    polygonSubMenu.setHeaderTitle("绘制面");
    polygonSubMenu.add(2, 0, 0, "红面");
    polygonSubMenu.add(2, 1, 0, "绿面半透明");
    polygonSubMenu.add(2, 2, 0, "蓝面");

    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem mi) {
    isChoose = true;
    switch (mi.getGroupId()) {
        case 0:
            type = Geometry.Type.POINT;
            switch (mi.getItemId()) {
                case 0:
                    symbol = new SimpleMarkerSymbol(Color.RED, 7, SimpleMarkerSymbol.STYLE.CIRCLE);
                    break;
                case 1:
                    symbol = new SimpleMarkerSymbol(Color.GREEN, 7, SimpleMarkerSymbol.STYLE.CIRCLE);
                    break;
                case 2:
                    symbol = new SimpleMarkerSymbol(Color.BLUE, 7, SimpleMarkerSymbol.STYLE.CIRCLE);
                    break;
                default:
                    break;
            }
            break;
        case 1:
            type = Geometry.Type.POLYLINE;
            switch (mi.getItemId()) {
                case 0:
                    symbol = new SimpleLineSymbol(Color.RED, 5, SimpleLineSymbol.STYLE.SOLID);
                    break;
                case 1:
                    symbol = new SimpleLineSymbol(Color.GREEN, 5, SimpleLineSymbol.STYLE.DASH);
                    break;
                case 2:
                    symbol = new SimpleLineSymbol(Color.BLUE, 5, SimpleLineSymbol.STYLE.SOLID);
                    break;
                default:
                    break;
            }
            break;
        case 2:
            type = Geometry.Type.POLYGON;
            switch (mi.getItemId()) {
                case 0:
                    fillSymbol = new SimpleFillSymbol(Color.RED, SimpleFillSymbol.STYLE.SOLID);

                    break;
                case 1:
                    fillSymbol = new SimpleFillSymbol(Color.GREEN);
                    fillSymbol.setAlpha(50);

                    break;
                case 2:
                    fillSymbol = new SimpleFillSymbol(Color.BLUE, SimpleFillSymbol.STYLE.SOLID);
                    break;
                default:
                    break;
            }
            break;
        default:
            break;
    }
    return false;
}


转载自:https://blog.csdn.net/u011967995/article/details/52777599

You may also like...