1 簡單的地圖展示
ArcGISRunTime 的平面地圖展示主要依賴MapView這個控件,MapView是地圖的容器,Map主要是圖層的集合
(注:三維場景的顯示主要依賴SceneView這個控件)
- <esri:MapView x:Name="MyMapView" WrapAround="True">
- <esri:Map >
- <esri:ArcGISTiledMapServiceLayer
- ServiceUri="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" />
- </esri:Map>
- </esri:MapView>
簡單的地圖顯示就已經OK了,但是此時我想展示某個地方的地圖,也就是說我不想一上來就展示世界地圖,好,接着看下面
2 設置初始視角及范圍
(1)分別設置最小點的最大點的坐標即可
- <esri:MapView x:Name="MyMapView" WrapAround="True">
- <esri:Map >
- <esri:Map.InitialViewpoint>
- <esri:ViewpointExtent XMin="104.082686" YMin="30.695853" XMax="104.382686" YMax="30.718530" SpatialReferenceID="4326" />
- </esri:Map.InitialViewpoint>
- <esri:ArcGISTiledMapServiceLayer
- ServiceUri="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" />
- </esri:Map>
- </esri:MapView>
注:SpatialReferenceID="4326" 4326是WGS 84投影的代號
3我想要達到如圖這種自定義控件跟着我的地理坐標實時互動統一應該怎么做呢
正確姿勢:使用OverlayItemsControl ,然后利用MapView.ViewOverlayAnchor 指定UI控件(如Grid)在地圖上的定位錨點(地理位置)
4經向環繞
平面地圖都是從經度-180展開到180,如果你要同時瀏覽東西經180的數據就很不方便,因此在v1.8中新增加了經向環繞“Wrap Around”的設置,使得地圖數據在東西向平移時無縫環繞。
- <esri:MapView x:Name="mapStreets" WrapAround="True">
- <esri:Map>
- <esri:ArcGISTiledMapServiceLayer
- ServiceUri="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" />
- </esri:Map>
- </esri:MapView>
但是由於設置了經向環繞,所以從屏幕獲得的坐標要經過標准化normalize
Geometry Engine里提供了該方法normalizeCentralMeridian
- var normalizedPoint = GeometryEngine.NormalizeCentralMeridian(e.Location);
- var projectedCenter = GeometryEngine.Project(normalizedPoint, SpatialReferences.Wgs84) as MapPoint;
當然如果你考慮最大范圍覆蓋全球或者投影支持Wgs84以及Web Mercator 你可以考慮添加經向環繞
5 以上的地圖都是加載網上的地圖,能不能加載本地的數據呢?
答案當然是可以的,ArcGIS RunTime支持從本地讀取Shapefile Geodatabase
那么最后能不能以服務的形式加載本地數據呢?這個也是可以的
不過官方會提示你僅供開發調試使用
- LocalMapService localMapService = new LocalMapService(@"\maps\xx.mpk");
- await localMapService.StartAsync();
- ArcGISDynamicMapServiceLayer arcGISDynamicMapServiceLayer = new ArcGISDynamicMapServiceLayer()
- {
- ID = "arcGISDynamicMapServiceLayer",
- ServiceUri = localMapService.UrlMapService,
- };
- MyMapView.Map.Layers.Add(arcGISDynamicMapServiceLayer);
類比要素服務也可以在本地被創建這種以訪問本地服務的方式訪問本地數據與遠程服務並沒有太大差異