arcgis api for silverlight开发系列之六:缓冲区分析实现及Geometry service服务发布

缓冲区分析的需求:有时候我们需要在地图某个点上,画出方圆5公里的区域,目的是查看该点所影响的地区。那么直接先看看效果:

源码:

    <Grid x:Name="LayoutRoot">
       
        <Grid.Resources>
            <esri:PictureMarkerSymbol x:Key="DefaultClickSymbol" OffsetX="11" OffsetY="39" Source="/Assets/images/i_pushpin.png" />
            <esri:SimpleFillSymbol x:Key="DefaultBufferSymbol" Fill="#660000FF" BorderBrush="Blue" BorderThickness="2"  />
        </Grid.Resources>

        <esri:Map x:Name="MyMap" Extent="-10863035.970,3838021.340,-10744801.344,3887145.299"
                  MouseClick="MyMap_MouseClick" >
         <esri:ArcGISTiledMapServiceLayer ID="StreetMapLayer"
          Url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" />
         <esri:GraphicsLayer ID="MyGraphicsLayer" />
        </esri:Map>       

        <Grid HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,10,10,0" >
            <Rectangle Fill="#77919191" Stroke="Gray"  RadiusX="10" RadiusY="10" Margin="0,0,0,5" >
             <Rectangle.Effect>
              <DropShadowEffect/>
             </Rectangle.Effect>
            </Rectangle>
            <Rectangle Fill="#FFFFFFFF" Stroke="DarkGray" RadiusX="5" RadiusY="5" Margin="10,10,10,15" />
            <TextBlock x:Name="InformationTextBlock" Text="Click on map to set a location. A buffer of 5 miles will be displayed."
                       Width="200" TextAlignment="Left" Margin="30,20,25,30" TextWrapping="Wrap" />
        </Grid>
       
    </Grid>

public BufferPoint()
        {
            InitializeComponent();
        }

        private void MyMap_MouseClick(object sender, ESRI.ArcGIS.Client.Map.MouseEventArgs e)
        {
            GraphicsLayer graphicsLayer = MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer;
            graphicsLayer.ClearGraphics();

            e.MapPoint.SpatialReference = MyMap.SpatialReference;
            Graphic graphic = new ESRI.ArcGIS.Client.Graphic()
            {
                Geometry = e.MapPoint,
                Symbol = LayoutRoot.Resources["DefaultClickSymbol"] as ESRI.ArcGIS.Client.Symbols.Symbol
            };
            graphic.SetZIndex(1);
            graphicsLayer.Graphics.Add(graphic);

            GeometryService geometryService =
              new GeometryService("http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");
            geometryService.BufferCompleted += GeometryService_BufferCompleted;
            geometryService.Failed += GeometryService_Failed;

            // If buffer spatial reference is GCS and unit is linear, geometry service will do geodesic buffering
            BufferParameters bufferParams = new BufferParameters()
            {
                Unit = LinearUnit.StatuteMile,
                BufferSpatialReference = new SpatialReference(4326),
                OutSpatialReference = MyMap.SpatialReference
            };
            bufferParams.Features.Add(graphic);
            bufferParams.Distances.Add(5);

            geometryService.BufferAsync(bufferParams);
        }

        void GeometryService_BufferCompleted(object sender, GraphicsEventArgs args)
        {
            IList<Graphic> results = args.Results;
            GraphicsLayer graphicsLayer = MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer;

            foreach (Graphic graphic in results)
            {
                graphic.Symbol = LayoutRoot.Resources["DefaultBufferSymbol"] as ESRI.ArcGIS.Client.Symbols.Symbol;
                graphicsLayer.Graphics.Add(graphic);
            }
        }

        private void GeometryService_Failed(object sender, TaskFailedEventArgs e)
        {
            MessageBox.Show("Geometry Service error: " + e.Error);
        }

相信大部分代码大家都会明白,只是其中GeometryService是什么东东,其实它是arcgis server一种服务,用于协助应用程序执行各种几何计算,如缓冲区、简化、面积和长度计算以及投影。简单浏览一下ArcGIS Server提供的各种服务:

服务类型                             

所需的 GIS 资源

地图服务(Map service)

地图文档(.mxd、.pmf)地图服务定义 (.msd)

地理编码服务(Geocode service)

地址定位器(.loc、.mxs、SDE 批量定位器)

地理数据服务(Geodata service)

数据库连接文件 (.sde) 个人地理数据库文件地理数据库具有从版本化的地理数据库中引用数据的图层的地图文档

几何服务(Geometry service)

不需要 GIS 资源

地理处理服务(Geoprocessing service)

具有工具图层工具箱 (.tbx) 的地图文档

Globe 服务(Globe service)

Globe 文档(.3dd、.pmf)

影像服务(Image service)

栅格数据集引用栅格数据集的图层文件镶嵌数据集已编译的影像服务定义 (.iscdef)

那么如何发布几何服务(Geometry service)呢 ?

其实发布Geometry service是最简单的,因为它不需要任何地图资源。

1、打开ArcCatalog,添加服务

2、类型选择Geometry service,名称必须用"Geometry"命名。

然后下一步完成,Geometry service发布就ok了。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leesmn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值