zoukankan      html  css  js  c++  java
  • ArcGIS RunTime Sdk +WPF 基础地图显示

    1 简单的地图展示

    ArcGISRunTime 的平面地图展示主要依赖MapView这个控件,MapView是地图的容器,Map主要是图层的集合

    (注:三维场景的显示主要依赖SceneView这个控件)

    [csharp] view plain copy
     
    1. <esri:MapView x:Name="MyMapView" WrapAround="True">  
    2.             <esri:Map >  
    3.                 <esri:ArcGISTiledMapServiceLayer  
    4.                     ServiceUri="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" />  
    5.             </esri:Map>  
    6.         </esri:MapView>  

    简单的地图显示就已经OK了,但是此时我想展示某个地方的地图,也就是说我不想一上来就展示世界地图,好,接着看下面

    2 设置初始视角及范围

    (1)分别设置最小点的最大点的坐标即可

    [csharp] view plain copy
     
    1. <esri:MapView x:Name="MyMapView" WrapAround="True">  
    2.           <esri:Map >  
    3.               <esri:Map.InitialViewpoint>  
    4.                   <esri:ViewpointExtent XMin="104.082686" YMin="30.695853" XMax="104.382686" YMax="30.718530" SpatialReferenceID="4326" />  
    5.               </esri:Map.InitialViewpoint>  
    6.               <esri:ArcGISTiledMapServiceLayer  
    7.                   ServiceUri="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" />  
    8.           </esri:Map>  
    9.       </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
     
    1. <esri:MapView x:Name="mapStreets" WrapAround="True">  
    2.           <esri:Map>  
    3.               <esri:ArcGISTiledMapServiceLayer  
    4.                   ServiceUri="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" />  
    5.           </esri:Map>  
    6.       </esri:MapView>  

    但是由于设置了经向环绕,所以从屏幕获得的坐标要经过标准化normalize

    Geometry Engine里提供了该方法normalizeCentralMeridian

    [csharp] view plain copy
     
    1. var normalizedPoint = GeometryEngine.NormalizeCentralMeridian(e.Location);  
    2.             var projectedCenter = GeometryEngine.Project(normalizedPoint, SpatialReferences.Wgs84) as MapPoint;  

    当然如果你考虑最大范围覆盖全球或者投影支持Wgs84以及Web Mercator 你可以考虑添加经向环绕

    5 以上的地图都是加载网上的地图,能不能加载本地的数据呢?

    答案当然是可以的,ArcGIS RunTime支持从本地读取Shapefile  Geodatabase

    那么最后能不能以服务的形式加载本地数据呢?这个也是可以的

    不过官方会提示你仅供开发调试使用

    [csharp] view plain copy
     
    1. LocalMapService localMapService = new LocalMapService(@"mapsxx.mpk");  
    2.                await localMapService.StartAsync();  
    3.   
    4.                ArcGISDynamicMapServiceLayer arcGISDynamicMapServiceLayer = new ArcGISDynamicMapServiceLayer()   
    5.                {  
    6.                    ID = "arcGISDynamicMapServiceLayer",  
    7.                    ServiceUri = localMapService.UrlMapService,  
    8.                };  
    9.   
    10.             MyMapView.Map.Layers.Add(arcGISDynamicMapServiceLayer);  

    类比要素服务也可以在本地被创建这种以访问本地服务的方式访问本地数据与远程服务并没有太大差异  



  • 相关阅读:
    JD . 圆角矩形、权重层级、浮动撑开盒子及元素的默认间距、清除浮动、隐藏盒子、盒子的撑开与撑破、子盒子垂直居中|不占位置
    mac开发环境配置
    CSS常见兼容性问题总结
    初识Javascript.03 -- switch、自增、while循环、for、break、continue、数组、遍历数组、合并数组concat
    初识 Javascript.02 -- Date日期、Math对象、数据类型转换、字符串、布尔Boolean、逻辑运算符、if else 、三元表达式、代码调试方法、
    初识 Javascript.01 -- Javascript基础|输出方式、变量、变量命名规范、数据类型、
    CSS -- 练习之制作简单商品图
    CSS -- 练习(待续优化)
    javascript中作用域
    javascript中构造函数的三种方式
  • 原文地址:https://www.cnblogs.com/wlming/p/8080516.html
Copyright © 2011-2022 走看看