ArcGIS for Android 100.3.0(3):地图和图层(MapView和Layer)

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);

其他的常用图层下面再具体介绍。

猜你喜欢

转载自blog.csdn.net/qq_36699930/article/details/82386780