本文主要讲解通过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:可以进行唯一值符号渲染结果的查看