ArcGIS Pro使用键盘控制地图平移
/* Copyright 2019 Esri Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Input; using ArcGIS.Core.CIM; using ArcGIS.Desktop.Framework.Threading.Tasks; using ArcGIS.Desktop.Mapping; 关注微信公众号,学习更多namespace BasicMapTool { internal class BasicMapTool : MapTool { private bool _zMode = false; public BasicMapTool() : base() { this.OverlayControlID = "BasicMapTool_BasicEmbeddableControl"; //Embeddable control can be resized OverlayControlCanResize = true; //Specify ratio of 0 to 1 to place the control OverlayControlPositionRatio = new System.Windows.Point(0, 0); //top left } protected override Task OnToolActivateAsync(bool active) { return base.OnToolActivateAsync(active); } protected override void OnToolKeyDown(MapViewKeyEventArgs k) { //We will do some basic key handling to allow panning //from the arrow keys if (k.Key == Key.Left || k.Key == Key.Right || k.Key == Key.Up || k.Key == Key.Down) k.Handled = true; base.OnToolKeyDown(k); } protected override Task HandleKeyDownAsync(MapViewKeyEventArgs k) { var camera = MapView.Active.Camera; double dx = MapView.Active.Extent.Width / 20; double dy = MapView.Active.Extent.Height / 20; double dz = 20.0;//20 meters vertical change per key stroke bool shiftKey = (Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift; //When in 3D mode use the Shift key to switch from "Y" position change //which is 'Up','Down' in 2D but is 'forward','back' in 3D to //"Z" position change which is 'Up','Down' in 3D if (!_zMode && ActiveMapView.ViewingMode != MapViewingMode.Map) _zMode = shiftKey; switch (k.Key) { case Key.Left: camera.X -= dx; break; case Key.Right: camera.X += dx; break; case Key.Up: if (_zMode) { camera.Z += dz; } else { camera.Y += dy; } break; case Key.Down: if (_zMode) { camera.Z -= dz; } else { camera.Y -= dy; } break; } return MapView.Active.ZoomToAsync(camera, new TimeSpan(0, 0, 0, 0, 250)); } protected override void OnToolKeyUp(MapViewKeyEventArgs k) { _zMode = false; base.OnToolKeyUp(k); } protected override void OnToolMouseDown(MapViewMouseButtonEventArgs e) { //On mouse down check if the mouse button pressed is the left mouse button. If it is handle the event. if (e.ChangedButton == System.Windows.Input.MouseButton.Left) e.Handled = true; } protected override Task HandleMouseDownAsync(MapViewMouseButtonEventArgs e) { //Get the instance of the ViewModel var vm = OverlayEmbeddableControl as BasicEmbeddableControlViewModel; if (vm == null) return Task.FromResult(0); //Get the map coordinates from the click point and set the property on the ViewModel. return QueuedTask.Run(() => { var mapPoint = MapView.Active.ClientToMap(e.ClientPoint); var sb = new StringBuilder(); sb.AppendLine(string.Format("X: {0}", mapPoint.X)); sb.Append(string.Format("Y: {0}", mapPoint.Y)); if (mapPoint.HasZ) { sb.AppendLine(); sb.Append(string.Format("Z: {0}", mapPoint.Z)); } vm.Text = sb.ToString(); }); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2020-03-09 arcgis pro2.5 改变地图范围
2019-03-09 勘测定界软件2.5升级了,打印表格可以隐藏列,界址点成果表可以中间带环
2016-03-09 andriod 带看括弧的计算器
2016-03-09 andriod 动态显示当前时间
2016-03-09 andriod GridView
2016-03-09 android ImageSwitcher
2016-03-09 andriod Spinner