在Runtime裏面,Esri.ArcGISRuntime.只有兩個東西,MapView和SceneView.
一般的,MapView類作爲2D地圖的展示容器,SceneView類作爲3D地圖的展示容器,這兩個類繼承於同一個類叫GeoView的基類。
MapVIew的結構如下圖,分成了地圖內容和繪製圖層兩個部分:
所以基礎圖層和業務圖層需要先加到Map類裏面,然後再加到MapView上面去。而Map又分爲各種Layer.
常見的如下
- 切片數據圖層(ArcGISTiledLayer)
- 矢量切片數據(ArcGISVectorTiledLayer)
- 要素圖層(FeatureLayer)
- 動態地圖圖層(ArcGISMapImageLayer和ArcGISMapImageSublayer)
- 移動地圖數據包含的圖層
加載.tpk格式影像,
TileCache _tileCache = new TileCache(myMpkFilePath);//文件的地址,
await _tileCache.LoadAsync();
mapView.Map.OperationalLayers.Add(new ArcGISTiledLayer(_tileCache));
加載shp格式文件
ShapefileFeatureTable myShapefile = await ShapefileFeatureTable.OpenAsync(shpPath);
FeatureLayer newFeatureLayer = new FeatureLayer(myShapefile);
mapView.Map.OperationalLayers.Add(newFeatureLayer);
加載kml格式文件
KmlLayer kmlLayer = new KmlLayer(new Uri(kmlPath));
mapView.Map.OperationalLayers.Add(kmlLayer);
加載離線地圖包mmpk
MobileMapPackage myMapPackage = await MobileMapPackage.OpenAsync(fullpath);
if (myMapPackage.Maps.Count > 0)
{
mapView.Map = myMapPackage.Maps.First();
}
加載ArcGIS在線地圖
Map myMap = new Map();
Uri serviceUri = new Uri( fullpath);
ArcGISMapImageLayer imageLayer = new ArcGISMapImageLayer(serviceUri);
myMap.Basemap.BaseLayers.Add(imageLayer);
mapView.Map = myMap;
加載Google地圖
string _googlelateUri = "http://{subDomain}.google.cn/vt/lyrs=s&z={level}&x={col}&y={row}";
List<string> _googleLayerSubdomains = new List<string> { "mt2", "mt3", "mt0", "mt1" };
WebTiledLayer myMapBaseLayer = new WebTiledLayer(_googlelateUri, _googleLayerSubdomains);
myMapBaseLayer.Name = "谷歌影像";
await myMapBaseLayer.LoadAsync();
myMapBaseLayer.Attribution = "fire in the hole";
Basemap layerBasemap = new Basemap(myMapBaseLayer);
Map myMap = new Map(layerBasemap);
mapView.Map = myMap;
加載高德或者百度地圖的在線地圖也可以,但是有偏移。
string _googlelateUri = "https://ss{subDomain}.bdstatic.com/8bo_dTSlR1gBo1vgoIiO_jowehsv/starpic/?qt=satepc&u=x={col};y={row};z={level};v=009;type=sate&fm=46&app=webearth2&v=009&udt=20190312";
List<string> _googleLayerSubdomains = new List<string> { "0", "1", "2", "3" };
string _googlelateUri = "http://webst0{subDomain}.is.autonavi.com/appmaptile?style=6&x={col}&y={row}&z={level}";
List<string> _googleLayerSubdomains = new List<string> { "1", "2", "3", "4" };
加載天地圖也可以的
只不過天地圖需要加Key,這個需要去官網申請、下面的代碼是虛擬的沒用,
string _TDTlelateUri = "http://t{subDomain}.tianditu.com/DataServer?T=cia_w&x={col}&y={row}&l={level}&tk=41e32d9cb4730dbe7322eb1dba1181be";
List<string> _TDTLayerSubdomains = new List<string> { "0", "1", "2", "3", "4", "5", "6", "7" };