首页 > 其他 > 详细

ArcGIS Pro二次开发-在地图上插入一个点

时间:2020-03-11 20:13:30      阅读:68      评论:0      收藏:0      [点我收藏+]
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));

        }



    }


}

 

ArcGIS Pro二次开发-在地图上插入一个点

原文:https://www.cnblogs.com/gisoracle/p/12464336.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!