关于ArcGIS常用功能的实现

关于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]表示图层  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 等,这个具体的解释请参考:http://help.arcgis.com/en/arcgisserver/10.0/apis/rest/geometryserver.html官方的解释。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();
        }

时间: 2024-11-03 01:33:34

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

js常用功能代码

js常用功能代码(持续更新): 1,--折叠与展开 <input id="btnDisplay" type="button" class="baocun2" value="添加" onclick="changeDisplay()" /> <script type="text/javascript"> function changeDisplay() { var h

SVN的安装与常用功能使用以及解决安装配置过程中的一些错误

SVN简介: SVN是Subversion的简称,是一个开放源代码的版本控制系统,将工程代码集中在服务器上进行一个统一的集中式管理,从而能够方便地控制代码版本,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很多版本控制服务已从CVS迁移到Subversion.说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的,而且通过使用SVN开发人员之间[学Java,到凯哥学堂kaige123.com]能够很方便的更新.提交工程代码,并且如果工程的版本有冲突还

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

WebStorm 是 JetBrain 公司开发的一款 JavaScript IDE,使用非常方便,可以使编写代码过程更加流畅. 本文在这里分享一些常用功能的使用技巧,希望能帮助大家更好的使用这款强大的 JavaScript 开发工具. 代码编辑 代码跳转: Ctrl + 左键 或者 Ctrl + B,可以跳转到函数或者变量的声明位置 调用位置: Alt + F7,查找调用者 自动补全: 最好是修改一下响应时间,Settings->Editors->General->Code Compl

项目中常用功能,如:流媒体、健康数据(步数等)等-b

整理iOS开发中使用的各种流媒体和常用的高级功能.由于时间关系,目前只写了一部分功能,全部都采用的是系统方法,没用第三方,截图如下: screen1.png screen2.png 个人比较懒,不爱多写文字,直接上代码,哈哈. 视频 系统用AVFoundation与MediaPlayer框架实现播放视频的方案.其中AVFoundation扩展性好,都需自定义功能,而MediaPlayer集成简单,但是样式不可扩展. 1.AVFoundation使用AVPlayer播放视频,它属于view的lay

html(三) -- 常用功能标签

媒体标签 <embed></embed> 属性:        hidden : 设置隐藏插件是否隐藏.        src :用于指定音乐的路径 超链接标签 <a></a> 属性: href  : 用于指定链接的资源.常用协议:file:. mailTo:. http:      target: 设置打开新资源的目标.属性对应的值:_Blank 在独立的窗口上打开新资源   _self 在当前窗口打开新资源. a标签的原理:    1. a标签的href

IOS开发-OC学习-常用功能代码片段整理

IOS开发-OC学习-常用功能代码片段整理 IOS开发中会频繁用到一些代码段,用来实现一些固定的功能.比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成.或者是在做与URL有关的功能时,需要在Info.plist中添加一段代码进而实现让网址完成从Http到Https的转换,以及其他的一些功能. 在从一个新手到逐渐学会各种功能.代码.控件.方法如何使用的过程中,也在逐渐积累一些知识,但是一次总不会把这些东西都深刻记住并完全理解.所以在这儿记录下这些东西,用来

keepalived高可用的常用功能介绍

Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器.本篇文章会介绍keepalived的安装,配置,还有keepalived的一些脚本,keepalived+nginx高可用实现和keepalived双机互为主从的实现. keep

WebPack常用功能介绍

概述 Webpack是一款用户打包前端模块的工具.主要是用来打包在浏览器端使用的javascript的.同时也能转换.捆绑.打包其他的静态资源,包括css.image.font file.template等.个人认为它的优点就是易用,而且常用功能基本都有,另外可以通过自己开发loader和plugin来满足自己的需求.这里就尽量详细的来介绍下一些基本功能的使用. 上一篇已经介绍如何安装了,这里就不再重复了. 运行webpack webpack需要编写一个config文件,然后根据这个文件来执行需

[转]WebPack 常用功能介绍

概述 Webpack是一款用户打包前端模块的工具.主要是用来打包在浏览器端使用的javascript的.同时也能转换.捆绑.打包其他的静态资源,包括css.image.font file.template等.个人认为它的优点就是易用,而且常用功能基本都有,另外可以通过自己开发loader和plugin来满足自己的需求.这里就尽量详细的来介绍下一些基本功能的使用. 安装 npm install webpack 运行webpack webpack需要编写一个config文件,然后根据这个文件来执行需