关于ArcGIS中常见的一些功能的总结,一般首先在前台中放置地图,代码如下所示:

<esri:Map Grid.Row="0" Grid.Column="0" Grid.RowSpan="5" Grid.ColumnSpan="6"  x:Name="MyMap"  WrapAround="True"  
MouseClick="MyMap_MouseClick" ExtentChanged="MyMap_ExtentChanged" />

  放置了地图之后我们就可以进行相关的操作

1  地图的放大与缩小:MyMap.Zoom(double param) 其中参数param>1,表示地图放大,例如param=2,表示放大到原来的两倍,param<1表示地图的缩小。

2  地图范围发生变化时发生的事件,其中this.MyMap.Layers[0]表示图层 0,加载的是本地缓存地图图层,一般用作底图。

ArcGISLocalTiledLayer tpkLayer = new ArcGISLocalTiledLayer("GqyPgisData\\" +_ConfigInfo.TpkName + ".tpk");
MyMap.Layers.Add(tpkLayer);  

当地图范围发生改变时,地图图层执行相应的改变。

private void MyMap_ExtentChanged(object sender, ExtentEventArgs e)
{
////需要判断是否已经有地图比例尺,有比例尺了表示定位完毕可以换算桌面坐标
if (!_mapIntial)
{
Envelope env = this.MyMap.Layers[0].FullExtent;
double x = (env.XMax + env.XMin) / 2.0;
double y = (env.YMax + env.YMin) / 2.0;
Envelope newEnv = new Envelope(x - env.Width / 16.0, y - env.Height / 16.0, x + env.Width / 16.0, y + env.Width / 16.0);
this.MyMap.Extent = newEnv;
}
}  

3   测量折线距离

下面直接贴出代码,并作出相应的解释。首先GeometryService 就是提供针对几何层级的服务,比如说Project,Simplify , Buffer,Areas And Lengths , Lengths 等,这个具体的解释请参考这里的官方的解释。LocalGeometryService表示本地几何层级的服务。

      public void MapMeasureDistance()
{
//清除测量图层
ClearMyGraphicsLayerMeasure(); //设置测量信息区域可见
gMapInfo.Visibility = Visibility.Visible;
gMapInfo.lblInfo.Content = "请在地图中点击画折线,计算长度!"; _GeometryServiceMeasure = new GeometryService();
LocalGeometryService lgs = LocalGeometryService.GetService();
_GeometryServiceMeasure.Url = lgs.UrlGeometryService;
_GeometryServiceMeasure.LengthsCompleted += _GeometryServiceMeasure_LengthsCompleted;
_GeometryServiceMeasure.Failed += _GeometryServiceMeasure_Failed;
MyMap.IsEnabled = true; //实例化一个Draw对象,开始画图操作 _DrawMeasure = new Draw(MyMap)
{
DrawMode = DrawMode.Polyline,
IsEnabled = true, //这里是前台定义的资源,即画线的样式
LineSymbol = Root.Resources["SelectLineSymbol"] as LineSymbol
}; _DrawMeasure.DrawBegin += _DrawMeasure_Begin;
_DrawMeasure.DrawComplete += _DrawMeasure_MeasureLengthsComplete;
} /// <summary>
/// 开始画
/// </summary>
void _DrawMeasure_Begin(object sender, EventArgs args)
{
//ClearMyGraphicsLayerMeasure();
} /// <summary>
/// 完成画长度
/// </summary>
void _DrawMeasure_MeasureLengthsComplete(object sender, DrawEventArgs args)
{
Polyline _Polyline = args.Geometry as Polyline; if (_Polyline.Paths[0].Count > 1)
{
XmlDocument xmlDoc = GISUDPClient.Instance.CreateXmlDocument("GQYPGIS.Xml.Action.ActionMeasureLine.xml");
XmlNode xmlNode = xmlDoc.SelectSingleNode("Action/MapPoints"); //发送直线测量图形命令(点选)
foreach (MapPoint mp in _Polyline.Paths[0])
{ XmlElement xmlElement = xmlDoc.CreateElement("MapPoint");
XmlAttribute xmlAttr = xmlDoc.CreateAttribute("X");
xmlAttr.Value = mp.X.ToString();
xmlElement.Attributes.Append(xmlAttr);
xmlAttr = xmlDoc.CreateAttribute("Y");
xmlAttr.Value = mp.Y.ToString();
xmlElement.Attributes.Append(xmlAttr); xmlNode.AppendChild(xmlElement); }
GISUDPClient.Instance.SendTo(xmlDoc);
} _Polyline.SpatialReference = MyMap.SpatialReference; Graphic _Graphic = new Graphic()
{
Symbol = Root.Resources["CompleteLineSymbol"] as Symbol,
Geometry = _Polyline
}; GraphicsLayer _GraphicsLayer = MyMap.Layers["MyGraphicsLayerMeasure"] as GraphicsLayer;
_GraphicsLayer.Graphics.Add(_Graphic); //开始计算长度
_GeometryServiceMeasure.LengthsAsync(_GraphicsLayer.Graphics, LinearUnit.Kilometer, CalculationType.Geodesic, null); _DrawMeasure.DrawMode = DrawMode.None;
}  

4  完成画线后执行的动作

/// <summary>
/// 完成画长度
/// </summary>
void _DrawMeasure_MeasureLengthsComplete(object sender, DrawEventArgs args)
{
Polyline _Polyline = args.Geometry as Polyline;
if (_Polyline.Paths[0].Count > 1)
{
XmlDocument xmlDoc = GISUDPClient.Instance.CreateXmlDocument("GQYPGIS.Xml.Action.ActionMeasureLine.xml");
XmlNode xmlNode = xmlDoc.SelectSingleNode("Action/MapPoints"); //发送直线测量图形命令(点选)
foreach (MapPoint mp in _Polyline.Paths[0])
{
XmlElement xmlElement = xmlDoc.CreateElement("MapPoint");
XmlAttribute xmlAttr = xmlDoc.CreateAttribute("X");
xmlAttr.Value = mp.X.ToString();
xmlElement.Attributes.Append(xmlAttr); xmlAttr = xmlDoc.CreateAttribute("Y");
xmlAttr.Value = mp.Y.ToString();
xmlElement.Attributes.Append(xmlAttr); xmlNode.AppendChild(xmlElement); }
GISUDPClient.Instance.SendTo(xmlDoc);
} _Polyline.SpatialReference = MyMap.SpatialReference; Graphic _Graphic = new Graphic()
{
Symbol = Root.Resources["CompleteLineSymbol"] as Symbol,
Geometry = _Polyline
}; GraphicsLayer _GraphicsLayer = MyMap.Layers["MyGraphicsLayerMeasure"] as GraphicsLayer;
_GraphicsLayer.Graphics.Add(_Graphic); //开始计算长度
_GeometryServiceMeasure.LengthsAsync(_GraphicsLayer.Graphics, LinearUnit.Kilometer, CalculationType.Geodesic, null);
_DrawMeasure.DrawMode = DrawMode.None;
}        

5   几何服务长度计算完成

        void _GeometryServiceMeasure_LengthsCompleted(object sender, LengthsEventArgs args)
{
gMapInfo.lblInfo.Content = String.Format("折线的长度:{0} 公里", Math.Round(args.Results[0], 3));
} /// <summary>
/// 几何服务计算周长面积完成
/// </summary>
void _GeometryServiceMeasure_AreasAndLengthsCompleted(object sender, AreasAndLengthsEventArgs args)
{
double kms = args.Results.Lengths[0] * 0.001;
double sqkm = Math.Abs(args.Results.Areas[0]) * 0.001 * 0.001;
//double kms = args.Results.Lengths[0] * 100;
//double miles = args.Results.Lengths[0] * 0.0006213700922;
//double sqkm = Math.Abs(args.Results.Areas[0]) * 10000;
//double sqmi = Math.Abs(args.Results.Areas[0]) * 0.0000003861003;
gMapInfo.lblInfo.Content = String.Format("多边形周长: {1} 公里\r\n多边形面积: {0} 平方公里", Math.Round(sqkm, 3), Math.Round(kms, 3));
} ///<summary>
/// 几何服务失败
///</summary>
void _GeometryServiceMeasure_Failed(object sender, TaskFailedEventArgs e)
{
//throw new NotImplementedException();
}

  上面就介绍这么多,都是一些基础的功能,最重要的是要经常不断去反思和总结。

关于ArcGIS常用功能的实现的更多相关文章

  1. WebStorm 常用功能的使用技巧分享

    WebStorm 是 JetBrain 公司开发的一款 JavaScript IDE,使用非常方便,可以使编写代码过程更加流畅. 本文在这里分享一些常用功能的使用技巧,希望能帮助大家更好的使用这款强大 ...

  2. AVA正则表达式4种常用功能

    正则表达式在字符串处理上有着强大的功能,sun在jdk1.4加入了对它的支持 下面简单的说下它的4种常用功能: 查询: String str="abc efg ABC";  Str ...

  3. [转]WebPack 常用功能介绍

    概述 Webpack是一款用户打包前端模块的工具.主要是用来打包在浏览器端使用的javascript的.同时也能转换.捆绑.打包其他的静态资源,包括css.image.font file.templa ...

  4. FastReport.Net 常用功能总汇

    一.常用控件 文本框:输入文字或表达式 表格:设置表格的行列数,输入数字或表达式 子报表:放置子报表后,系统会自动增加一个页面,你可以在此页面上设计需要的报表.系统在打印处理时,先按主报表打印,当碰到 ...

  5. python3 字符串与列表常用功能

    一.字符串常用功能 1. capitalize(),将字符串的首字母变成大写,其余全部置为小写:如果字符串中有多个单词,也只是将第一个单词的首字母置为大写:例: >>> name = ...

  6. matlab进阶:常用功能的实现,常用函数的说明

    常用功能的实现 获取当前脚本所在目录 current_script_dir = fileparts(mfilename('fullpath')); % 结尾不带'/' 常用函数的说明 bsxfun m ...

  7. WebPack常用功能介绍

    概述 Webpack是一款用户打包前端模块的工具.主要是用来打包在浏览器端使用的javascript的.同时也能转换.捆绑.打包其他的静态资源,包括css.image.font file.templa ...

  8. JavaScript 常用功能总结

    小编吐血整理加上翻译,太辛苦了~求赞! 本文主要总结了JavaScript 常用功能总结,如一些常用的JS 对象,基本数据结构,功能函数等,还有一些常用的设计模式. 目录: 众所周知,JavaScri ...

  9. TeeChart控件的安装与常用 功能设置

    TeeChart控件的安装 TeeChart 7.0 With Source在Delphi 7.0中的安装 一.删除Delphi7自带TeeChart  1.Component -> insta ...

随机推荐

  1. day22 Pythonpython random随机模块:略!!!本文os模块

    OS模块 用于提供系统级别的操作: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相 ...

  2. Linux系统学习之字符处理

    管道 管道是一种使用非常频繁的通信机制,我们可以使用管道符"|"来连接进程,由管道连接起来订单进程可以自动运行,如同有一个数据流一样,所以管道表现为输入输出重定向的一种方法,它可以 ...

  3. python基础学习第五天

    li=[1,2,33,-1,'dbssd',[4,5,6],{4:'rfw',5:'re'}]del(li[1])print(li)print(type(li))#访问元素print(li[0])pr ...

  4. Zephyr学习专题

    1 前言 本来想学习Zyphyr的Power Management,但是看着看着就被带进去了. 你看功耗,里面的suspend涉及到时间补偿相关的吧,然后就涉及到了Kernel Clocks/Time ...

  5. [04] JSP标准动作

    1.概述 JSP规范中定义了一系列的标准动作,Web容器按照规范进行了实现,可以解析并执行标准动作.而标准动作使用的是标准的xml语法,看上去也比较直观易懂,下面来看一个结构例子: <jsp:a ...

  6. Mybatis自动生成实体类

    Maven自动生成实体类需要的jar包 一.pom.xml中 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns ...

  7. python 对时间操作

    from datetime import datetime,timedelta 'date_test':fields.function(_datetime_all,type='datetime',  ...

  8. C#的delegate简单练习

    delegate中文的意思为委托. 在很久之前,Insus.NET有写过一篇<用一个简单的例子来演绎事件委托>http://www.cnblogs.com/insus/p/3732075. ...

  9. NoSql的三大基石:CAP理论&BASE&最终一致性

    关系型数据库的局限 NoSql出现在关系型数据库之后,主要是为了解决关系型数据库的短板,我们先来看看随着软件行业的发展,关系型数据库面临了哪些挑战: 1.高并发 一个最典型的就是电商网站,例如双11, ...

  10. spring boot配置统一异常处理

    基于@ControllerAdvice的统一异常处理 >.这里ServerException是我自定义的异常,和普通Exception分开处理 >.这里的RequestResult是我自定 ...