在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" };