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.
		
		
		
		
		
			
		
			
				
					
					
						
							371 lines
						
					
					
						
							16 KiB
						
					
					
				
			
		
		
	
	
							371 lines
						
					
					
						
							16 KiB
						
					
					
				using ESRI.ArcGIS.Carto; | 
						|
using ESRI.ArcGIS.Controls; | 
						|
using ESRI.ArcGIS.Display; | 
						|
using ESRI.ArcGIS.esriSystem; | 
						|
using ESRI.ArcGIS.Geometry; | 
						|
using KGIS.Framework.Core.Services; | 
						|
using KGIS.Framework.DBOperator; | 
						|
using KGIS.Framework.Maps; | 
						|
using KGIS.Framework.Platform; | 
						|
using KGIS.Framework.Utils; | 
						|
using KGIS.Framework.Utils.Helper; | 
						|
using KGIS.Framework.Utils.Utility; | 
						|
using Kingo.PluginServiceInterface.Helper; | 
						|
using System; | 
						|
using System.Collections.Generic; | 
						|
using System.Data; | 
						|
using System.IO; | 
						|
using System.Windows; | 
						|
using System.Windows.Forms; | 
						|
using UserControl = System.Windows.Controls.UserControl; | 
						|
 | 
						|
namespace Kingo.Plugin.SystemSetting.View.ViewSystemSetting | 
						|
{ | 
						|
    /// <summary> | 
						|
    /// ViewAuthoriza.xaml 的交互逻辑 | 
						|
    /// </summary> | 
						|
    public partial class ViewAuthoriza : UserControl | 
						|
    { | 
						|
        private AxMapControl mapControl = null; | 
						|
        KGIS.Framework.Core.Services.RunIDService2 SQInfo = null; | 
						|
        public static IGeometryFactory3 GeometryFactory3 { get; set; } | 
						|
        public ViewAuthoriza() | 
						|
        { | 
						|
            InitializeComponent(); | 
						|
            InitData(); | 
						|
        } | 
						|
        public void InitData() | 
						|
        { | 
						|
            SQInfo = RunIDService2.Instance; | 
						|
            txtXZQ.Text = GetXZQDic(SQInfo.Codes).ToString(); | 
						|
            txtJZSJ.Text = SQInfo.ExpirationTime.ToString(); | 
						|
 | 
						|
            Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "UpdatedTime" }); | 
						|
        } | 
						|
 | 
						|
        private void DispalySQ_Click(object sender, RoutedEventArgs e) | 
						|
        { | 
						|
            IGeometry geo = null; | 
						|
            try | 
						|
            { | 
						|
                geo = AuthorizationVerification.DrawAuthorizationRange(MapsManager.Instance.MapService.getAxMapControl().SpatialReference); | 
						|
                if (geo != null && !geo.IsEmpty) | 
						|
                { | 
						|
                    if (mapControl == null || mapControl.ActiveView == null || mapControl.ActiveView.GraphicsContainer == null) | 
						|
                        mapControl = MapsManager.Instance.MapService.getAxMapControl() as AxMapControl; | 
						|
                    mapControl.ActiveView.GraphicsContainer.DeleteAllElements(); | 
						|
                    mapControl.Refresh(); | 
						|
 | 
						|
                    //DrawPolygonElement(geo, "授权范围"); | 
						|
                    DrawBaseGraph(geo, 150, 150, 150); | 
						|
                    AreaEnvOfeat(geo); | 
						|
 | 
						|
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(mapControl.ActiveView.GraphicsContainer); | 
						|
                } | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                LogAPI.Debug("执行显示授权异常:" + ex.Message); | 
						|
                LogAPI.Debug("执行显示授权异常:" + ex.StackTrace); | 
						|
            } | 
						|
        } | 
						|
        public string GetXZQDic(List<string> Codes) | 
						|
        { | 
						|
            IRDBHelper rdbHelper = null; | 
						|
            string SQXZQs = string.Empty; | 
						|
            try | 
						|
            { | 
						|
                string systemPath = SysAppPath.GetDataBasePath() + "System.mdb"; | 
						|
                if (File.Exists(systemPath)) | 
						|
                { | 
						|
                    string connStr = SysConfigsOprator.GetDBConnectionByName("MDBOledbConnection"); | 
						|
                    connStr = string.Format(connStr, systemPath); | 
						|
                    rdbHelper = RDBFactory.CreateDbHelper(connStr, DatabaseType.MSAccess); | 
						|
                    string strPrWhere = "1=2"; | 
						|
                    string strWhere = string.Empty; | 
						|
                    if (Codes != null) | 
						|
                    { | 
						|
                        foreach (var item in Codes) | 
						|
                        { | 
						|
                            if (item.IndexOf("00") == 4) | 
						|
                                strWhere += string.Format(" or XZQ Like '{0}%'", item.Replace("00", "")); | 
						|
                            else if (item.IndexOf("0000") == 2) | 
						|
                                strWhere += string.Format(" or XZQ Like '{0}%'", item.Replace("0000", "")); | 
						|
                            else | 
						|
                                strWhere += string.Format(" or XZQ Like '{0}%'", item); | 
						|
                        } | 
						|
                    } | 
						|
                    if (!string.IsNullOrWhiteSpace(strWhere)) | 
						|
                        strWhere = strPrWhere + strWhere; | 
						|
                    else | 
						|
                        strWhere = "1=1"; | 
						|
                    string strSQL = "select OBJECTID AS ID, XZQ AS CODE,XZQMC AS NAME from XZQ Where " + strWhere + ""; | 
						|
                    DataTable dt = rdbHelper.ExecuteDatatable("Dic", strSQL, true); | 
						|
                    if (dt != null) | 
						|
                    { | 
						|
                        foreach (var item in TBToList.ToList<DataDicTionary>(dt)) | 
						|
                        { | 
						|
                            SQXZQs += string.Format("{0}({1}),", item.NAME, item.CODE); | 
						|
                        } | 
						|
                        SQXZQs.Trim(','); | 
						|
                    } | 
						|
                } | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                LogAPI.Debug(ex); | 
						|
            } | 
						|
            finally | 
						|
            { | 
						|
                if (rdbHelper != null) | 
						|
                    rdbHelper.DisConnect(); | 
						|
            } | 
						|
            if (!string.IsNullOrWhiteSpace(SQXZQs) && SQXZQs.Split(',').Length >= 2800) | 
						|
                return "全国"; | 
						|
            else | 
						|
                return SQXZQs.Trim(','); | 
						|
        } | 
						|
        public void AreaEnvOfeat(IGeometry geometry) | 
						|
        { | 
						|
            try | 
						|
            { | 
						|
                mapControl = MapsManager.Instance.MapService.getAxMapControl() as AxMapControl; | 
						|
                EnvelopeClass pEnvelope = new EnvelopeClass(); | 
						|
                IEnvelope pEnvOfFeat = geometry.Envelope; | 
						|
                //投影到当前地图坐标系定位缩放到当前要素  | 
						|
                pEnvOfFeat.Project(mapControl.SpatialReference); | 
						|
                IUnitConverter pUnitConverter = new UnitConverterClass(); | 
						|
                double dScale = pUnitConverter.ConvertUnits(50, esriUnits.esriMeters, mapControl.MapUnits); | 
						|
                pEnvelope.PutCoords(pEnvOfFeat.XMin - dScale, pEnvOfFeat.YMin - dScale, pEnvOfFeat.XMax + dScale, pEnvOfFeat.YMax + dScale); | 
						|
                mapControl.ActiveView.Extent = pEnvelope; | 
						|
                mapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, mapControl.ActiveView.Extent); | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                MessageHelper.ShowError("操作异常!异常信息:" + ex.Message); | 
						|
                LogAPI.Debug(ex); | 
						|
            } | 
						|
        } | 
						|
        private void DrawPolygonElement(IGeometry pGeo, string pName) | 
						|
        { | 
						|
            ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass | 
						|
            { | 
						|
                Style = esriSimpleFillStyle.esriSFSNull | 
						|
            }; | 
						|
            //设置线宽和线的颜色 | 
						|
            ISimpleLineSymbol pLineSymbol = new SimpleLineSymbolClass | 
						|
            { | 
						|
                Color = Symbol.GetRGBColor(255, 0, 0), | 
						|
                Width = 2 | 
						|
            }; | 
						|
            pSimpleFillSymbol.Outline = pLineSymbol; | 
						|
            PolygonElementClass element = new PolygonElementClass | 
						|
            { | 
						|
                Name = pName, | 
						|
                Symbol = pSimpleFillSymbol, | 
						|
                Geometry = pGeo | 
						|
            }; | 
						|
            IGraphicsLayer grapLayer = AddSubGraphicsLayer("TempSQFWGrapLayer"); | 
						|
            (grapLayer as IGraphicsContainer).AddElement(element, 0); | 
						|
            MapsManager.Instance.MapService.getAxMapControl().ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, MapsManager.Instance.MapService.getAxMapControl().ActiveView.Extent); | 
						|
        } | 
						|
        public IGraphicsLayer AddSubGraphicsLayer(string subgraphicsLayername) | 
						|
        { | 
						|
            ICompositeGraphicsLayer pCompositeGLayer = MapsManager.Instance.MapService.getAxMapControl().Map.BasicGraphicsLayer as ICompositeGraphicsLayer; | 
						|
            IGraphicsLayer pGLayer = null; | 
						|
            try | 
						|
            { | 
						|
                //查找是否已存在,如果不存在,跳转到catch内容. | 
						|
                //如果查到不到,说明集合中并没有指定名称的graphicslayer | 
						|
                pGLayer = pCompositeGLayer.FindLayer(subgraphicsLayername); | 
						|
            } | 
						|
            catch | 
						|
            { | 
						|
                //若不存在,则添加一个指定名称的GraphicsLayer | 
						|
                pGLayer = pCompositeGLayer.AddLayer(subgraphicsLayername, null); | 
						|
            } | 
						|
            return pGLayer; | 
						|
        } | 
						|
 | 
						|
        private void DispalyGH_Click(object sender, RoutedEventArgs e) | 
						|
        { | 
						|
            try | 
						|
            { | 
						|
                KGIS.PlatformPlugin.Views.License.LicenseView lic = new KGIS.PlatformPlugin.Views.License.LicenseView(null, "KGIS_SJJK", "400", "4x"); | 
						|
                DialogResult dialog = lic.ShowDialog(); | 
						|
                if (dialog == DialogResult.Yes || dialog == DialogResult.OK) | 
						|
                { | 
						|
                    InitData(); | 
						|
 | 
						|
                    IGeometry geo = null; | 
						|
                    geo = AuthorizationVerification.DrawAuthorizationRange(MapsManager.Instance.MapService.getAxMapControl().SpatialReference); | 
						|
                    if (geo != null && !geo.IsEmpty) | 
						|
                    { | 
						|
                        if (mapControl == null || mapControl.ActiveView == null || mapControl.ActiveView.GraphicsContainer == null) | 
						|
                            mapControl = MapsManager.Instance.MapService.getAxMapControl() as AxMapControl; | 
						|
                        mapControl.ActiveView.GraphicsContainer.DeleteAllElements(); | 
						|
                        mapControl.Refresh(); | 
						|
 | 
						|
                        //DrawPolygonElement(geo, "授权范围"); | 
						|
                        DrawBaseGraph(geo, 150, 150, 150); | 
						|
                        AreaEnvOfeat(geo); | 
						|
 | 
						|
                        System.Runtime.InteropServices.Marshal.ReleaseComObject(mapControl.ActiveView.GraphicsContainer); | 
						|
                    } | 
						|
                } | 
						|
 | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                LogAPI.Debug("执行更换授权异常:" + ex.Message); | 
						|
                LogAPI.Debug("执行更换授权异常:" + ex.StackTrace); | 
						|
            } | 
						|
        } | 
						|
 | 
						|
 | 
						|
        public IElement DrawBaseGraph(IGeometry geoDraw, int R = 255, int G = 0, int B = 0) | 
						|
        { | 
						|
            try | 
						|
            { | 
						|
                IElement result = null; | 
						|
                IGraphicsContainer iGraphicsContainer = null; | 
						|
                IElement CameraPointElm = null; | 
						|
                IGraphicsContainer graphicsContainer = mapControl.ActiveView.GraphicsContainer; | 
						|
                graphicsContainer.Reset();  | 
						|
                while ((CameraPointElm = graphicsContainer.Next()) != null) | 
						|
                { | 
						|
                    if ((CameraPointElm as IElementProperties).Name == "BaseElement") | 
						|
                        break; | 
						|
                } | 
						|
                if (CameraPointElm == null) | 
						|
                { | 
						|
                    CameraPointElm = new GroupElementClass(); | 
						|
                    (CameraPointElm as IElementProperties).Name = "BaseElement"; | 
						|
                    mapControl.ActiveView.GraphicsContainer.AddElement(CameraPointElm, 2); | 
						|
                } | 
						|
                    (CameraPointElm as IGroupElement).ClearElements(); | 
						|
                if (geoDraw == null) return null; | 
						|
 | 
						|
                //替换Env改动---无用 | 
						|
                //IMapControl2 axMapDraw = Env.Instance.KMap.HookHelper.Hook as IMapControl2; | 
						|
 | 
						|
                // 获取IRGBColor接口 | 
						|
                IRgbColor color = new RgbColor(); | 
						|
                // 设置颜色属性 | 
						|
                color.Red = R; | 
						|
                color.Green = G; | 
						|
                color.Blue = B; | 
						|
                switch (geoDraw.GeometryType) | 
						|
                { | 
						|
                    case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint: | 
						|
                        result = new MarkerElementClass(); | 
						|
                        IMarkerSymbol symbol = new SimpleMarkerSymbolClass(); | 
						|
                        symbol.Color = color; | 
						|
                        symbol.Size = 10; | 
						|
                        (result as IMarkerElement).Symbol = symbol; | 
						|
                        result.Geometry = geoDraw; | 
						|
                        break; | 
						|
                    case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon: | 
						|
                        result = new KGIS.Framework.Maps.PolygonElement() { Opacity = 100 }; | 
						|
                        // 获取ILine符号接口 | 
						|
                        ILineSymbol lineSymbol = new SimpleLineSymbol(); | 
						|
                        // 设置线符号属 | 
						|
                        lineSymbol.Width = 2; | 
						|
                        ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbolClass(); | 
						|
                        simpleFillSymbol.Color = color; | 
						|
                        IRgbColor colorLine = new RgbColor(); | 
						|
                        colorLine.Red = 0; | 
						|
                        colorLine.Green = 0; | 
						|
                        colorLine.Blue = 0; | 
						|
                        lineSymbol.Color = colorLine; | 
						|
                        // 设置填充符号属性 | 
						|
                        simpleFillSymbol.Outline = lineSymbol; | 
						|
                        simpleFillSymbol.Style = ESRI.ArcGIS.Display.esriSimpleFillStyle.esriSFSSolid;//esriSimpleFillStyle.esriSFSSolid; | 
						|
                        (result as IFillShapeElement).Symbol = simpleFillSymbol; | 
						|
                        result.Geometry = geoDraw; | 
						|
                        break; | 
						|
                    case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline: | 
						|
                        result = new LineElementClass(); | 
						|
                        // 获取ILine符号接口 | 
						|
                        ILineSymbol outline = new SimpleLineSymbol(); | 
						|
                        // 设置线符号属 | 
						|
                        outline.Width = 3; | 
						|
                        outline.Color = color; | 
						|
                        (outline as SimpleLineSymbol).Style = ESRI.ArcGIS.Display.esriSimpleLineStyle.esriSLSSolid; | 
						|
                        (result as ILineElement).Symbol = outline; | 
						|
                        result.Geometry = geoDraw; | 
						|
                        break; | 
						|
                    default: | 
						|
                        break; | 
						|
                } | 
						|
                (CameraPointElm as IGroupElement).AddElement(result); | 
						|
                iGraphicsContainer?.AddElement(result, 0); | 
						|
                mapControl.ActiveView.Refresh(); | 
						|
                return result; | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                LogAPI.Debug("执行DrawGraph方法时异常:" + ex); | 
						|
                return null; | 
						|
            } | 
						|
        } | 
						|
 | 
						|
 | 
						|
 | 
						|
    } | 
						|
    public enum EnumSymbolType | 
						|
    { | 
						|
        SimpleMarkerSymbol, | 
						|
        SimpleLineSymbol, | 
						|
        SimpleFillSymbol, | 
						|
        FormattedTextSymbol | 
						|
    } | 
						|
    public class Symbol | 
						|
    { | 
						|
        public static ISymbol CreateDefaultSymbol(EnumSymbolType pSymbolType) | 
						|
        { | 
						|
            ISymbol symbol = null; | 
						|
            IRgbColor color = new RgbColorClass(); | 
						|
            color = GetRGBColor(0xff, 0, 0); | 
						|
            switch (pSymbolType) | 
						|
            { | 
						|
                case EnumSymbolType.SimpleMarkerSymbol: | 
						|
                    return symbol; | 
						|
 | 
						|
                case EnumSymbolType.SimpleLineSymbol: | 
						|
                    { | 
						|
                        ISimpleLineSymbol symbol2 = new SimpleLineSymbolClass(); | 
						|
                        symbol2.Color = color; | 
						|
                        symbol2.Width = 1.5; | 
						|
                        return (ISymbol)symbol2; | 
						|
                    } | 
						|
                case EnumSymbolType.SimpleFillSymbol: | 
						|
                    { | 
						|
                        ISimpleFillSymbol symbol3 = new SimpleFillSymbolClass(); | 
						|
                        symbol3.Outline.Color = color; | 
						|
                        symbol3.Color = color; | 
						|
                        symbol3.Style = esriSimpleFillStyle.esriSFSDiagonalCross; | 
						|
                        return (ISymbol)symbol3; | 
						|
                    } | 
						|
            } | 
						|
            return symbol; | 
						|
        } | 
						|
 | 
						|
 | 
						|
        public static IRgbColor GetRGBColor(int pRed, int pGreen, int pBlue) | 
						|
        { | 
						|
            try | 
						|
            { | 
						|
                IRgbColor color = new RgbColorClass(); | 
						|
                color.Red = pRed; | 
						|
                color.Green = pGreen; | 
						|
                color.Blue = pBlue; | 
						|
                return color; | 
						|
            } | 
						|
            catch | 
						|
            { | 
						|
                return null; | 
						|
            } | 
						|
        } | 
						|
    } | 
						|
}
 | 
						|
 |