2.ArcGIS Runtime SDK for Android-使用渲染器在地图中添加图形覆盖物

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qingjianduoyun/article/details/79542570

首先按照1.ArcGIS Runtime SDK for Android-第一个地图应用做好准备,在其基础上进行下面的操作。

1-思路

以点为例(线和多边形思路相同),思路如下:
这里写图片描述

2-几个概念

  • 符号:符号定义图形或特征外观的所有非地理方面,包括颜色,大小,边框和透明度。符号不是在地图上表示的东西。相反,它控制着这些东西(图形或功能)的显示方式。
  • 图形:图形是内存中的功能,它提供了在地图上显示几何图形的基本方法。图形是独一无二的,因为它们可以使用渲染器为包含它们的叠加层或通过将符号直接应用于图形来符号化。
  • 渲染器:顾名思义,渲染器是决定图层中的特征或图形如何在显示器上呈现(绘制)的对象。渲染器然后使用符号绘制它们。
  • 使用渲染器可以实现:
    ①无论属性值如何,对图层中的所有要素(或叠加层中的所有图形)使用一个符号
    ②根据一个或多个属性值对图层中的要素(或叠加层中的图形)进行不同的标记

3-添加图形覆盖物的方法

首先在onCreate方法中添加如下代码,此处将添加图形覆盖物的方法提取出来:

//获取MapView对象
mMapView = findViewById(R.id.mapView);
//创建一个具有底图的底图,类型为TOPOGRAPHIC
ArcGISMap mMap = new ArcGISMap(Basemap.Type.TOPOGRAPHIC, 15.169193, 16.333479, 2);
//添加图形覆盖物
addGraphicsOverlay();
//设置在视图中显示地图
mMapView.setMap(mMap);

4添加点、线及多边形

完整代码如下,讲解看注释:

public class MainActivity extends AppCompatActivity {
    private MapView mMapView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取MapView对象
        mMapView = findViewById(R.id.mapView);
        //创建一个具有底图的底图,类型为TOPOGRAPHIC
        ArcGISMap mMap = new ArcGISMap(Basemap.Type.TOPOGRAPHIC, 15.169193, 16.333479, 2);
        //添加图形覆盖物
        addGraphicsOverlay();
        //设置在视图中显示地图
        mMapView.setMap(mMap);
    }

    private void addGraphicsOverlay() {
        //1、创建一个虚拟的点,,包含x,y坐标及空间参考
        Point poinGeometry = new Point(40e5, 40e5, SpatialReferences.getWebMercator());
        //2、将虚拟的点变为图形
        Graphic pointGraphic = new Graphic(poinGeometry);
        //3、创建一个表示点的符号-红色、菱形、大小为10
        SimpleMarkerSymbol pointSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.DIAMOND, Color.RED, 10);
        //4、创建简单的渲染器,并将线的符号添加到渲染器
        SimpleRenderer pointRenderer = new SimpleRenderer(pointSymbol);
        //5、为点创建图形覆盖物
        GraphicsOverlay pointGraphicsOverlay = new GraphicsOverlay();
        //6、将渲染器和图形添加到图形覆盖物中
        pointGraphicsOverlay.setRenderer(pointRenderer);
        pointGraphicsOverlay.getGraphics().add(pointGraphic);
        //7、添加图形覆盖物到MapView中
        mMapView.getGraphicsOverlays().add(pointGraphicsOverlay);

        //1、创建一条虚拟的线,包含两个点及空间参考
        PolylineBuilder lineGeometry = new PolylineBuilder(SpatialReferences.getWebMercator());
        lineGeometry.addPoint(-10e5,40e5);
        lineGeometry.addPoint(20e5,50e5);
        //2、将虚拟的线变为图形
        Graphic lineGraphic = new Graphic(lineGeometry.toGeometry());
        //3、创建一个表示改线的符号-实心、蓝线、宽度为5
        SimpleLineSymbol lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.BLUE, 5);
        //4、创建一个简单的渲染器,并将表示线的符号添加到渲染器
        SimpleRenderer lineRenderer = new SimpleRenderer(lineSymbol);
        //5、创建图形覆盖物
        GraphicsOverlay lineGraphicsOverlay = new GraphicsOverlay();
        //6、将渲染器和图像添加到覆盖物中
        lineGraphicsOverlay.setRenderer(lineRenderer);
        lineGraphicsOverlay.getGraphics().add(lineGraphic);
        //7、最终将创建的线图形覆盖物添加到地图视图中
        mMapView.getGraphicsOverlays().add(lineGraphicsOverlay);

        //1、创建一个虚拟的多边形
        PolygonBuilder polygonGeometry = new PolygonBuilder(SpatialReferences.getWebMercator());
        polygonGeometry.addPoint(-20e5, 20e5);
        polygonGeometry.addPoint(20e5, 20e5);
        polygonGeometry.addPoint(20e5, -20e5);
        polygonGeometry.addPoint(-20e5, -20e5);
        //2、将虚拟的多边形变为图形
        Graphic polygonGraphic = new Graphic(polygonGeometry.toGeometry());
        //3、创建一个表示多边形的符号,实心、黄色
        SimpleFillSymbol polygonSymbol = new SimpleFillSymbol(SimpleFillSymbol.Style.SOLID, Color.YELLOW, null);
        //4、创建一个渲染器,并将符号添加到渲染器
        SimpleRenderer polygonRenderer = new SimpleRenderer(polygonSymbol);
        //5、创建图形覆盖物,并将渲染器和图形添加到覆盖物当中
        GraphicsOverlay polygonGraphicOverlay = new GraphicsOverlay();
        polygonGraphicOverlay.setRenderer(polygonRenderer);
        polygonGraphicOverlay.getGraphics().add(polygonGraphic);
        //6、将图形覆盖物添加到地图视图中
        mMapView.getGraphicsOverlays().add(polygonGraphicOverlay);

    }

    @Override
    protected void onPause() {
        super.onPause();
        mMapView.pause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mMapView.resume();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mMapView.dispose();
    }
}

结果图如下所示:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qingjianduoyun/article/details/79542570