1. 程式人生 > >ArcGIS for Android 100.3.0(3):地圖和圖層(MapView和Layer)

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

其他的常用圖層下面再具體介紹。