【转】ArcGIS API for Silverlight/WPF 2.1学习笔记(一)
源自:http://blog.163.com/zwx_gis/blog/static/32434435201122193611576/ (主页:http://blog.163.com/zwx_gis/)
一、安装
1、Visual Studio:
(1)Visual Studio 2010或Visual Web Developer Express 2010
(2)Silverlight 4 Tools for Visual Studio (add-on) :仅Silverlight 4支持
(3)Expression Blend 4 SDK for Silverlight (also included with Expression Blend 4)
(Necessary for behavior and Silverlight support)
2、Expression Blend:
(1)Expression Blend 4:Included with Expression Studio editions
3、其它附加(非必须安装)
(1)Deep Zoom Composer
(2)Silverlight Toolkit
二、开始
1、VS2010,新建“Silverlight应用程序”
2、勾选“在新网站中承载Silverlight应用程序”(ASP.NET Web应用程序项目)
3、添加引用:.NET\ESRI.ArcGIS.Client
4、xaml文件中:添加命名空间指向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文件拷贝到网站根目录(如IIS的C:\inetpub\wwwroot\)。
三、ArcGIS API for Microsoft Silverlight/WPF 2.1的ODM:
1、OMD(Object model diagrams对象模型图表)总览:参见附件一
2、OMD(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 ID:EPSG发布的代表特定椭球体、单位、地理坐标系或投影坐标系的ID,例如 "EPSG:4326" 指的就是WGS 84地理坐标系,其中WKID=4326
2、新增图层(layer)
第一加载图层的空间参考决定了整个地图的空间参考
先加载的图层在地图下边,如下图:

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要求token或credentials
3、导航地图(Navigation)
(1)map的ZoomDuration属性和PanDuration 属性:用于指定缩放和平移动作的持续时间。
如<esri:Map ZoomDuration="00:00:00" PanDuration ="00:00:00” …>
(2)map的SnapToLevels属性:用于指定level of detail(LOD),地图在该级别是否显示。
如<esri:Map SnapToLevels=”ture” …>
(3)map的ZoomFactor属性:键盘+/-进行缩放时,缩放的级数
(4)系统已封装的键盘和鼠标导航地图快捷键:
|
键盘 |
鼠标 |
结果 |
|
上、下、左、右 |
地图平移 |
|
|
拖动 |
地图平移 |
|
|
+、- |
地图缩放,缩放比例为map的ZoomFactor属性指定的值 |
|
|
双击 |
地图放大,放大比例为map的ZoomFactor属性指定的值 |
|
|
Shift |
拉框 |
拉框放大 |
|
Shift+Ctrl |
拉框 |
拉框缩小 |
|
滚轮 |
地图缩放 |
(5)系统已封装的导航地图的方式和接口:
|
map的属性|方法 |
描述 |
|
Extent属性 |
map.Extent=envelope |
|
Zoom() |
map.Zoom(n) ,n为缩放比率,n>1为zoomin,n<1为zoomout |
|
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为地图窗口的中心点 |
、Time-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

地图发布后,可以使用time-aware map或feature Service(ArcGISDynamicMapServiceLayer 或FeatureLayer classes)来随时间变化的查询和展示。
对于Image Services,栅格地图必须提供Mosaic Dateset,如下图:

访问TimeExtent类:通过time-aware layers的TimeExtent属性访问
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);
5、Behaviors和actions
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包括三个核心类:
(1)Behavior:由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> |
(2)Action:由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> |
(3)Trigger(略)
【转】ArcGIS API for Silverlight/WPF 2.1学习笔记(一)的更多相关文章
- ArcGIS API for Silverlight/WPF 2.1学习笔记(一)——精简版
一.安装 1.Visual Studio: (1)Visual Studio 2010或Visual Web Developer Express 2010 (2)Silverlight 4 Tools ...
- 【转】ArcGIS API for Silverlight/WPF 2.1学习笔记(四)
七.Editing ArcGIS Server 10提供了: 通过feature service,在Web上编辑Feature layers的geographic data的功能. 通过geome ...
- 【转】ArcGIS API for Silverlight/WPF 2.1学习笔记(二)
五.Graphics layer 1.新增Graphics layer Graphics layer用于显示用户自定义绘制的点.线.面图形.使用时确保xaml文件中Graphics layer定义 ...
- 【转】ArcGIS API for Silverlight/WPF 2.1学习笔记(五)
2.Find示例代码 (1)xaml文件: //添加Symbol命名空间 xmlns:esriSymbols="clr-namespace:ESRI.ArcGIS.Client.Symbol ...
- 【转】ArcGIS API for Silverlight/WPF 2.1学习笔记(三)
六.Feature Layer Feature Layer是一种特殊的Graphics layer(继承自Graphics layer),除了像Graphics layer一样包含和显示Graphic ...
- 扩展ArcGIS API for Silverlight/WPF 中的TextSymbol支持角度标注
原文 http://blog.csdn.net/esricd/article/details/7587136 在ArcGIS API for Silverlight/WPF中原版的TextSymbol ...
- ArcGIS API for Silverlight学习笔记
ArcGIS API for Silverlight学习笔记(一):为什么要用Silverlight API(转) 你用上3G手机了吗?你可能会说,我就是喜欢用nokia1100,ABCDEFG跟我都 ...
- ArcGIS API for Silverlight开发入门
你用上3G手机了吗?你可能会说,我就是喜欢用nokia1100,ABCDEFG跟我 都没关系.但你不能否认3G是一种趋势,最终我们每个人都会被包裹在3G网络中.1100也不是一成不变,没准哪天为了打击 ...
- ArcGIS API For Silverlight使用在线地图的多种方法总结
引自:http://www.cnblogs.com/meimao5211/p/3283969.html ArcGIS API For Silverlight使用在线地图的多种方法总结 本人也正在学习A ...
随机推荐
- Atcoder Tenka1 Programmer Contest 2019 D Three Colors
题意: 有\(n\)个石头,每个石头有权值,可以给它们染'R', 'G', 'B'三种颜色,如下定义一种染色方案为合法方案: 所有石头都染上了一种颜色 令\(R, G, B\)为染了'R', 染了'G ...
- Ubuntu16.04 +cuda8.0+cudnn+caffe+theano+tensorflow配置明细
本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www ...
- MySQL分区(Partition)功能
引用地址:http://blog.csdn.net/tjcyjd/article/details/11194489 自5.1开始对分区(Partition)有支持 = 水平分区(根据列属性按行分)=举 ...
- c++中对应java ShutdownHook的退出处理器
最近学习cpp(至于为什么,可参考http://www.cnblogs.com/zhjh256/p/6321972.html),c++标准库第二版5.8.2节的时候,发现c++有一个对应java Sh ...
- 03:requests与BeautifulSoup结合爬取网页数据应用
1.1 爬虫相关模块命令回顾 1.requests模块 1. pip install requests 2. response = requests.get('http://www.baidu.com ...
- 01: Centos7 常用命令
1.1 centos7中防火墙相关命令 1.查看状态 1. getenforce # 查看内核防火墙状态(disabled标识关闭) 2. systemctl status f ...
- 20145313张雪纯exp7
问题 (1)通常在什么场景下容易受到DNS spoof攻击 处于局域网中的时候,例如连接了学校/公司/餐厅wifi. (2)在日常生活工作中如何防范以上两攻击方法 不要轻易点开未知网址.鼠标在链接处停 ...
- 20145319 《网络渗透》DNS欺骗
20145319 <网络渗透>DNS欺骗 实验内容 dns欺骗实质上就是一种通过修改dns文件来改变目标想访问的域名和对应ip的攻击,使得目标在访问自己常用域名时不知不觉落入我们的圈套(可 ...
- C++11 正则表达式——实例系统(转载)
一.用正则表达式判断邮箱格式是否正确 1 #include <regex> #include <iostream> #include <string> bool i ...
- Android widget
1,TextView :走马灯效果 2,EditText ,AutoCompleteText MutiAutoCompleteTextView 3,Button,ImageButton,RadioBu ...