zoukankan      html  css  js  c++  java
  • ArcGIS Pro二次开发-在地图上插入一个点

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using ArcGIS.Core.CIM;
    using ArcGIS.Core.Data;
    using ArcGIS.Core.Geometry;
    using ArcGIS.Desktop.Catalog;
    using ArcGIS.Desktop.Core;
    using ArcGIS.Desktop.Editing;
    using ArcGIS.Desktop.Extensions;
    using ArcGIS.Desktop.Framework;
    using ArcGIS.Desktop.Framework.Contracts;
    using ArcGIS.Desktop.Framework.Dialogs;
    using ArcGIS.Desktop.Framework.Threading.Tasks;
    using ArcGIS.Desktop.Mapping;
    using System.Windows.Input;
    
    
    
    
    
    namespace ProAppModule1
    {
        internal class MapToolSelect : MapTool
        {
            private CIMPointSymbol _pointSymbol = null;
    
            private IDisposable _graphic = null;
    
    
    
            public MapToolSelect()
    
            {
    
                IsSketchTool = true;
    
                SketchType = SketchGeometryType.Point;
    
                SketchOutputMode = SketchOutputMode.Screen;
    
            }
    
    
    
            protected async override Task OnToolActivateAsync(bool active)
    
            {
    
                if (_pointSymbol == null) _pointSymbol = await CreatePointSymbolAsync();
    
            }
    
    
    
            protected async override Task<bool> OnSketchCompleteAsync(Geometry geometry)
    
            {
    
                if (geometry.SpatialReference == null)
    
                {
    
                    // screen coordinates
    
                    var screenPointAsMapPoint = geometry as MapPoint;
    
                    if (screenPointAsMapPoint != null)
    
                    {
    
                        var pnt = new System.Windows.Point
    
                        {
    
                            X = screenPointAsMapPoint.X,
    
                            Y = screenPointAsMapPoint.Y
    
                        };
    
                        var mapScreenPoint = await QueuedTask.Run<MapPoint>(
    
                               () => MapView.Active.ClientToMap(pnt));
    
                        if (mapScreenPoint.IsEmpty)
    
                        {
    
                            System.Diagnostics.Debug.WriteLine(@"Screen Point is empty");
    
                        }
    
                        else
    
                        {
    
                            _graphic = await this.AddOverlayAsync(mapScreenPoint, _pointSymbol.MakeSymbolReference());
    
                        }
    
                    }
    
                }
    
                else
    
                {
    
                    // map coordinates
    
                    _graphic = await this.AddOverlayAsync(geometry, _pointSymbol.MakeSymbolReference());
    
                }
    
                return true;
    
            }
    
    
    
            protected override Task OnToolDeactivateAsync(bool hasMapViewChanged)
    
            {
    
                if (_graphic != null) _graphic.Dispose();//Clear out the old overlay
    
                _graphic = null;
    
                return base.OnToolDeactivateAsync(hasMapViewChanged);
    
            }
    
    
    
            internal static Task<CIMPointSymbol> CreatePointSymbolAsync()
    
            {
    
                return QueuedTask.Run(() => SymbolFactory.Instance.ConstructPointSymbol(ColorFactory.Instance.RedRGB, 14, SimpleMarkerStyle.Circle));
    
            }
    
    
    
        }
    
    
    }
  • 相关阅读:
    CSS实现简易相册方法
    php乱码问题
    javascript 面向对象程序设计 模式 随笔
    php 关闭notice级别的提示
    javascript var散布问题
    CSS实现简易幻灯片功能
    Asp.net单点登录解决方案
    把你的电脑,变成无线路由器(图文教程)
    开发中常见问题解决
    MVC 将IList<T>导出Excel文档的泛型类(继承自ActionResult)
  • 原文地址:https://www.cnblogs.com/gisoracle/p/12464336.html
Copyright © 2011-2022 走看看