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);
其他的常用圖層下面再具體介紹。