You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							189 lines
						
					
					
						
							7.2 KiB
						
					
					
				
			
		
		
	
	
							189 lines
						
					
					
						
							7.2 KiB
						
					
					
				using ESRI.ArcGIS.Carto; | 
						|
using ESRI.ArcGIS.Controls; | 
						|
using ESRI.ArcGIS.Display; | 
						|
using ESRI.ArcGIS.Geometry; | 
						|
using KGIS.Framework.Maps; | 
						|
using KGIS.Framework.Utils.Helper; | 
						|
using System; | 
						|
using System.Collections.Generic; | 
						|
using System.ComponentModel; | 
						|
using System.Data; | 
						|
using System.Drawing; | 
						|
using System.Linq; | 
						|
using System.Text; | 
						|
using System.Threading.Tasks; | 
						|
using System.Windows.Forms; | 
						|
 | 
						|
namespace Kingo.Plugin.MapView | 
						|
{ | 
						|
    public partial class UcAerialView : UserControl | 
						|
    { | 
						|
        AxMapControl axMapControl1 = null; | 
						|
        private bool initialZT = false; | 
						|
        public UcAerialView() | 
						|
        { | 
						|
            InitializeComponent(); | 
						|
            //MapsManager.Instance.MapService.getAxMapControl().OnMapReplaced += UcAerialView_OnMapReplaced; | 
						|
            MapsManager.Instance.MapService.getAxMapControl().OnExtentUpdated += UcAerialView_OnExtentUpdated; | 
						|
            MapsManager.Instance.MapService.ProjectOpened += MapService_ProjectOpened; | 
						|
            MapsManager.Instance.MapService.ProjectClosed += MapService_ProjectClosed; | 
						|
        } | 
						|
        public void InitView(ILayer layer) | 
						|
        { | 
						|
            axMapControl1 = MapsManager.Instance.MapService.getAxMapControl() as AxMapControl; | 
						|
            if (axMapControl1.LayerCount > 0) | 
						|
            { | 
						|
                axMapControl.Map = new MapClass(); | 
						|
                //for (int i = 0; i <= axMapControl1.Map.LayerCount - 1; i++) | 
						|
                //{ | 
						|
                //    axMapControl.AddLayer(axMapControl1.get_Layer(i)); | 
						|
                //} | 
						|
                if ((layer as IFeatureLayer).Visible == false) | 
						|
                { | 
						|
                    (layer as IFeatureLayer).Visible = true; | 
						|
                    initialZT = true; | 
						|
                } | 
						|
                if (layer != null) | 
						|
                    axMapControl.AddLayer(layer); | 
						|
                axMapControl.SpatialReference = axMapControl1.SpatialReference; | 
						|
                axMapControl.Extent = layer.AreaOfInterest; | 
						|
                axMapControl.Refresh(); | 
						|
                 | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        private void MapService_ProjectClosed(object sender, EventArgs e) | 
						|
        { | 
						|
            if (axMapControl != null) | 
						|
                axMapControl.ClearLayers(); | 
						|
        } | 
						|
 | 
						|
        private void MapService_ProjectOpened(object sender, KGIS.Framework.Maps.Handlers.ProjectArgs args) | 
						|
        { | 
						|
            if (axMapControl == null) return; | 
						|
            AxMapControl axMapControl1 = MapsManager.Instance.MapService.getAxMapControl() as AxMapControl; | 
						|
            if (axMapControl1.LayerCount > 0) | 
						|
            { | 
						|
                axMapControl.Map = new MapClass(); | 
						|
                //for (int i = 0; i <= axMapControl1.Map.LayerCount - 1; i++) | 
						|
                //{ | 
						|
                ILayer layer = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("行政区"); | 
						|
                if (layer != null) | 
						|
                    axMapControl.AddLayer(layer); | 
						|
                //} | 
						|
                axMapControl.SpatialReference = axMapControl1.SpatialReference; | 
						|
 | 
						|
                axMapControl.Extent = layer.AreaOfInterest; | 
						|
                axMapControl.Refresh(); | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        public void Close(ILayer layer) | 
						|
        { | 
						|
            MapsManager.Instance.MapService.ProjectOpened -= MapService_ProjectOpened; | 
						|
            //MapsManager.Instance.MapService.getAxMapControl().OnMapReplaced -= UcAerialView_OnMapReplaced; | 
						|
            MapsManager.Instance.MapService.getAxMapControl().OnExtentUpdated -= UcAerialView_OnExtentUpdated; | 
						|
            if (initialZT == true) (layer as IFeatureLayer).Visible = false; | 
						|
            axMapControl.ClearLayers(); | 
						|
            axMapControl.Dispose(); | 
						|
            axMapControl = null; | 
						|
            this.Dispose(); | 
						|
        } | 
						|
 | 
						|
        private void UcAerialView_OnExtentUpdated(object sender, IMapControlEvents2_OnExtentUpdatedEvent e) | 
						|
        { | 
						|
            // 得到新范围 | 
						|
            IEnvelope pEnvelope = (IEnvelope)e.newEnvelope; | 
						|
 | 
						|
            IGraphicsContainer pGraphicsContainer = axMapControl.Map as IGraphicsContainer; | 
						|
 | 
						|
            IActiveView pActiveView = pGraphicsContainer as IActiveView; | 
						|
 | 
						|
            //在绘制前,清除axMapControl2中的任何图形元素  | 
						|
            pGraphicsContainer.DeleteAllElements(); | 
						|
 | 
						|
            IRectangleElement pRectangleEle = new RectangleElementClass(); | 
						|
            IElement pElement = pRectangleEle as IElement; | 
						|
            pElement.Geometry = pEnvelope; | 
						|
 | 
						|
            //设置鹰眼图中的红线框 | 
						|
 | 
						|
            IRgbColor pColor = new RgbColorClass(); | 
						|
            pColor.Red = 255; | 
						|
            pColor.Green = 0; | 
						|
            pColor.Blue = 0; | 
						|
            pColor.Transparency = 255; | 
						|
 | 
						|
            //产生一个线符号对象 | 
						|
 | 
						|
            ILineSymbol pOutline = new SimpleLineSymbolClass(); | 
						|
            pOutline.Width = 3; | 
						|
            pOutline.Color = pColor; | 
						|
 | 
						|
            //设置颜色属性 | 
						|
 | 
						|
            pColor = new RgbColorClass(); | 
						|
            pColor.Red = 255; | 
						|
            pColor.Green = 0; | 
						|
            pColor.Blue = 0; | 
						|
            pColor.Transparency = 0; | 
						|
 | 
						|
            //设置填充符号的属性 | 
						|
 | 
						|
            IFillSymbol pFillSymbol = new SimpleFillSymbolClass(); | 
						|
            pFillSymbol.Color = pColor; | 
						|
            pFillSymbol.Outline = pOutline; | 
						|
            IFillShapeElement pFillShapeEle = pElement as IFillShapeElement; | 
						|
            pFillShapeEle.Symbol = pFillSymbol; | 
						|
            pGraphicsContainer.AddElement((IElement)pFillShapeEle, 0); | 
						|
 | 
						|
            pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); | 
						|
        } | 
						|
 | 
						|
        //private void UcAerialView_OnMapReplaced(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMapReplacedEvent e) | 
						|
        //{ | 
						|
        //    AxMapControl axMapControl1 = sender as AxMapControl; | 
						|
        //    if (axMapControl1.LayerCount > 0) | 
						|
        //    { | 
						|
        //        axMapControl.Map = new MapClass(); | 
						|
        //        for (int i = 0; i <= axMapControl1.Map.LayerCount - 1; i++) | 
						|
        //        { | 
						|
        //            axMapControl.AddLayer(axMapControl1.get_Layer(i)); | 
						|
        //        } | 
						|
        //        axMapControl.Extent = axMapControl1.Extent; | 
						|
        //        axMapControl.Refresh(); | 
						|
        //    } | 
						|
        //} | 
						|
 | 
						|
        private void axMapControl_OnMouseMove(object sender, IMapControlEvents2_OnMouseMoveEvent e) | 
						|
        { | 
						|
            if (e.button == 1) | 
						|
            { | 
						|
                IPoint pPoint = new PointClass(); | 
						|
                pPoint.PutCoords(e.mapX, e.mapY); | 
						|
                axMapControl1.CenterAt(pPoint); | 
						|
                axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        private void axMapControl_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e) | 
						|
        { | 
						|
            if (axMapControl.Map.LayerCount > 0) | 
						|
            { | 
						|
                if (e.button == 1) | 
						|
                { | 
						|
                    IPoint pPoint = new PointClass(); | 
						|
                    pPoint.PutCoords(e.mapX, e.mapY); | 
						|
                    axMapControl1.CenterAt(pPoint); | 
						|
                    axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); | 
						|
                } | 
						|
                else if (e.button == 2) | 
						|
                { | 
						|
                    IEnvelope pEnv = axMapControl.TrackRectangle(); | 
						|
                    axMapControl1.Extent = pEnv; | 
						|
                    axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); | 
						|
                } | 
						|
            } | 
						|
        } | 
						|
    } | 
						|
}
 | 
						|
 |