ArcGIS RunTime Sdk +WPF 基础地图显示
来源:互联网 发布:学校管理网络图示 编辑:程序博客网 时间:2024/06/10 03:03
ArcGIS 作为专业级必备,一直应用广泛。接下来从头开始说明如何在WPF中整合ArcGIS RunTime进行地图展示。
特意说明:在进行ArcGIS RunTime的开发时,一定要对官方的例子仔细揣摩,你所需要的东西在里面都能找到。
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);
类比要素服务也可以在本地被创建这种以访问本地服务的方式访问本地数据与远程服务并没有太大差异
- ArcGIS RunTime Sdk +WPF 基础地图显示
- 使用ArcGIS Runtime WPF SDK (1)创建自己的地图应用程序
- ArcGIS Runtime SDK for WPF 10.2.5下载
- ArcGIS Runtime WPF SDK (2)命名空间解析
- ArcGIS Runtime WPF SDK (3) 小试身手
- ArcGIS Runtime WPF SDK (4)绘制,编辑Graphic
- ArcGIS Runtime SDK for iOS 开发之加载地图
- ArcGIS Runtime SDK for iOS开发之创建离线地图
- 【ARCGIS SDK】ArcGIS发布的地图服务不显示解决方案
- ArcGIS Runtime SDK for iOS开发之地图图层-动态地图服务层
- ArcGIS Runtime SDK for iOS开发地图图层-切片地图服务图层
- ArcGIS Runtime SDK for iOS开发地图图层-影像地图服务图层
- ArcGIS Runtime SDK for iOS 开发之地图范围(map extent)
- ArcGIS Runtime SDK for iOS开发地图图层-图形图层
- ArcGIS Runtime SDK for iOS移动开发地图图层-草图层
- ArcGIS Runtime SDK for iOS(一) – 实现地图的不同点的callout展示
- ArcGIS Runtime SDK For Android 10.2.x版本之地图弹框Callout
- WPF ArcGis仿高德地图拖拽画圆
- Android判断APP是否第一次启动
- 双边滤波器
- python logging模块 自定义输出
- 多个tomcat之间的session复制
- 在leangoo 里怎么设置工作量估算,添加附件,设置截止时间?
- ArcGIS RunTime Sdk +WPF 基础地图显示
- 8位有符号的取值范围是-128~+127
- 脚本执行SQL语句的小方法。
- UI_UIStackView
- sizeof(float)是()类型表达式??
- hdu 1272 小希的迷宫
- Android 之SparseArray<E>详解
- 我与即时通讯 - 重构之路
- java HttpURLConnection 中用 userid转openid