ArcGIS for Android 100.3.0(3):地图和图层(MapView和Layer)
ArcGIS Runtime 中的地图显示在Runtime100里,增加了3D地图显示的功能。为了满足大多数人的使用习惯,Esri依然采用MapView类作为2D地图的展示容器,新增了SceneView类作为3D地图的展示容器,然后这两个类共同继承于一个叫GeoView的基类。然后整个MapView的结构也进行了更改。不再是作为一个容器直接添加图层,而是分成了地图内容和绘制图层两部分进...
ArcGIS Runtime 中的地图显示
在Runtime100里,增加了3D地图显示的功能。为了满足大多数人的使用习惯,Esri依然采用MapView类作为2D地图的展示容器,新增了SceneView类作为3D地图的展示容器,然后这两个类共同继承于一个叫GeoView的基类。
然后整个MapView的结构也进行了更改。不再是作为一个容器直接添加图层,而是分成了地图内容和绘制图层两部分进行添加:
所以在Runtime100里,多出来一个额外的类——ArcGISMap。MapView类不再直接和Layer类关联,而是通过了ArcGISMap类关联,将图层数据的加载、删除、管理等操作全交给ArcGISMap类来完成。
ArcGISMap类里可以包含一个底图图层和多个业务图层,底图永远位于地图最下层,而业务图层的顺序则是通过ArcGISMap.getOperationalLayers的方法获取到一个包含当前加载图层的集合类LayerList,再通过这个类进行控制。另外整个地图的空间参考将由ArcGISMap类加载的第一个图层来定,也就是说这个空间参考不一定是根据底图来确定。
MapView通过MapView.setMap(ArcGISMap)来和ArcGISMap进行关联。
ArcGISMap map = new ArcGISMap(Basemap.createTerrainWithLabels());
map.setInitialViewpoint(new Viewpoint(new Point(-13176752, 4090404, SpatialReferences.getWebMercator()), 500000));
ServiceFeatureTable serviceFeatureTable = new ServiceFeatureTable(sample_service_url);
FeatureLayer featureLayer = new FeatureLayer(serviceFeatureTable);
map.getOperationalLayers().add(featureLayer);
mMapView.setMap(map);
MapView
在ArcGIS Runtime 的体系中,地图通过与一个MapView对象在手机平板的屏幕上来可视化地理数据。
地图(ArcGISMap)指定了地理内容(数据),地理内容可来自于各种各样的地图资源(Map sources)
比如:
Feature Table
Mobile Map Package(.mmpk文件)
地图视图( MapView )呈现地图的内容,控制用户浏览地图和与地图交互。
Rotation(旋转)
Panning(平移)
Zooming(缩放)
Viewpoint(当前视图)
Graphic overlays(要素绘制)
MapView是展示地图的容器,而地图的内容则是通过Layer来表达,每个Layer包含了一个图层的数据。
Layers
总结一下:
1.MapView作为屏幕展示容器,接收ArcGISMap。
2.ArcGISMap可由Web Map、MMPK文件直接填充也可由Basemap和OperationLayers组合填充。
3.绘制图层(GraphicsOverLay)依托于MapView展示。
4.基础底图(Basemap)可由在线的、离线的切片地图服务(ArcGISTiledLayer、ArcGISVectorTiledLayer)填充。
5.业务图层(OperationLayers)可由在线的要素服务(FeatureLayer)、离线的本地文件(MMPK、.geodatabase)填充。
常用图层
MapView是展示地图的容器,而地图的内容则是通过Layer来表达,每个Layer包含了一个图层的数据。Layer按数据类型可以分大约二十类,这里不再进行一一阐述,就常用的几种Layer说明下。
1.切片数据图层(ArcGISTiledLayer)
切片数据主要用来做为底图的展示,包含渲染后的地图和地图的空间参考信息,其离线数据的格式为TPK。
Runtime100新增了一个ArcGISTiledLayer类来展示切片数据,说是新增,其实是将之前的ArcGISLocalTiledLayer类和ArcGISTiledMapServiceLayer类合并成一个,也就是说这个类既可以加载离线TPK数据,也可以加载在线切片数据。
在线数据:
mMapView = (MapView) findViewById(R.id.mapview);
String url = "http://services.arcgisonline.com/arcgis/rest/services/World_Topo_Map/MapServer";
// create new Tiled Layer from service url
ArcGISTiledLayer arcGISTiledLayer = new ArcGISTiledLayer(url);
// set tiled layer as basemap
Basemap basemap = new Basemap(arcGISTiledLayer);
// create a map with the basemap
ArcGISMap arcGISMap = new ArcGISMap(basemap);
// set the map to be displayed in this view
mMapView.setMap(arcGISMap);
离线数据:
String url = Environment.getExternalStorageDirectory().getAbsolutePath() + "/ydt.tpk";
TileCache mainTileCache = new TileCache(url);
ArcGISTiledLayer arcGISTiledLayer = new ArcGISTiledLayer(mainTileCache);
Basemap basemap = new Basemap(arcGISTiledLayer);
ArcGISMap arcGISMap = new ArcGISMap(basemap);
mMapView.setMap(arcGISMap);
2.矢量切片数据图层(ArcGISVectorTiledLayer)
矢量切片数据是ArcGIS10.4里推出的一种新数据,它在传统的切片数据的基础上同时打包了矢量数据,因此除了展示外,也可以提供查询的功能。其离线打包数据格式为VTPK。
Runtime100里采用ArcGISVectorTiledLayer类来展示矢量切片数据,使用方法和ArcGISTiledLayer类相似。
在线数据:
String mid_century_url = "https://www.arcgis.com/home/item.html?id=7675d44bb1e4428aa2c30a9b68f97822";
mVectorTiledLayer = new ArcGISVectorTiledLayer(mid_century_url);
Basemap basemap = new Basemap(mVectorTiledLayer);
ArcGISMap map = new ArcGISMap(basemap);
Viewpoint vp = new Viewpoint(47.606726, -122.335564, 72223.819286);
map.setInitialViewpoint(vp);
mMapView.setMap(map);
离线数据:
String url = Environment.getExternalStorageDirectory().getAbsolutePath() + "/ydt.vtpk";
ArcGISVectorTiledLayer mainArcGISVectorTiledLayer = new ArcGISVectorTiledLayer(path);
Basemap mainBasemap = new Basemap(mainArcGISVectorTiledLayer);
ArcGISMap mainArcGISMap = new ArcGISMap(mainBasemap);
mMapView.setMap(mainArcGISMap);
其他的常用图层下面再具体介绍。
更多推荐
所有评论(0)