zoukankan      html  css  js  c++  java
  • 【转】ArcGIS API for Silverlight/WPF 2.1学习笔记(一)

    源自:http://blog.163.com/zwx_gis/blog/static/32434435201122193611576/ (主页:http://blog.163.com/zwx_gis/

    一、安装

    1Visual Studio:

    1Visual Studio 2010Visual Web Developer Express 2010

    2Silverlight 4 Tools for Visual Studio (add-on) :仅Silverlight 4支持

    3Expression Blend 4 SDK for Silverlight (also included with Expression Blend 4)

    Necessary for behavior and Silverlight support

    2Expression Blend:

    1Expression Blend 4Included with Expression Studio editions

    3、其它附加(非必须安装)

    1Deep Zoom Composer

    2Silverlight Toolkit

     

    二、开始

    1VS2010,新建“Silverlight应用程序”

    2、勾选“在新网站中承载Silverlight应用程序”(ASP.NET Web应用程序项目)

    3、添加引用:.NETESRI.ArcGIS.Client

    4xaml文件中:添加命名空间指向ArcGIS Silverlight/WPF;添加Map控件,并指定其MapServiceLayer

    <UserControl x:Class="SilverlightApplication.MainPage" xmlns="…" …

    xmlns:esri="http://schemas.esri.com/arcgis/client/2009">

           <Grid x:Name="LayoutRoot">

                  <esri:Map x:Name="MyMap" >

                         <esri:ArcGISTiledMapServiceLayer ID="StreetMapLayer"                             

    Url="http://hostName/ArcGIS/rest/services/mapservName/MapServer"/>

          </esri:Map>

           </Grid>

    </UserControl>

    注意:为了能跨域访问(MapServer在不同域),需要将clientaccesspolicy.xml crossdomain.xml文件拷贝到网站根目录(如IISC:inetpubwwwroot)。

     

    三、ArcGIS API for Microsoft Silverlight/WPF 2.1ODM

    1OMD(Object model diagrams对象模型图表)总览:参见附件一

    2OMD(Object model diagrams对象模型图表)详表:参见附件二

     

    四、地图和图层(Maps and Layers

    1、创建地图(map

    exent属性:地图的左下角和右上角坐标值,即地图的显示范围

    默认:所有地图图层的范围

    spatial reference(空间参考)属性:如果空间参考不一致,地图将不显示

    默认:采用第一个图层的空间参考值

    <esri:Map x:Name="MyMap">   

           <esri:Map.Extent>      

                  <esriGeometry:Envelope XMin="." YMin="." XMax="." YMax="." >        

                         <esriGeometry:Envelope.SpatialReference>           

                                <esriGeometry:SpatialReference WKID="26777"/>           

                         </esriGeometry:Envelope.SpatialReference>   

                  </esriGeometry:Envelope>   

           </esri:Map.Extent>

    </esri:Map>

    也可后台指定:

    ESRI.ArcGIS.Client.Geometry.Envelope initialExtent = new ESRI.ArcGIS.Client.Geometry.

    Envelope(ESRI.ArcGIS.Client.Bing.Transform.GeographicToWebMercator( new ESRI.

    ArcGIS.Client.Geometry.MapPoint(-130, 20)),ESRI.ArcGIS.Client.Bing.Transform.

    GeographicToWebMercator(new ESRI.ArcGIS.Client.Geometry.MapPoint(-65, 55)));

    initialExtent.SpatialReference = new ESRI.ArcGIS.Client.Geometry.SpatialReference(102100);

    MyMap.Extent = initialExtent;

    注:WKID-Well Know IDEPSG发布的代表特定椭球体、单位、地理坐标系或投影坐标系的ID,例如 "EPSG4326" 指的就是WGS 84地理坐标系,其中WKID=4326

     

    2、新增图层(layer

    第一加载图层的空间参考决定了整个地图的空间参考

    先加载的图层在地图下边,如下图:

    ArcGIS API for Silverlight/WPF 2.1学习笔记 - 清风明月 - 老钟的GIS小站

     

    Map Service Layers

    两种类型:

    tiled Service:瓦片,地图服务器上预先定义好的Image

    Dyanmic Service:动态,动态生成的Image

    Service host

    Map Service Layer Type

    描述

    ArcGIS Service

    ArcGISTiledMapServiceLayer

    地图服务器的缓存地图服务已经存在所有地图image瓦片

    ArcGISDynamicMapServiceLayer

    地图服务器的无缓存地图服务动态生成地图images,可动态访问矢量(vector)(栅格)raster数据

    ArcGISImageServiceLayer

    地图服务器的image服务动态生成地图images,可动态访问栅格数据

    Bing Maps

    TileLayer

     

     

    Feature layers

    包含features,如geometry(几何学)和attribute(属性)

     

    不支持多图层缓存

    ArcGISDynamicMapServiceLayer的背景颜色通常为透明

    opacity属性用于定义图层的透明度(0-1

     

    地图不显示的原因有:

    url不正确;

    Map Service不可用

    Map Service网站或主机没有跨域认证文件(clientaccesspolicy.xml crossdomain.xml

    Map Service要求tokencredentials

     

    3、导航地图(Navigation

    1mapZoomDuration属性和PanDuration 属性:用于指定缩放和平移动作的持续时间。

    <esri:Map ZoomDuration="00:00:00" PanDuration ="00:00:00” …>

    2mapSnapToLevels属性:用于指定level of detailLOD),地图在该级别是否显示。

    <esri:Map SnapToLevels=”ture” …>

    3mapZoomFactor属性:键盘+/-进行缩放时,缩放的级数

    4)系统已封装的键盘和鼠标导航地图快捷键:

    键盘

    鼠标

    结果

    上、下、左、右

     

    地图平移

     

    拖动

    地图平移

    +-

     

    地图缩放,缩放比例为mapZoomFactor属性指定的值

     

    双击

    地图放大,放大比例为mapZoomFactor属性指定的值

    Shift

    拉框

    拉框放大

    Shift+Ctrl

    拉框

    拉框缩小

     

    滚轮

    地图缩放

    5)系统已封装的导航地图的方式和接口:

    map的属性|方法

    描述

    Extent属性

    map.Extent=envelope

    Zoom()

    map.Zoom(n) n为缩放比率,n>1zoominn<1zoomout

    Zoomto()

    map.Zoomto(envelope)

    ZoomToResolution()

    map.ZoomToResolution(lod.Resolution);

    Resolution指每pixel包含的map unit数,如

    Lod lod=tiledMapServiceLayer.TileInfo.Lods[5];

    map.ZoomToResolution(lod.Resolution);

    Panto()

    Panto(point)point为地图窗口的中心点

     

    4Time-aware layers(此知识点不懂,有待继续研究)

    ArcGIS10开始支持Time-aware layers,存储了随时间变化的信息,可用于:

    1)飓风路径及其它气象学事件;

    2)人口和土地利用的历史变化;

    3)监测生产现状的变化;

    4)火灾或洪水的行进;

    5)疾病的蔓延。

     

    Time-aware layers的使用:

    1)使用Tookit里的TimeSlider控件

    2)使用API自己建立应用程序

     

    Time-aware layers的建立:

    ArcMap中,右键图层属性Time,勾选Enable time on this layer

    ArcGIS API for Silverlight/WPF 2.1学习笔记 - 清风明月 - 老钟的GIS小站
     

    地图发布后,可以使用time-aware mapfeature ServiceArcGISDynamicMapServiceLayer FeatureLayer classes)来随时间变化的查询和展示。

    对于Image Services,栅格地图必须提供Mosaic Dateset,如下图:

    ArcGIS API for Silverlight/WPF 2.1学习笔记 - 清风明月 - 老钟的GIS小站
     
     

    访问TimeExtent类:通过time-aware layersTimeExtent属性访问

    TimeExtent timeExtent = (MyMap.Layers["MyFeatureLayer"] as FeatureLayer)

    .TimeExtent;

    //TimeExtent timeExtent = new ESRI.ArcGIS.Client.TimeExtent();

    timeExtent.Start = DateTime.Parse("2002-01-01T17:33:46.0000000",

                            CultureInfo.CurrentCulture, DateTimeStyles.AdjustToUniversal);

     

    5Behaviorsactions

    BehaviorAPI位于Esri.ArcGIS.Client.Behaviors集(内藏在Expression Blend4中),用于定义用户与地图的交互。使用时必须添加System.Windows.Interactivity集。

    xaml文件中必须添加命名空间如下:

    xmlns:esriBehaviors="clr-namespace:ESRI.ArcGIS.Client.Behaviors;assembly=ESRI.ArcGIS.Client.Behaviors"    xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

     

    BehaviorAPI包括三个核心类:

    1Behavior:由trigger(地图上的事件)和action(产生结果)组成

    Behavior

    Description

    Code Example

    ConstrainExtentBehavior

    Limit the map extent to an envelope. The user cannot navigate outside of the envelope defined on the behavior.

    <esri:Map x:Name="MyMap" Extent="-120,30,-60,60">

     . . .

     <i:Interaction.Behaviors>

     <esriBehaviors:ConstrainExtentBehavior

     ConstrainedExtent="-120,30,-60,60"/>

     </i:Interaction.Behaviors>

    </esri:Map>

    MaintainExtentBehavior

    Maintain the current extent when the map is resized.

    <esri:Map x:Name="MyMap">

     . . .

     <i:Interaction.Behaviors>

     <esriBehaviors:MaintainExtentBehavior />

     </i:Interaction.Behaviors>

    </esri:Map>

    ShowCoordinatesBehavior

    Show map coordinates next to the mouse cursor when hovering over the map.

    <esri:Map x:Name="MyMap">

     . . .

     <i:Interaction.Behaviors>

     <esriBehaviors:ShowCoordinatesBehavior

     FormatString="{}{0:0.00} , {1:0.00}"/>

     </i:Interaction.Behaviors>

    </esri:Map>

    2Action:由trigger(地图上的事件)和目标结果

    Action

    Description

    Code Example

    ClearGraphicsAction

    Clears all graphics in a graphics layer.

    <Button>

     <i:Interaction.Triggers>

     <i:EventTrigger EventName="Click">

     <esriBehaviors:ClearGraphicsAction

     GraphicsLayerID="MyGraphicsLayer"

     TargetName="MyMap" />

     </i:EventTrigger>

     </i:Interaction.Triggers>

    </Button>

    MeasureAction

    Shows measure distance, radius, and area.

    <Button>

     <i:Interaction.Triggers>

     <i:EventTrigger EventName="Click">

     <esriBehaviors:MeasureAction

     AreaUnit="SquareMiles"

     DisplayTotals="True"

     DistanceUnit="Miles"

     MapUnits="DecimalDegrees"

     MeasureMode="Polygon"

     FillSymbol="{StaticResource DefaultFillSymbol}"

     TargetName="MyMap"/>

     </i:EventTrigger>

     </i:Interaction.Triggers>

    </Button>

    PanToAction

    Pans to a specified geometry.

    <Button>

     <i:Interaction.Triggers>

     <i:EventTrigger EventName="Click">

     <esriBehaviors:PanToAction

     TargetName="MyMap">

     <esriBehaviors:PanToAction.Geometry>

     <esriGeometry:MapPoint X="-120" Y="43" />

     </esriBehaviors:PanToAction.Geometry>

     </esriBehaviors:PanToAction>

     </i:EventTrigger>

     </i:Interaction.Triggers>

    </Button>

    RedlineAction

    Draw graphics on the map and add it to a graphics layer.

    <Button>

     <i:Interaction.Triggers>

     <i:EventTrigger EventName="Click">

     <esriBehaviors:RedlineAction

     Color="#FF32FF00"

     DrawMode="Freehand"

     GraphicsLayerID="MyGraphicsLayer"

     TargetName="MyMap"/>

     </i:EventTrigger>

     </i:Interaction.Triggers>

    </Button>

    SpatialQueryAction

    Draw geometry on the map to query features in a feature layer. Draw the results in a graphics layer.

    <Button>

     <i:Interaction.Triggers>

     <i:EventTrigger EventName="Click">

     <esriBehaviors:SpatialQueryAction

     DrawMode="Rectangle"

     LayerID="MyGraphicsLayer"

     Url="http://myserver/ArcGIS/rest/myservice/MapServer/2"

     Symbol="{StaticResource GraphicsLayerFillSymbol}"

     TargetName="MyMap" />

     </i:EventTrigger>

     </i:Interaction.Triggers>

    </Button>

    ToggleLayerAction

    Toggle the visibility of a layer.

    <Button>

     <i:Interaction.Triggers>

     <i:EventTrigger EventName="Click">

     <esriBehaviors:ToggleLayerAction

     LayerID="MyDynamicLayer"

     TargetName="MyMap"/>

     </i:EventTrigger>

     </i:Interaction.Triggers>

    </Button>

    UpdateFeatureLayerAcvtion

    Refresh the contents of a feature layer.

    <Button>

     <i:Interaction.Triggers>

     <i:EventTrigger EventName="Click">

     <esriBehaviors:UpdateFeatureLayerAction

     FeatureLayerID="MyFeatureLayer"

     TargetName="MyMap" />

     </i:EventTrigger>

     </i:Interaction.Triggers>

    </Button>

    ZoomToAction

    Zoom to a specified geometry. If the geometry is a point, the map will pan.

    <Button>

     <i:Interaction.Triggers>

     <i:EventTrigger EventName="Click">

     <esriBehaviors:ZoomToAction

     TargetName="MyMap">

     <esriBehaviors:ZoomToAction.Geometry>

     <esriGeometry:Envelope

     XMin="-110" YMin="40" XMax="-100" YMax="50" />

     </esriBehaviors:ZoomToAction.Geometry>

     </esriBehaviors:ZoomToAction>

     </i:EventTrigger>

     </i:Interaction.Triggers>

    </Button>

    ZoomToFullExtentAction

    Zoom to the full extent of all layers.

    <Button>

     <i:Interaction.Triggers>

     <i:EventTrigger EventName="Click">

     <esriBehaviors:ZoomToFullExtentAction

     TargetName="MyMap"/>

     </i:EventTrigger>

     </i:Interaction.Triggers>

    </Button>

    ZoomToLayerAction

    Zoom the extent of a specified layer.

    <Button>

     <i:Interaction.Triggers>

     <i:EventTrigger EventName="Click">

     <esriBehaviors:ZoomToLayerAction

     LayerID="MyTileLayer"

     TargetName="MyMap"/>

     </i:EventTrigger>

     </i:Interaction.Triggers>

    </Button>

     

    3Trigger(略)

  • 相关阅读:
    UOS、鸿蒙、麒麟全面出击,国产系统能否干掉Windows?
    黑客给疫情添乱
    人工智能与信息安全
    作为一个程序员,告诉你一些编码知识
    Linus Torvalds 宣布新版Linux系统内核发布
    linux系统root密码忘记了怎么办
    DevOps与NoOps现状分析
    Nginx服务详细介绍
    博客园“可运行"代码
    让setTimeout支持链式
  • 原文地址:https://www.cnblogs.com/changbaishan/p/3305958.html
Copyright © 2011-2022 走看看