ArcGIS Runtime SDK for Android 学习(12):通过UniqueValueRenderer进行唯一值符号渲染

        本文主要讲解通过UniqueValueRenderer进行唯一值符号渲染。

实现步骤:

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.编写代码:

思路:

         (1)获取FeatureLayer:根据URL获取ServiceFeatureTable,通过ServiceFeatureTable获取FeatureLayer。

         (2)创建唯一值渲染器,并设置用于渲染的字段。

         (3)创建用于唯一值渲染的多个Symbol。

         (4)设置唯一值渲染器的默认Symbol。

         (5)设置每个唯一值的Symbol。

         (6)将渲染器添加到要素图层FeatureLayer。

         (7)将要素图层FeatureLayer添加到地图ArcGISMap。

           (8)   设置地图在MapView中显示。

步骤:在Activity的onCreate中:

        // 从layout中获取MapView
        mMapView = (MapView) findViewById(R.id.mapView);
        // 创建一个以地形图为底图的地图对象
        ArcGISMap map = new ArcGISMap(Basemap.createTopographic());
        // 创建ServiceFeatureTable
        ServiceFeatureTable serviceFeatureTable = new ServiceFeatureTable("https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3");

        // 使用service feature table创建 feature layer
        FeatureLayer featureLayer = new FeatureLayer(serviceFeatureTable);

        // 通过一个新的唯一值渲染器对feature layer(要素图层)的(默认)渲染器进行覆盖
        UniqueValueRenderer uniqueValueRenderer = new UniqueValueRenderer();
        // 设置用于唯一值渲染的字段
        uniqueValueRenderer.getFieldNames().add("STATE_ABBR"); //你可以以list的形式添加多个字段,在本例中,我们只添加一个字段
        // 设置用于渲染的Symbol(符号)
        SimpleFillSymbol defaultFillSymbol = new SimpleFillSymbol(SimpleFillSymbol.Style.SOLID, Color.WHITE, new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.GRAY, 2));
        SimpleFillSymbol californiaFillSymbol = new SimpleFillSymbol(SimpleFillSymbol.Style.SOLID, Color.RED, new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.RED, 2));
        SimpleFillSymbol arizonaFillSymbol = new SimpleFillSymbol(SimpleFillSymbol.Style.SOLID, Color.GREEN, new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.GREEN, 2));
        SimpleFillSymbol nevadaFillSymbol = new SimpleFillSymbol(SimpleFillSymbol.Style.SOLID,Color.BLUE, new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.BLUE, 2));

        // 设置默认Symbol(符号)
        uniqueValueRenderer.setDefaultSymbol(defaultFillSymbol);
        uniqueValueRenderer.setDefaultLabel("Other");

        // 设置california的值
        List<Object> californiaValue = new ArrayList<>();
        // 你可以添加与在唯一值渲染器上设置的字段相关联的值。
        // 如果有多个值,他们应当根据与字段相同的顺序进行设置
        californiaValue.add("CA");
        uniqueValueRenderer.getUniqueValues().add(new UniqueValueRenderer.UniqueValue("California", "State of California", californiaFillSymbol, californiaValue));
        // 设置arizona的值
        List<Object> arizonaValue = new ArrayList<>();
        // 你可以添加与在唯一值渲染器上设置的字段相关联的值。
        // 如果有多个值,他们应当根据与字段相同的顺序进行设置
        arizonaValue.add("AZ");
        uniqueValueRenderer.getUniqueValues().add(new UniqueValueRenderer.UniqueValue("Arizona", "State of Arizona", arizonaFillSymbol, arizonaValue));

        // 设置nevada的值
        List<Object> nevadaValue = new ArrayList<>();
        // You add values associated with fields set on the unique value renderer.
        // 你可以添加与在唯一值渲染器上设置的字段相关联的值。
        // 如果有多个值,他们应当根据与字段相同的顺序进行设置
        nevadaValue.add("NV");
        uniqueValueRenderer.getUniqueValues().add(new UniqueValueRenderer.UniqueValue("Nevada", "State of Nevada", nevadaFillSymbol, nevadaValue));

        // 设置feature layer(要素图层)的renderer(渲染器)
        featureLayer.setRenderer(uniqueValueRenderer);
        // 将图层添加到地图
        map.getOperationalLayers().add(featureLayer);
        map.setInitialViewpoint(new Viewpoint(new Envelope(-13893029.0, 3573174.0, -12038972.0, 5309823.0, SpatialReferences.getWebMercator())));
        // 设置地图在MapView中被显示
        mMapView.setMap(map);

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

猜你喜欢

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