ArcGIS RunTime Sdk +WPF 基础地图显示
2017-12-21 14:43
1031 查看
1 简单的地图展示
ArcGISRunTime 的平面地图展示主要依赖MapView这个控件,MapView是地图的容器,Map主要是图层的集合(注:三维场景的显示主要依赖SceneView这个控件)
[csharp] view plain copy
<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)分别设置最小点的最大点的坐标即可[csharp] view plain copy
<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”的设置,使得地图数据在东西向平移时无缝环绕。[csharp] view plain copy
<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
[csharp] view plain copy
var normalizedPoint = GeometryEngine.NormalizeCentralMeridian(e.Location);
var projectedCenter = GeometryEngine.Project(normalizedPoint, SpatialReferences.Wgs84) as MapPoint;
当然如果你考虑最大范围覆盖全球或者投影支持Wgs84以及Web Mercator 你可以考虑添加经向环绕
5 以上的地图都是加载网上的地图,能不能加载本地的数据呢?
答案当然是可以的,ArcGIS RunTime支持从本地读取Shapefile Geodatabase那么最后能不能以服务的形式加载本地数据呢?这个也是可以的
不过官方会提示你仅供开发调试使用
[csharp] view plain copy
LocalMapService localMapService = new LocalMapService(@"\maps\xx.mpk");
await localMapService.StartAsync();
ArcGISDynamicMapServiceLayer arcGISDynamicMapServiceLayer = new ArcGISDynamicMapServiceLayer()
{
ID = "arcGISDynamicMapServiceLayer",
ServiceUri = localMapService.UrlMapService,
};
MyMapView.Map.Layers.Add(arcGISDynamicMapServiceLayer);
类比要素服务也可以在本地被创建这种以访问本地服务的方式访问本地数据与远程服务并没有太大差异
相关文章推荐
- ArcGIS RunTime Sdk +WPF 基础地图显示
- 使用ArcGIS Runtime WPF SDK (1)创建自己的地图应用程序
- ArcGIS Runtime SDK for iOS(二) ---使用定时器绘制由point组成的polyLine,并显示位置坐标
- 安卓智能地图开发与实施六:离线基础底图 - ArcGIS Runtime SDK for Android(Version 100.0.0)
- 项目迁移:从ArcGIS Runtime WPF SDK 10.2.x到100.x
- ArcGIS Runtime SDK for iOS 开发之地图范围(map extent)
- 【ARCGIS SDK】ArcGIS发布的地图服务不显示解决方案
- ArcGIS Runtime SDK for iOS 开发之加载地图
- 八、ArcGIS Runtime SDK for iOS 100.2.1教程系列之双地图联动
- ArcGIS Runtime SDK for iOS(一) – 实现地图的不同点的callout展示
- ArcGIS Runtime WPF SDK (4)绘制,编辑Graphic
- ArcGIS Runtime SDK for WPF已不更新,后续将被ArcGIS Runtime SDK for .NET取代
- ArcGIS Runtime SDK For Android 10.2.x版本之地图弹框Callout
- 安卓智能地图开发与实施五:在线基础底图 - ArcGIS Runtime SDK for Android(Version 100.0.0)
- 如何解决ArcGIS Runtime SDK for Android中文标注无法显示的问题
- ArcGIS Runtime SDK for iOS开发地图图层-切片地图服务图层
- ArcGIS Runtime SDK for iOS开发地图图层-图形图层
- ArcGIS Runtime SDK for iOS开发地图图层-影像地图服务图层
- 2.ArcGIS Runtime SDK for Android-使用渲染器在地图中添加图形覆盖物
- 四、ArcGIS Runtime SDK for iOS 100.2.1教程系列之图层控制显示隐藏