【转】ArcGIS API for Silverlight/WPF 2.1学习笔记(四)
七、Editing
ArcGIS Server 10提供了:
通过feature service,在Web上编辑Feature layers的geographic data的功能。
通过geometry service,利用EditorWidget控件(ArcGIS Toolkit)实现Web编辑功能。
注意:要实现简单feature编辑,feature service中的features必须来自ArcSDE geodatabase。
在web上实现编辑后,应该周期性地用ArcGIS Desktop确认数据的完整性,虽然Web API能完成一些数据确认,但拓扑学的确认仍不能实现。
实现Editing的前提条件:
(1)Feature service:提供访问Feature的能力,使得地图服务能暴露feature的geometry和symbol属性
(2)Geometry service:帮助完成通用编辑操作,如创建(creating)、切分(cutting)、变形(reshaping)地理特征(geographic feature)。在使用EditorWidget前,必须提供geometry service的url。
(3)custom editing solutions(自定义编辑方案):不采用EditorWidget,而自定义。
Add——画或新增graphics
CancelActive——取消地图上的active命令
ClearSelection——取消选择所有graphics
Cut——用用户自定义line来cut graphics
DeleteSelected——删除selected的graphics。如果graphics与一个可编辑的feature layer相关联,features将会从数据库中删除。
EditVertices——编辑用户点选的graphic的顶点
Move——点击和拖动graphic
Reshape——用用户自定义line来reshape graphics(使用geometry service)
Save——提交并保存对所有feature layer的编辑
Union——合并用户选择的graphics(使用geometry service)
设计editing
虽然API包含了较全面的Editor Widget,但并不完全适用你的具体应用,可尝试通过如下方法设计Web editing应用:
(1)Feature sketching:特征草图,如鸟瞰图,适用于精度要求不高的情况。
(2)Attribute-only editing:仅仅属性编辑,适用于不需要改变几何学特征的情况。
(3)Editing adjacent polygons:编辑邻接多边形,适用于仅需reshape现有的多边形或改变其属性而不会引起裂口(gaps)或叠加(overlaps)。
(4)Citizen Participation,or geo-wiki:适用于不需要关心编辑GIS数据,仅仅需要在地图上放置点feature和进行有限的属性编辑。如市民向政府部门反映情况,要求能在地图上放置点,该点包括包括相片、简短描述等辅助信息。你需要code一些安全检查,以确保他们仅仅能编辑和删除自己的事件,并周期性的清除数据库。
(5)Specialized field work:假定有一些分析家管理街道数据库,仅仅能在街道网络layer新建和删除线feature,那么Template Picker必须能指示出新建了哪种类型的道路(泊油路、铺石转路等),能对属性进行随意的编辑。。。
八、Tasks
task classes提供了如下一些空间分析功能:
(1)Query:属性(attribute)——空间(spatial),双向查询
从一个feature layer中获取features,展示features的geometries或attribute
目的是为了查询它的具体信息
a、简单查询:通过关键字查询,获得结果列表
b、Attribute查询:通过关键字查询,获得结果的详细信息,并在地图上显示
c、Spatial查询:点查询、线查询、拉框查询、任意多边形查询
(2)Find:通过特定属性值,查询其空间定位和结果列表
从一个或多个layer中,通过attribute查找features,展示其geometries或attribute
通过关键字查询,获得结果的列表(显示结果所在层的信息,如层名等,但不显示结果本身的详细信息),并在地图上显示。(目的是为了找到它的位置)。
(3)Identify:相交定位,得到features
在地图上点击,识别并显示点击到的features的详细信息。
(4)Address locator:地址(geocode)——位置(location),双向查询
输入地址,显示地图上的位置;点击地图上的位置,显示地址
(5)Geometry——几何的操作,如计算面积和长度、buffering、projection、simplifying
(6)Goeprocessing——复杂GIS分析(通过Goeprocessing服务发布的Goeprocessing模型)
(7)Route——路径分析
1、Query示例代码
(1)xaml文件:
//添加Symbol命名空间
xmlns:esriSymbols="clr-namespace:ESRI.ArcGIS.Client.Symbols;assembly=ESRI.ArcGIS.Client
//创建Symbol
<Grid.Resources>
<esriSymbols:SimpleFillSymbol x:Name="ResultsFillSymbol" Fill="#500000FF" BorderBrush="Blue" BorderThickness="1" />
</Grid.Resources>
//创建GraphicsLayer,显示Query查询结果
<esri:GraphicsLayer ID="MyGraphicsLayer">
<esri:GraphicsLayer.MapTip>
<Grid Background="LightYellow">
<StackPanel>
<TextBlock Text="{Binding [STATE_NAME]}" FontWeight="Bold" />
<StackPanel Orientation="Horizontal">
<TextBlock Text="Population Density (2007): " />
<TextBlock Text="{Binding [POP07_SQMI]}" />
</StackPanel>
</StackPanel>
<Border BorderBrush="Black" BorderThickness="1" />
</Grid>
</esri:GraphicsLayer.MapTip>
</esri:GraphicsLayer>
//Query查询对话框
<Canvas HorizontalAlignment="" VerticalAlignment="" Margin="0,15,7,0" Width="250" >
<Rectangle Fill="#CC5C90B2" Stroke="Gray" RadiusX="10" RadiusY="10" Width="230" Height="55" />
<TextBlock Text="输入query并点执行" Foreground="White" FontSize="10" Margin="10,5,0,0" />
<TextBox x:Name="QueryTextBox" Width="150" Margin="15,22,0,0" Text="POP07_SQMI > 500" />
<Button x:Name="QueryButton" Content="执行" Margin="168,23,0,0" Click="QueryButton_Click" />
</Canvas>
(2)cs文件:
//添加命名空间
using ESRI.ArcGIS.Client.Tasks;
using ESRI.ArcGIS.Client.Symbols;
// 点击执行按钮,执行查询
private void QueryButton_Click(object sender, RoutedEventArgs e)
{
//初始化Query task
QueryTask queryTask = new QueryTask("http://./ArcGIS/rest/services/./MapServer/5");
queryTask.ExecuteCompleted += QueryTask_ExecuteCompleted;
queryTask.Failed += QueryTask_Failed;
// 初始化Query及其参数:返回geometry、州名、人口密度
Query query = new Query();
query.ReturnGeometry = true;
query.OutFields.AddRange(new string[] { "STATE_NAME", "POP07_SQMI" });
//query条件
query.Where = QueryTextBox.Text;
//执行query
queryTask.ExecuteAsync(query);
}
//query完成后绘制查询结果
private void QueryTask_ExecuteCompleted(object sender, QueryEventArgs args)
{
//获得graphicsLayer,并清除先前的结果
GraphicsLayer graphicsLayer = MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer;
graphicsLayer.ClearGraphics();
// Check for new results
FeatureSet featureSet = args.FeatureSet;
if (featureSet.Features.Count > 0)
{
//将结果添加到地图
foreach (Graphic resultFeature in featureSet.Features)
{
resultFeature.Symbol = ResultsFillSymbol;
graphicsLayer.Graphics.Add(resultFeature);
}
}
else
{
MessageBox.Show("No features found");
}
}
// query失败,显示错误原因
private void QueryTask_Failed(object sender, TaskFailedEventArgs args)
{
MessageBox.Show("Query failed: " + args.Error);
}
【转】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学习笔记(一)
源自:http://blog.163.com/zwx_gis/blog/static/32434435201122193611576/ (主页:http://blog.163.com/zwx_gis/ ...
- 【转】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 ...
随机推荐
- VS2010中如何实现自定义MFC控件
本文简要讲解在VS2010中怎样实现自定义MFC控件的知识,以下是分步骤说明. 一.自定义一个空白控件 1.先创建一个MFC工程 NEW Project-->MFC-->MFC Appl ...
- VS2010/MFC编程入门之四十七(字体和文本输出:CFont字体类)
上一节中鸡啄米讲了MFC异常处理,本节的主要内容是字体CFont类. 字体简介 GDI(Graphics Device Interface),图形设备接口,是Windows提供的一些函数和结构,用于在 ...
- Codeforces 1146E Hot is Cold
题意: 给出一个序列,有两种操作: \(>\;x\) 将大于\(x\)的数全都取负 \(<\;x\) 将小于\(x\)的数全都取负 最后输出序列中的所有数最后的状态 思路: 我们先考虑对于 ...
- 概率检索模型:BIM+BM25+BM25F
1. 概率排序原理 以往的向量空间模型是将query和文档使用向量表示然后计算其内容相似性来进行相关性估计的,而概率检索模型是一种直接对用户需求进行相关性的建模方法,一个query进来,将所有的文档分 ...
- Object-C-NSFileHandle
NSFileHandle 类中得到方法可以很方便的对文件数据进行读写.追加,以及偏移量的操作. NSFileHandle 基本步骤: 1.打开文件,获取一个NSFileHandle 对象 2.对打开N ...
- 用户可在Messenger内读书并与角色互动
畅销小说作家 James Patterson 与 Facebook 合作,为新书<The Chef>在 Messenger 推出互动体验版. 10 月 30 日下午消息,据<香港经济 ...
- C++系统时间及字符串转换参考资料
https://msdn.microsoft.com/en-us/library/a442x3ye.aspx https://msdn.microsoft.com/en-us/library/fe06 ...
- 使用token实现在有效期内APP自动登录功能
实现此功能的场景是在当下用户对手机APP体验要求高,并且相对安全前提的推动下诞生:当你下载了一个QQ,微信第一次进行了账号和密码的登录,你从此以后打开应用免去了你每日打开应用都要输入账号跟密码的痛苦过 ...
- Centos下使用php调用shell脚本
我们在实际项目中或许会遇到php调用shell脚本的需求.下面就用简单案例在Centos环境下实践 准备 查看php.ini中配置是否打开安全模式 //php.ini safe_mode = //这个 ...
- 02: SocketServer服务
网络编程其他篇 目录: 1.1 SocketServer四种基本流及 异步处理理论部分 1.2 创建socketserver实现: 多客户端并发 1.3 SocketServer实现多并发FTP 部分 ...