在 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:可以进行符号渲染结果的查看