ArcGIS Runtime SDK for Android 学习(11):通过SimpleRenderer进行符号渲染(下)

        在 Android 学习(10):通过SimpleRendererl进行符号渲染(上)中,主要对Renderer渲染器进行了简单介绍,并以点要素为例,讲解了使用SimpleRenderer对点进行渲染的方法,而本文主要是讲解除了点要素之外,使用SimpleRenderer对线要素和面要素进行渲染的方式。

实现步骤:

1.创建Android项目   

2.添加Runtime SDK依赖   

3.添加权限及OpenGL ES支持

前三步本文省略,初学者可参照ArcGIS Runtime SDK for Android 学习笔记(1):第一个地图应用程序(二维)

4.设置界面布局

在layout中的布局XML中添加:

    <!-- MapView控件 -->
    <com.esri.arcgisruntime.mapping.view.MapView
        android:id="@+id/mapView"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </com.esri.arcgisruntime.mapping.view.MapView>

5.编写代码:

思路:通过几何对象(Point、Polyline、Polygon....)创建Graphics(图形,本例是绘制的图形),通过Symbol(符号)创建Renderer(渲染器),然后将Graphics传递给GraphicsOverlay提供图形,将Renderer传递给GraphicsOverlay完成对图形的统一渲染。

步骤:

(1)在Activity的onCreate中:

        // 通过Layout获取MapView控件
        mMapView = (MapView) findViewById(R.id.mapView);
        //以地形图为底图创建地图对象
        ArcGISMap mMap = new ArcGISMap(Basemap.Type.TOPOGRAPHIC, 15.169193, 16.333479, 2);
        // 添加进行渲染后的GraphicsOverlay
        addGraphicsOverlay();
        // 设置地图在MapView控件中显示
        mMapView.setMap(mMap);

(2)实现渲染的方法:

private void addGraphicsOverlay(){
        // 点要素
        Point pointGeometry = new Point(40e5, 40e5, SpatialReferences.getWebMercator());
        // 设置简单符号,红色
        SimpleMarkerSymbol pointSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.DIAMOND, Color.RED, 10);
        // 新建graphic
        Graphic pointGraphic = new Graphic(pointGeometry);
        // 创建一个点集合图层 GraphicsOverlay
        GraphicsOverlay pointGraphicOverlay = new GraphicsOverlay();
        // 创建一个简单渲染器
        SimpleRenderer pointRenderer = new SimpleRenderer(pointSymbol);
        pointGraphicOverlay.setRenderer(pointRenderer);
        // 添加Graphic到GraphicsOverlay
        pointGraphicOverlay.getGraphics().add(pointGraphic);

        // 添加到 MapView 显示
        mMapView.getGraphicsOverlays().add(pointGraphicOverlay);

        // 线图形
        PolylineBuilder lineGeometry = new PolylineBuilder(SpatialReferences.getWebMercator());
        lineGeometry.addPoint(-10e5, 40e5);
        lineGeometry.addPoint(20e5, 50e5);
        // 蓝色实心线符号
        SimpleLineSymbol lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.BLUE, 5);
        // 创建多线图形对象
        Graphic lineGraphic = new Graphic(lineGeometry.toGeometry());
        // 为多线创建GraphicOverlay
        GraphicsOverlay lineGraphicOverlay = new GraphicsOverlay();
        // 创建simple renderer
        SimpleRenderer lineRenderer = new SimpleRenderer(lineSymbol);
        // 将renderer添加到GraphicOverlay
        lineGraphicOverlay.setRenderer(lineRenderer);
        // 将graphic添加到GraphicOverlay
        lineGraphicOverlay.getGraphics().add(lineGraphic);
        // 将GraphicsOverlay添加到MapView
        mMapView.getGraphicsOverlays().add(lineGraphicOverlay);

        //多边形图形
        PolygonBuilder polygonGeometry = new PolygonBuilder(SpatialReferences.getWebMercator());
        polygonGeometry.addPoint(-20e5, 20e5);
        polygonGeometry.addPoint(20e5, 20e5);
        polygonGeometry.addPoint(20e5, -20e5);
        polygonGeometry.addPoint(-20e5, -20e5);
        // 黄色实心多边形符号
        SimpleFillSymbol polygonSymbol = new SimpleFillSymbol(SimpleFillSymbol.Style.SOLID, Color.YELLOW, null);
        //为多边形创建Graphic
        Graphic polygonGraphic = new Graphic(polygonGeometry.toGeometry());
        //为多边形创建GraphicOverlay
        GraphicsOverlay polygonGraphicOverlay = new GraphicsOverlay();
        // 创建simple renderer
        SimpleRenderer polygonRenderer = new SimpleRenderer(polygonSymbol);
        // 将renderer添加到GraphicOverlay
        polygonGraphicOverlay.setRenderer(polygonRenderer);
        // 将graphic添加到GraphicOverlay
        polygonGraphicOverlay.getGraphics().add(polygonGraphic);
        // 将GraphicsOverlay添加到MapView
        mMapView.getGraphicsOverlays().add(polygonGraphicOverlay);

    }

6.运行APP:可以进行符号渲染结果的查看

猜你喜欢

转载自blog.csdn.net/Smart3S/article/details/81088112