C# AE放大縮小地圖全局顯示功能


基於ArcGIS Base Command模板放大縮小

[地址]http://blog.csdn.net/eof_2011/article/details/8014075

 既能拉框也能點擊放大縮小,原作者寫的非常好收藏了。

基於ESRI.ArcGIS.Controls命名空間

這種esriControlsMousePointer方式實現的放大縮小只能拉框不能點擊

放大

//寫在功能按鈕中
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:

可以根據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); 與放大的區別在於參數不同
     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中鼠標按下事件中
//屏幕坐標點轉化為地圖坐標點
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;
			}
				//如果有拉框范圍,則以拉框范圍為中心,縮小倍數為:當前視圖范圍/拉框范圍
			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
	}
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM