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

     

    七、Editing

    ArcGIS Server 10提供了:

    通过feature service,在Web上编辑Feature layersgeographic data的功能。

           通过geometry service,利用EditorWidget控件(ArcGIS Toolkit)实现Web编辑功能。

    注意:要实现简单feature编辑,feature service中的features必须来自ArcSDE geodatabase

    web上实现编辑后,应该周期性地用ArcGIS Desktop确认数据的完整性,虽然Web API能完成一些数据确认,但拓扑学的确认仍不能实现。

     

    实现Editing的前提条件:

    1Feature service:提供访问Feature的能力,使得地图服务能暴露featuregeometrysymbol属性

    2Geometry service:帮助完成通用编辑操作,如创建(creating)、切分(cutting)、变形(reshaping)地理特征(geographic feature)。在使用EditorWidget前,必须提供geometry serviceurl

    3custom editing solutions(自定义编辑方案):不采用EditorWidget,而自定义。

    Add——画或新增graphics

    CancelActive——取消地图上的active命令

    ClearSelection——取消选择所有graphics

    Cut——用用户自定义linecut graphics

    DeleteSelected——删除selectedgraphics。如果graphics与一个可编辑的feature layer相关联,features将会从数据库中删除。

    EditVertices——编辑用户点选的graphic的顶点

    Move——点击和拖动graphic

    Reshape——用用户自定义linereshape graphics(使用geometry service

    Save——提交并保存对所有feature layer的编辑

    Union——合并用户选择的graphics(使用geometry service

     

    设计editing

    虽然API包含了较全面的Editor Widget,但并不完全适用你的具体应用,可尝试通过如下方法设计Web editing应用:

    1Feature sketching:特征草图,如鸟瞰图,适用于精度要求不高的情况。

    2Attribute-only editing:仅仅属性编辑,适用于不需要改变几何学特征的情况。

    3Editing adjacent polygons:编辑邻接多边形,适用于仅需reshape现有的多边形或改变其属性而不会引起裂口(gaps)或叠加(overlaps)

    4Citizen Participation,or geo-wiki:适用于不需要关心编辑GIS数据,仅仅需要在地图上放置点feature和进行有限的属性编辑。如市民向政府部门反映情况,要求能在地图上放置点,该点包括包括相片、简短描述等辅助信息。你需要code一些安全检查,以确保他们仅仅能编辑和删除自己的事件,并周期性的清除数据库。

    5Specialized field work:假定有一些分析家管理街道数据库,仅仅能在街道网络layer新建和删除线feature,那么Template Picker必须能指示出新建了哪种类型的道路(泊油路、铺石转路等),能对属性进行随意的编辑。。。

     

    八、Tasks

    task classes提供了如下一些空间分析功能:

    1Query:属性(attribute)——空间(spatial),双向查询

    从一个feature layer中获取features,展示featuresgeometriesattribute

    目的是为了查询它的具体信息

                         a、简单查询:通过关键字查询,获得结果列表

                         bAttribute查询:通过关键字查询,获得结果的详细信息,并在地图上显示

                         cSpatial查询:点查询、线查询、拉框查询、任意多边形查询

    2Find:通过特定属性值,查询其空间定位和结果列表

                         从一个或多个layer中,通过attribute查找features,展示其geometriesattribute

                         通过关键字查询,获得结果的列表(显示结果所在层的信息,如层名等,但不显示结果本身的详细信息),并在地图上显示。(目的是为了找到它的位置)。

    3Identify:相交定位,得到features

                         在地图上点击,识别并显示点击到的features的详细信息。

    4Address locator:地址(geocode)——位置(location),双向查询

                         输入地址,显示地图上的位置;点击地图上的位置,显示地址

    5Geometry——几何的操作,如计算面积和长度、bufferingprojectionsimplifying

    6Goeprocessing——复杂GIS分析(通过Goeprocessing服务发布的Goeprocessing模型)

    7Route——路径分析

     

    1Query示例代码

    1xaml文件:

    //添加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>

     

    2cs文件:

    //添加命名空间

    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);

    }

  • 相关阅读:
    获取设备信息
    获取Mac地址
    常用正则
    几个字段相同的纪录去重留下主键最小的一条纪录
    mysql查询数据库中包含某字段(列名)的所有表
    nginx反向代理
    Eureka参数配置项详解
    html5验证自适应
    synchronized对象解析
    多线程进行数据同步
  • 原文地址:https://www.cnblogs.com/changbaishan/p/3305968.html
Copyright © 2011-2022 走看看