当前位置: 首页 > news >正文

ArcGIS Runtime SDK for WPF之测量距离和面积

bu不多说,上代码

using System.Windows;
using ESRI.ArcGIS.Client;
using ESRI.ArcGIS.Client.Tasks;
using ESRI.ArcGIS.Client.Local;
using System;
using System.Windows.Input;
using ESRI.ArcGIS.Client.Geometry;
using ESRI.ArcGIS.Client.Symbols;
using System.Collections.Generic;

namespace ArcGISWpfApplication2
{

    public partial class MainWindow : Window
    {
        GeometryService gMeasureLength,gMeasureArea;
        Draw drawMeasure;
        public MainWindow()
        {
            // License setting and ArcGIS Runtime initialization is done in Application.xaml.cs.

            InitializeComponent();
            GraphicsLayer gLayer = new GraphicsLayer();
            gLayer.ID = "MyGraphicsLayerMeasure";
            Map.Layers.Add(gLayer);
            //Map.Layers.Insert(0, gLayer);//这样不行,arcgis runtime加载图层与arcgis mapinfo方式相反,索引大的在上面
            LocalGeometryServiceInit();
        }

        void LocalGeometryServiceInit() 
        {
            LocalGeometryService.GetServiceAsync(localGeometryService =>
                {
                    gMeasureLength = new GeometryService();
                    gMeasureLength.Url = localGeometryService.UrlGeometryService;
                    gMeasureLength.LengthsCompleted += gMeasureLength_LengthsCompleted;
                    gMeasureLength.Failed += gMeasureLength_Failed;
                });

            LocalGeometryService.GetServiceAsync(localGeometryService =>
            {
                gMeasureArea = new GeometryService();
                gMeasureArea.Url = localGeometryService.UrlGeometryService;
                gMeasureArea.AreasAndLengthsCompleted += gMeasureArea_AreasAndLengthsCompleted;
                gMeasureArea.Failed += gMeasureLength_Failed;
            });
        }

        void gMeasureArea_AreasAndLengthsCompleted(object sender, AreasAndLengthsEventArgs e)
        {
            double _Lengths = e.Results.Lengths[0];
            double _Area = e.Results.Areas[0];
            MessageBox.Show(String.Format("多边形周长为{0},面积为{1}",Math.Round(_Lengths,3),Math.Round(_Area,3)));
        }

        void gMeasureLength_Failed(object sender, TaskFailedEventArgs e)
        {
            MessageBox.Show("测量失败");
        }

        void gMeasureLength_LengthsCompleted(object sender, LengthsEventArgs e)
        {
            MessageBox.Show(String.Format("折线的长度:{0} 公里", Math.Round(e.Results[0], 3)));
            Map.Cursor = Cursors.Hand;
        }

        private void MeasureLine(object sender, RoutedEventArgs e)
        {
            GraphicsLayer _GraphicsLayer = Map.Layers["MyGraphicsLayerMeasure"] as GraphicsLayer;
            _GraphicsLayer.ClearGraphics();
            drawMeasure = new Draw(Map)
            {
                DrawMode = DrawMode.Polyline,
                IsEnabled = true,
                //LineSymbol = Root.Resources["SelectLineSymbol"] as LineSymbol
            };

            drawMeasure.DrawBegin +=drawMeasure_DrawBegin;
            drawMeasure.DrawComplete +=drawMeasure_DrawDistanceComplete;
        }

        void drawMeasure_DrawDistanceComplete(object sender, DrawEventArgs e)
        {
             Polyline _Polyline = e.Geometry as Polyline;
            _Polyline.SpatialReference = Map.SpatialReference;
              Graphic _Graphic = new Graphic()
            {
                Symbol = Resources["CompleteLineSymbol"] as Symbol,//不自定义的话默认的是透明的,不然测量完看不到线
                Geometry = _Polyline
            };

            GraphicsLayer _GraphicsLayer = Map.Layers["MyGraphicsLayerMeasure"] as GraphicsLayer;
            _GraphicsLayer.Graphics.Add(_Graphic);

            //开始计算长度
            gMeasureLength.LengthsAsync(_GraphicsLayer.Graphics, LinearUnit.Kilometer, CalculationType.Geodesic, null);
            drawMeasure.DrawMode = DrawMode.None;
            
        }

        void drawMeasure_DrawBegin(object sender, EventArgs e)
        {
             Map.Cursor=Cursors.Arrow;
        }
        //MeasureAreaLength
        private void MeasureAreaLength(object sender, RoutedEventArgs e)
        {
            GraphicsLayer _GraphicsLayer = Map.Layers["MyGraphicsLayerMeasure"] as GraphicsLayer;
            _GraphicsLayer.ClearGraphics();
            drawMeasure = new Draw(Map)
            {
                DrawMode = DrawMode.Polygon,
                IsEnabled = true,
                //LineSymbol = Root.Resources["SelectLineSymbol"] as LineSymbol
            };

            drawMeasure.DrawBegin += drawMeasure_DrawBegin;
            drawMeasure.DrawComplete += drawMeasure_DrawAreaLengthComplete;
        }

        private void drawMeasure_DrawAreaLengthComplete(object sender, DrawEventArgs e)
        {
            Polygon _Polygon = e.Geometry as Polygon;
            _Polygon.SpatialReference = Map.SpatialReference;
            Graphic _Graphic = new Graphic() { 
                Symbol = Resources["CompletePolygonSymbol"] as Symbol,
                Geometry = _Polygon
            };
            GraphicsLayer _GraphicsLayer = Map.Layers["MyGraphicsLayerMeasure"] as GraphicsLayer;
            _GraphicsLayer.Graphics.Add(_Graphic);
            List<Graphic> _GraphicList = new List<Graphic>();
            _GraphicList.Add(_Graphic);
            gMeasureArea.AreasAndLengthsAsync(_GraphicList,AreaUnit.SquareKilometers);
        }

            }
        }
<Window x:Class="ArcGISWpfApplication2.MainWindow"
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:esri="http://schemas.esri.com/arcgis/client/2009"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <esri:SimpleLineSymbol x:Key="CompleteLineSymbol" Color="Green" Width="4" />
        <esri:SimpleFillSymbol x:Key="CompletePolygonSymbol" Fill="Green" BorderBrush="LightBlue" BorderThickness="1" />
    </Window.Resources>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
        <Border Background="#ccc">
            <StackPanel Orientation="Horizontal">
                <Button Height="30" Width="100" Click="MeasureLine">测距</Button>
                <Button Height="30" Width="100" Click="MeasureAreaLength">测面积</Button>
            </StackPanel>
        </Border>
        <esri:Map x:Name="Map" Grid.Row="1" Background="White" Cursor="Hand" Extent="-20014711, 15, 1656956, 12175318">
            <esri:ArcGISTiledMapServiceLayer ID="BaseLayer" Url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" />
            <!--<esri:GpsLayer x:Name="MyGpsLayer" />-->
        </esri:Map>
    </Grid>
</Window>

 

转载于:https://www.cnblogs.com/lelehellow/p/6475288.html

相关文章:

  • hash随笔
  • ELASTIC API
  • 关于版本强制升级与非强制升级
  • Syntax error, insert } to complete MethodBody
  • css之鼠标cursor
  • template.js小小说明
  • 阿里云centos6.5下搭建javaWeb运行环境
  • CPA-IBE
  • H5移动端开发入门知识以及CSS的单位汇总与用法
  • 修改或删除任务计划
  • 用决策树模型求解回归问题(regression tree)
  • Javascript 面向对象编程(一):封装
  • Linux每隔1秒kill掉cpu大于50%的进程
  • JavaWeb编程(九)servlet高级应用之监听器和过滤器
  • SqlHelper中SqlHelperParameterCache类的用法介绍
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • 07.Android之多媒体问题
  • CentOS从零开始部署Nodejs项目
  • CSS3 变换
  • JSDuck 与 AngularJS 融合技巧
  • LeetCode18.四数之和 JavaScript
  • Linux下的乱码问题
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • React as a UI Runtime(五、列表)
  • RxJS: 简单入门
  • Sublime Text 2/3 绑定Eclipse快捷键
  • 高度不固定时垂直居中
  • 后端_MYSQL
  • 基于Android乐音识别(2)
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 记录:CentOS7.2配置LNMP环境记录
  • 解析 Webpack中import、require、按需加载的执行过程
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 《天龙八部3D》Unity技术方案揭秘
  • Java数据解析之JSON
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • #AngularJS#$sce.trustAsResourceUrl
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $refs 、$nextTic、动态组件、name的使用
  • (07)Hive——窗口函数详解
  • (arch)linux 转换文件编码格式
  • (分布式缓存)Redis哨兵
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)setTimeout 和 setInterval 的区别
  • (转)visual stdio 书签功能介绍
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • .jks文件(JAVA KeyStore)
  • .naturalWidth 和naturalHeight属性,
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .net core 6 redis操作类