大佬教程收集整理的这篇文章主要介绍了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,0" >
<Rectangle Fill="#77919191" stroke="Gray" RadiusX="10" RadiusY="10" Margin="0,5" >
<Rectangle.Effect>
<DropShadowEffect/>
</Rectangle.Effect>
</Rectangle>
<Rectangle Fill="#FFFFFFFF" stroke="DarkGray" RadiusX="5" RadiusY="5" Margin="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) |
|
几何服务(Geometry service) |
不需要 GIS 资源 |
地理处理服务(Geoprocessing service) |
具有工具图层或工具箱 (.tbX) 的地图文档 |
Globe 服务(Globe service) |
Globe 文档(.3dd、.pmf) |
影像服务(Image service) |
那么如何发布几何服务(Geometry service)呢 ?
其实发布Geometry service是最简单的,因为它不需要任何地图资源。
1、打开ArcCatalog,添加服务
2、类型选择Geometry service,名称必须用"Geometry"命名。
然后下一步完成,Geometry service发布就OK了。以上是大佬教程为你收集整理的arcgis api for silverlight开发系列之六:缓冲区分析实现及Geometry service服务发布全部内容,希望文章能够帮你解决arcgis api for silverlight开发系列之六:缓冲区分析实现及Geometry service服务发布所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。