• 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));
    
            }
    
    
    
        }
    
    
    }
  • 相关阅读:
    arm基础
    数据的封装
    网络安全基础
    qt5学习笔记
    nginx修改配置
    proteus_base1
    20191022
    20191015
    20191014
    20191013
  • 原文地址:https://www.cnblogs.com/gisoracle/p/12464336.html
Copyright © 2020-2023  润新知