C# AE放大缩小地图全局显示功能
生活随笔
收集整理的這篇文章主要介紹了
C# AE放大缩小地图全局显示功能
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
基于ArcGIS Base Command模板放大縮小
[地址]http://blog.csdn.net/eof_2011/article/details/8014075
?既能拉框也能點(diǎn)擊放大縮小,原作者寫的非常好收藏了。
基于ESRI.ArcGIS.Controls命名空間
這種esriControlsMousePointer方式實(shí)現(xiàn)的放大縮小只能拉框不能點(diǎn)擊
放大
//寫在功能按鈕中axMapControl1.MousePointer=esriControlsMousePointer.esriPointerZoomIn;
flag= a number //以flag number來判斷 //寫在OnMouseDown之類的事件中 下同
IEnvelope pEnvelope = axMapControl1.TrackRectangle(); axMapControl1.Extent = pEnvelope ;
縮小
axMapControl1.MousePointer = esriControlsMousePointer.esriPointerZoomOut;pEnvelope = axMapControl1.TrackRectangle(); pEnvelope = axMapControl1.Extent; pEnvelope .Expand(2, 2, true); axMapControl1.Extent = pEnvelope ;
漫游
axMapControl1.MousePointer = esriControlsMousePointer.esriPointerPan;pEnvelope = axMapControl1.Extent; axMapControl1.Pan();
全局顯示
axMapControl1.Extent = axMapControl1.FullExtent;Tips:
可以根據(jù)flag來if判斷寫何種類型操作之后的代碼
?基于IEnvolope的Expand方法
這種方法只能拉框放大
private void Zoom_Out(AxMapControl map) {var _map = axMapControl1;_map.Extent = _map.FullExtent;IEnvelope pEnvelope = null;pEnvelope = _map.Extent;pEnvelope.Expand(0.5, 0.5, true);_map.Extent = pEnvelope;//_map.MousePointer = esriControlsMousePointer.esriPointerDefault; _map.ActiveView.Refresh();}//ZoomIn放大private void Zoom_In(){IActiveView pAtView = axMapControl1.ActiveView;IPoint centerPoint = new PointClass();centerPoint.PutCoords((pAtView.Extent.XMin + pAtView.Extent.XMax) * 2, (pAtView.Extent.YMax + pAtView.Extent.YMin) * 2);IEnvelope pEnvlope = pAtView.Extent;pEnvlope.Expand(1.5, 1.5, true); 與放大的區(qū)別在于參數(shù)不同pAtView.Extent.CenterAt(centerPoint);pAtView.Extent = pEnvlope;pAtView.Refresh();}?基于IEnvolope的Expand方法還有下面寫法。
//這些寫在放大按鈕事件里 Property.axMapControl.CurrentTool = null; pMouseOperate = "ZoomIn"; Property.axMapControl.MousePointer = esriControlsMousePointer.esriPointerZoomIn; //同理 縮小的mainMapControl.CurrentTool = null; pMouseOperate = "ZoomOut"; mainMapControl.MousePointer = esriControlsMousePointer.esriPointerZoomOut;//這些方法axMapControl中鼠標(biāo)按下事件中 //屏幕坐標(biāo)點(diǎn)轉(zhuǎn)化為地圖坐標(biāo)點(diǎn) pPointPt = (mainMapControl.Map as IActiveView).ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y);if (e.button == 1) {IActiveView pActiveView = mainMapControl.ActiveView;IEnvelope pEnvelope = new EnvelopeClass();switch (pMouseOperate){#region 拉框放大case "ZoomIn":pEnvelope = mainMapControl.TrackRectangle();//如果拉框范圍為空則返回if (pEnvelope == null || pEnvelope.IsEmpty || pEnvelope.Height == 0 || pEnvelope.Width == 0){return;}//如果有拉框范圍,則放大到拉框范圍pActiveView.Extent = pEnvelope;pActiveView.Refresh();break;#endregion#region 拉框縮小case "ZoomOut":pEnvelope = mainMapControl.TrackRectangle();//如果拉框范圍為空則退出if (pEnvelope == null || pEnvelope.IsEmpty || pEnvelope.Height == 0 || pEnvelope.Width == 0){return;}//如果有拉框范圍,則以拉框范圍為中心,縮小倍數(shù)為:當(dāng)前視圖范圍/拉框范圍else{double dWidth = pActiveView.Extent.Width*pActiveView.Extent.Width/pEnvelope.Width;double dHeight = pActiveView.Extent.Height*pActiveView.Extent.Height/pEnvelope.Height;double dXmin = pActiveView.Extent.XMin -((pEnvelope.XMin - pActiveView.Extent.XMin)*pActiveView.Extent.Width/pEnvelope.Width);double dYmin = pActiveView.Extent.YMin -((pEnvelope.YMin - pActiveView.Extent.YMin)*pActiveView.Extent.Height/pEnvelope.Height);double dXmax = dXmin + dWidth;double dYmax = dYmin + dHeight;pEnvelope.PutCoords(dXmin, dYmin, dXmax, dYmax);}pActiveView.Extent = pEnvelope;pActiveView.Refresh();break;#endregion} }
?
轉(zhuǎn)載于:https://www.cnblogs.com/marvelousone/p/8039031.html
總結(jié)
以上是生活随笔為你收集整理的C# AE放大缩小地图全局显示功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单调栈单调队列入门
- 下一篇: 03.openssl-获得支持加密算法