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

      Renderer是一个接口类型,该接口主要用于Graphic对象的样式渲染,能够对对图层、GraphicOverlay进行统一渲染。常见的类别有:ClassBreaksRenderer、DictionaryRenderer、HeatmapRenderer、 SimpleRenderer、UniqueValueRenderer、 UnsupportedRenderer等 。

      

        本文主要讲解以点要素为例,使用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.编写代码:

扫描二维码关注公众号,回复: 2200957 查看本文章

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

步骤:

  在Activity的onCreate中:

        //创建多个点形成图形添加在地图上,以便于渲染器能够装饰它
        //这些点存在于WGS84坐标系中
        Point oldFaithfullPoint = new Point(-110.828140, 44.460458, SpatialReferences.getWgs84());
        Point cascadeGeyserPoint = new Point(-110.829004, 44.462438, SpatialReferences.getWgs84());
        Point plumeGeyserPoint = new Point(-110.829381, 44.462735, SpatialReferences.getWgs84());

        //使用最远的点创建一个外接矩形用来确定地图的可见区域
        Envelope initialEnvelope = new Envelope(oldFaithfullPoint, plumeGeyserPoint);

        // 从layout中获取MapView控件
        mMapView = (MapView) findViewById(R.id.mapView);
        //创建一个具有影像底图的地图,这将使地图具有一个墨卡托投影的空间参考
        ArcGISMap map = new ArcGISMap(Basemap.createImageryWithLabels());
        // 设置地图在MapView中被显示
        mMapView.setMap(map);
        ///在地图视图上设置初始的外接矩形并加上一些填充,从而使所有的点都是可见的
        //这个外接矩形使用上面的WGS84点,但是被Mapview重新投影到地图的空间参考中,因此它能够很好地使用
        mMapView.setViewpointGeometryAsync(initialEnvelope, 100);

        //创建一个新的GraphicsOverlay然后把它添加到MapView上
        GraphicsOverlay graphicOverlay = new GraphicsOverlay();
        mMapView.getGraphicsOverlays().add(graphicOverlay);

        //在simple renderer中创建一个simple symbol用于渲染
        SimpleMarkerSymbol symbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CROSS, Color.RED, 12); //size 12, style of cross
        SimpleRenderer renderer = new SimpleRenderer(symbol);

        //将渲染器应用到GraphicsOverlay(因此所有图形都将使用来自渲染器的相同符号)
        graphicOverlay.setRenderer(renderer);

        //从geyser位置的点上创建图形。注意:不需要在图形上设置符号,因为渲染器会处理它
        //这些点在WGS84坐标系中,但是图形会被自动重新投影,所以它们可以在具有web mercator空间参考的地图中很好地使用
        Graphic oldFaithfullGraphic = new Graphic(oldFaithfullPoint);
        Graphic cascadeGeyserGraphic = new Graphic(cascadeGeyserPoint);
        Graphic plumeGeyserGraphic = new Graphic(plumeGeyserPoint);
        graphicOverlay.getGraphics().add(oldFaithfullGraphic);
        graphicOverlay.getGraphics().add(cascadeGeyserGraphic);
        graphicOverlay.getGraphics().add(plumeGeyserGraphic);

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

猜你喜欢

转载自blog.csdn.net/smart3s/article/details/81086121