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.
		
		
		
		
		
			
		
			
				
					
					
						
							528 lines
						
					
					
						
							25 KiB
						
					
					
				
			
		
		
	
	
							528 lines
						
					
					
						
							25 KiB
						
					
					
				using ESRI.ArcGIS.Controls; | 
						|
using ESRI.ArcGIS.Geodatabase; | 
						|
using ESRI.ArcGIS.Geometry; | 
						|
using KGIS.Framework.AE.ExtensionMethod; | 
						|
using KGIS.Framework.Core.Services; | 
						|
using KGIS.Framework.Maps; | 
						|
using KGIS.Framework.Utils; | 
						|
using KGIS.Framework.Utils.ExtensionMethod; | 
						|
using KGIS.Framework.Utils.Helper; | 
						|
using Kingo.Core.Authorize; | 
						|
using System; | 
						|
using System.Configuration; | 
						|
using System.IO; | 
						|
using System.Text; | 
						|
using System.Windows.Forms; | 
						|
 | 
						|
namespace Kingo.PluginServiceInterface.Helper | 
						|
{ | 
						|
    //验证授权 | 
						|
    public static class AuthorizationVerification | 
						|
    { | 
						|
        #region 验证授权文件 | 
						|
        /// <summary> | 
						|
        /// 验证授权文件 | 
						|
        /// </summary> | 
						|
        /// <param name="obj"></param> | 
						|
        /// <param name="isModify">是否修改</param> | 
						|
        /// <returns></returns> | 
						|
        public static bool ValidityLic(object obj, bool isModify) | 
						|
        { | 
						|
            bool _Validity = true; | 
						|
            try | 
						|
            { | 
						|
                //判断授权方式 | 
						|
                var type = ConfigurationManager.AppSettings.Get("LicenseType"); | 
						|
                string jkrjSQ = System.IO.Path.Combine(SysAppPath.GetCurrentAppPath(), "jkrj.lic"); | 
						|
                string SQTemp = System.IO.Path.Combine(SysAppPath.GetCurrentAppPath(), "SQTemp"); | 
						|
                if (type == "F")//本地授权 | 
						|
                { | 
						|
                    if (File.Exists(jkrjSQ) && isModify) | 
						|
                    { | 
						|
                        if (Directory.Exists(SQTemp)) Directory.Delete(SQTemp, true); | 
						|
                        Directory.CreateDirectory(SQTemp); | 
						|
                        File.Copy(jkrjSQ, System.IO.Path.Combine(SQTemp, "jkrj.lic"), true); | 
						|
                        File.Delete(jkrjSQ); | 
						|
                    } | 
						|
                    try | 
						|
                    { | 
						|
                        string[] licpath = System.IO.Directory.GetFiles(System.Environment.CurrentDirectory, "*.lic", System.IO.SearchOption.TopDirectoryOnly); | 
						|
                        if (licpath.Length == 0) | 
						|
                        { | 
						|
                            MessageHelper.ShowError("授权校验失败!"); | 
						|
                        } | 
						|
                        if (licpath.Length == 0 || !RunIDService2.Instance.Verify(AuthorizeType.多合一授权, "KGIS_SJJK", "500", "5x", "", "B0FEC8F")) | 
						|
                        { | 
						|
                            KGIS.PlatformPlugin.Views.License.LicenseView lic = new KGIS.PlatformPlugin.Views.License.LicenseView(obj, "KGIS_SJJK", "500", "5x"); | 
						|
                            lic.Code = "B0FEC8F"; | 
						|
                            DialogResult dialog = lic.ShowDialog(); | 
						|
                            if (dialog != DialogResult.Yes && dialog != DialogResult.OK) | 
						|
                            { | 
						|
                                _Validity = false; | 
						|
                                if (isModify) | 
						|
                                { | 
						|
                                    File.Copy(System.IO.Path.Combine(SQTemp, "jkrj.lic"), jkrjSQ, true); | 
						|
                                    Directory.Delete(SQTemp, true); | 
						|
                                } | 
						|
                                return _Validity; | 
						|
                            } | 
						|
                        } | 
						|
                        else | 
						|
                        { | 
						|
                            _Validity = true; | 
						|
                            return _Validity; | 
						|
                        } | 
						|
                    } | 
						|
                    catch (Exception ex) | 
						|
                    { | 
						|
                        MessageHelper.Show(ex.Message); | 
						|
                        KGIS.Framework.Utils.LogAPI.Debug(ex); | 
						|
                        KGIS.PlatformPlugin.Views.License.LicenseView lic = new KGIS.PlatformPlugin.Views.License.LicenseView(obj, "KGIS_SJJK", "500", "5x"); | 
						|
                        lic.Code = "B0FEC8F"; | 
						|
                        DialogResult dialog = lic.ShowDialog(); | 
						|
                        if (dialog != DialogResult.Yes || dialog != DialogResult.OK) | 
						|
                        { | 
						|
                            _Validity = false; | 
						|
                            if (isModify) | 
						|
                            { | 
						|
                                File.Copy(System.IO.Path.Combine(SQTemp, "jkrj.lic"), jkrjSQ, true); | 
						|
                                Directory.Delete(SQTemp, true); | 
						|
                            } | 
						|
                            return _Validity; | 
						|
                        } | 
						|
                    } | 
						|
                } | 
						|
                else if (type == "D") | 
						|
                { | 
						|
                    //if (!RunIDService2.Instance.Verify("BGDCPRO", "300", "3x")) | 
						|
                    //{ | 
						|
                    //    KGIS.PlatformPlugin.Views.License.LicenseView lic = new KGIS.PlatformPlugin.Views.License.LicenseView(obj, "KGIS_SJJK", "400", "4x"); | 
						|
 | 
						|
                    //    DialogResult dialog = lic.ShowDialog(); | 
						|
                    //    if (dialog != DialogResult.Yes && dialog != DialogResult.OK) | 
						|
                    //    { | 
						|
                    //        _Validity = false; | 
						|
                    //        return _Validity; | 
						|
                    //    } | 
						|
                    //} | 
						|
                } | 
						|
                else | 
						|
                { | 
						|
                    //KGIS.PlatformPlugin.Views.License.LicenseView lic = new KGIS.PlatformPlugin.Views.License.LicenseView(obj, "KGIS_SJJK", "400", "4x"); | 
						|
                    //int num = -1; | 
						|
                    //lic.DocValidity = Validity; | 
						|
                    //DialogResult dialog = lic.ShowDialog(); | 
						|
                    //if (dialog != DialogResult.Yes || dialog != DialogResult.OK) | 
						|
                    //{ | 
						|
                    //    _Validity = false; | 
						|
                    //    return _Validity; | 
						|
                    //} | 
						|
                } | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                LogAPI.Debug("授权验证异常:" + ex.Message + ex.StackTrace); | 
						|
            } | 
						|
            return _Validity; | 
						|
        } | 
						|
 | 
						|
        /// <summary> | 
						|
        /// 验证授权文件多版本 | 
						|
        /// </summary> | 
						|
        /// <param name="obj"></param> | 
						|
        /// <param name="isModify">是否修改</param> | 
						|
        /// <param name="Version">版本号</param> | 
						|
        /// <returns></returns> | 
						|
        public static bool ValidityLic(object obj, bool isModify, int Version = 5) | 
						|
        { | 
						|
            bool _Validity = true; | 
						|
            try | 
						|
            { | 
						|
                //判断授权方式 | 
						|
                var type = ConfigurationManager.AppSettings.Get("LicenseType"); | 
						|
                string jkrjSQ = System.IO.Path.Combine(SysAppPath.GetCurrentAppPath(), "jkrj.lic"); | 
						|
                string SQTemp = System.IO.Path.Combine(SysAppPath.GetCurrentAppPath(), "SQTemp"); | 
						|
                if (type == "F")//本地授权 | 
						|
                { | 
						|
                    if (File.Exists(jkrjSQ) && isModify) | 
						|
                    { | 
						|
                        if (Directory.Exists(SQTemp)) Directory.Delete(SQTemp, true); | 
						|
                        Directory.CreateDirectory(SQTemp); | 
						|
                        File.Copy(jkrjSQ, System.IO.Path.Combine(SQTemp, "jkrj.lic"), true); | 
						|
                        File.Delete(jkrjSQ); | 
						|
                    } | 
						|
                    try | 
						|
                    { | 
						|
                        string[] licpath = System.IO.Directory.GetFiles(System.Environment.CurrentDirectory, "*.lic", System.IO.SearchOption.TopDirectoryOnly); | 
						|
                        if (licpath.Length == 0) | 
						|
                        { | 
						|
                            MessageHelper.ShowError("授权校验失败!"); | 
						|
                        } | 
						|
                        if (licpath.Length == 0 || !RunIDService2.Instance.Verify(AuthorizeType.多合一授权, "KGIS_SJJK", $"{Version}00", $"{Version}x", "", "B0FEC8F")) | 
						|
                        { | 
						|
                            KGIS.PlatformPlugin.Views.License.LicenseView lic = new KGIS.PlatformPlugin.Views.License.LicenseView(obj, "KGIS_SJJK", $"{Version}00", $"{Version}x"); | 
						|
                            lic.Code = "B0FEC8F"; | 
						|
                            DialogResult dialog = lic.ShowDialog(); | 
						|
                            if (dialog != DialogResult.Yes && dialog != DialogResult.OK) | 
						|
                            { | 
						|
                                _Validity = false; | 
						|
                                if (isModify) | 
						|
                                { | 
						|
                                    File.Copy(System.IO.Path.Combine(SQTemp, "jkrj.lic"), jkrjSQ, true); | 
						|
                                    Directory.Delete(SQTemp, true); | 
						|
                                } | 
						|
                                return _Validity; | 
						|
                            } | 
						|
                        } | 
						|
                        else | 
						|
                        { | 
						|
                            _Validity = true; | 
						|
                            return _Validity; | 
						|
                        } | 
						|
                    } | 
						|
                    catch (Exception ex) | 
						|
                    { | 
						|
                        MessageHelper.Show(ex.Message); | 
						|
                        KGIS.Framework.Utils.LogAPI.Debug(ex); | 
						|
                        KGIS.PlatformPlugin.Views.License.LicenseView lic = new KGIS.PlatformPlugin.Views.License.LicenseView(obj, "KGIS_SJJK", $"{Version}00", $"{Version}x"); | 
						|
                        lic.Code = "B0FEC8F"; | 
						|
                        DialogResult dialog = lic.ShowDialog(); | 
						|
                        if (dialog != DialogResult.Yes || dialog != DialogResult.OK) | 
						|
                        { | 
						|
                            _Validity = false; | 
						|
                            if (isModify) | 
						|
                            { | 
						|
                                File.Copy(System.IO.Path.Combine(SQTemp, "jkrj.lic"), jkrjSQ, true); | 
						|
                                Directory.Delete(SQTemp, true); | 
						|
                            } | 
						|
                            return _Validity; | 
						|
                        } | 
						|
                    } | 
						|
                } | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                LogAPI.Debug("授权验证异常:" + ex.Message + ex.StackTrace); | 
						|
            } | 
						|
            return _Validity; | 
						|
        } | 
						|
        #endregion | 
						|
 | 
						|
        #region 绘制授权范围 | 
						|
        /// <summary> | 
						|
        /// 绘制授权范围 | 
						|
        /// </summary> | 
						|
        /// <param name="spatialReference"></param> | 
						|
        /// <returns></returns> | 
						|
        public static IGeometry DrawAuthorizationRange(ISpatialReference spatialReference) | 
						|
        { | 
						|
            IGeometry geo = null; | 
						|
            try | 
						|
            { | 
						|
                //授权区域为空 | 
						|
                if (string.IsNullOrWhiteSpace(RunIDService2.Instance.Area)) | 
						|
                    return null; | 
						|
                string ring = SysConfigsOprator.GetAppsetingValueByKey("Ring"); | 
						|
                ring = Decrypt(ring, RunIDService2.Instance.Secretkey); | 
						|
                IPointCollection py = new PolygonClass(); | 
						|
                ring = ring.Replace("POLYGON((", "").Replace("))", ""); | 
						|
                string[] points = ring.Split(','); | 
						|
                foreach (var item in points) | 
						|
                { | 
						|
                    string[] xy = item.Split(' '); | 
						|
                    if (!string.IsNullOrEmpty(xy[0])) | 
						|
                        py.AddPoint(new PointClass() { X = xy[0].ToDouble(), Y = xy[1].ToDouble() }); | 
						|
                } | 
						|
                geo = py as IPolygon; | 
						|
                ISpatialReferenceFactory NewSpatialReference = new SpatialReferenceEnvironmentClass(); | 
						|
                geo.SpatialReference = NewSpatialReference.CreateProjectedCoordinateSystem(4530); //NewSpatialReference.CreateGeographicCoordinateSystem(4490);  | 
						|
                geo.Project(spatialReference); | 
						|
                ITopologicalOperator topo = geo as ITopologicalOperator; | 
						|
                //geo = topo.Buffer(2000); | 
						|
                //geo = geo.Envelope; | 
						|
                //IPointCollection ps2 = geo as IPointCollection; | 
						|
 | 
						|
                //IPointCollection py2 = new PolygonClass(); | 
						|
                //py2.AddPoint(new PointClass() { X = geo.Envelope.XMax, Y = geo.Envelope.YMax }); | 
						|
                //py2.AddPoint(new PointClass() { X = geo.Envelope.XMax, Y = geo.Envelope.YMin }); | 
						|
                //py2.AddPoint(new PointClass() { X = geo.Envelope.XMin, Y = geo.Envelope.YMin }); | 
						|
                //py2.AddPoint(new PointClass() { X = geo.Envelope.XMin, Y = geo.Envelope.YMax }); | 
						|
                //py2.AddPoint(new PointClass() { X = geo.Envelope.XMax, Y = geo.Envelope.YMax }); | 
						|
                //IGeometry geo22 = py2 as IPolygon; | 
						|
 | 
						|
                //geo22.SpatialReference = spatialReference; | 
						|
                //geo22.Project(NewSpatialReference.CreateGeographicCoordinateSystem(4490)); | 
						|
                //py2 = geo22 as IPointCollection; | 
						|
 | 
						|
                //string strPly = "POLYGON(("; | 
						|
                //for (int i = 0; i < py2.PointCount; i++) | 
						|
                //{ | 
						|
                //    strPly += py2.Point[i].X + " " + py2.Point[i].Y + ","; | 
						|
                //} | 
						|
                //strPly += "))"; | 
						|
 | 
						|
                //byte[] bt=(MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).AesEncrypt(strPly, RunIDService2.Instance.Secretkey); | 
						|
 | 
						|
                //strPly = Convert.ToBase64String(bt); | 
						|
 | 
						|
                string SQstring = RunIDService2.Instance.Area.Replace('\r', ' ').ToTrim(); | 
						|
                string[] rings = SQstring.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries); | 
						|
                string coord = string.Empty; | 
						|
                if (rings.Length > 550) return null; | 
						|
                if (rings.Length > 0) | 
						|
                { | 
						|
                    coord = "MULTIPOLYGON("; | 
						|
                    foreach (var r in rings) | 
						|
                    { | 
						|
                        string Temp_Coordinate = string.Empty; | 
						|
                        string[] ps = r.TrimEnd(';').Split(';'); | 
						|
                        string strRing = "(("; | 
						|
                        if (ps.Length == 1) | 
						|
                        { | 
						|
                            strRing += ps[0]; | 
						|
                        } | 
						|
                        else | 
						|
                        { | 
						|
                            foreach (var item in ps) | 
						|
                            { | 
						|
                                strRing += item.Replace('\n', ' ').Replace(',', ' ') + ","; | 
						|
                            } | 
						|
                        } | 
						|
                        char[] charsToTrim = { ',' }; | 
						|
                        strRing = strRing.TrimEnd(charsToTrim); | 
						|
                        strRing = strRing.ToTrim(); | 
						|
                        strRing = strRing.TrimEnd(charsToTrim); | 
						|
                        strRing += ")),"; | 
						|
                        coord += strRing; | 
						|
                    } | 
						|
                    coord = coord.TrimEnd(','); | 
						|
                    coord += ")"; | 
						|
                    IGeometry geo2 = AECommonHelper.GetPolygonFromWkt(coord); | 
						|
                    if (geo2 == null) return geo; | 
						|
                    geo2.SpatialReference = NewSpatialReference.CreateGeographicCoordinateSystem(4490); | 
						|
                    geo2.Project(spatialReference); | 
						|
                    IGeometryCollection ExterRingGeometryCollection = geo2 as IGeometryCollection; | 
						|
                    if (ExterRingGeometryCollection == null) return geo; | 
						|
                    IGeometryCollection geometry = new ESRI.ArcGIS.Geometry.PolygonClass() as IGeometryCollection; | 
						|
                    for (int i = 0; i < ExterRingGeometryCollection.GeometryCount; i++) | 
						|
                    { | 
						|
                        IGeometry ExterGeometry = ExterRingGeometryCollection.get_Geometry(i); | 
						|
                        double geoArea = ((IArea)ExterGeometry).Area; | 
						|
                        if (geoArea < 0.1) | 
						|
                        { | 
						|
                            continue; | 
						|
                        } | 
						|
                        if (ExterGeometry != null && !ExterGeometry.IsEmpty) | 
						|
                        { | 
						|
                            geometry.AddGeometry(ExterGeometry); | 
						|
                        } | 
						|
                        else | 
						|
                        { | 
						|
                            continue; | 
						|
                        } | 
						|
                    } | 
						|
                    ITopologicalOperator topo2 = geometry as ITopologicalOperator; | 
						|
                    IGeometry buf = topo2.Buffer(2000); | 
						|
                    GeometryBag ExterGeometryBag = (buf as ESRI.ArcGIS.Geometry.IPolygon4).ExteriorRingBag as GeometryBag; | 
						|
                    ExterRingGeometryCollection = ExterGeometryBag as IGeometryCollection; | 
						|
                    geometry = new ESRI.ArcGIS.Geometry.PolygonClass() as IGeometryCollection; | 
						|
                    for (int i = 0; i < ExterRingGeometryCollection.GeometryCount; i++) | 
						|
                    { | 
						|
                        IGeometry ExterGeometry = ExterRingGeometryCollection.get_Geometry(i); | 
						|
                        if (ExterGeometry != null && !ExterGeometry.IsEmpty) | 
						|
                        { | 
						|
                            geometry.AddGeometry(ExterGeometry); | 
						|
                        } | 
						|
                        else | 
						|
                        { | 
						|
                            continue; | 
						|
                        } | 
						|
                    } | 
						|
                    topo = geo as ITopologicalOperator; | 
						|
                    geo = topo.Difference(geometry as IGeometry); | 
						|
                } | 
						|
                else | 
						|
                { | 
						|
                    foreach (var geoRing in rings) | 
						|
                    { | 
						|
                        string strGeo = geoRing.Replace('\r', ' ').ToTrim(); | 
						|
                        if (strGeo.Split(new char[] { ';' }).Length < 10) | 
						|
                            strGeo = geoRing.Replace(";", ","); | 
						|
                        if (strGeo.Contains(";")) | 
						|
                        { | 
						|
                            coord = string.Format("POLYGON(("); | 
						|
                            string[] ps = strGeo.TrimEnd(';').Split(';'); | 
						|
                            foreach (var item in ps) | 
						|
                            { | 
						|
                                coord += item.Replace('\r', ' ').Replace(',', ' ') + ","; | 
						|
                            } | 
						|
                        } | 
						|
                        else | 
						|
                        { | 
						|
                            coord = string.Format("POLYGON(("); | 
						|
                            coord += strGeo; | 
						|
                        } | 
						|
                        coord = coord.TrimEnd(','); | 
						|
                        coord += "))"; | 
						|
                        IGeometry geo2 = AECommonHelper.GetPolygonFromWkt(coord); | 
						|
                        if (geo2 == null) return geo; | 
						|
                        IArea area = geo2 as IArea; | 
						|
                        if (area.Area < 0) | 
						|
                        { | 
						|
                            (geo2 as IPolygon).ReverseOrientation(); | 
						|
                        } | 
						|
 | 
						|
                        geo2.SpatialReference = NewSpatialReference.CreateGeographicCoordinateSystem(4490); | 
						|
                        geo2.Project(spatialReference); | 
						|
                        ITopologicalOperator topo2 = geo2 as ITopologicalOperator; | 
						|
                        IGeometry buf = topo2.Buffer(2000); | 
						|
                        topo = geo as ITopologicalOperator; | 
						|
                        GeometryBag ExterGeometryBag = (buf as ESRI.ArcGIS.Geometry.IPolygon4).ExteriorRingBag as GeometryBag; | 
						|
                        if (ExterGeometryBag == null) continue; | 
						|
                        IGeometryCollection ExterRingGeometryCollection = ExterGeometryBag as IGeometryCollection; | 
						|
                        IGeometryCollection geometry = new ESRI.ArcGIS.Geometry.PolygonClass() as IGeometryCollection; | 
						|
                        for (int i = 0; i < ExterRingGeometryCollection.GeometryCount; i++) | 
						|
                        { | 
						|
                            IGeometry ExterGeometry = ExterRingGeometryCollection.get_Geometry(i); | 
						|
                            if (ExterGeometry != null && !ExterGeometry.IsEmpty) | 
						|
                            { | 
						|
                                geometry.AddGeometry(ExterGeometry); | 
						|
                            } | 
						|
                            else | 
						|
                            { | 
						|
                                continue; | 
						|
                            } | 
						|
                        } | 
						|
                        geo = topo.Difference(geometry as IGeometry); | 
						|
                    } | 
						|
                } | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                LogAPI.Debug("绘制授权范围异常:" + ex.Message + ex.StackTrace); | 
						|
            } | 
						|
            return geo; | 
						|
        } | 
						|
        #endregion | 
						|
 | 
						|
        #region Decrypt | 
						|
        /// <summary> | 
						|
        /// 解密 | 
						|
        /// </summary> | 
						|
        /// <param name="content"></param> | 
						|
        /// <param name="strKey"></param> | 
						|
        /// <returns></returns> | 
						|
        /// <exception cref="Exception"></exception> | 
						|
        public static string Decrypt(string content, string strKey) | 
						|
        { | 
						|
            string result = string.Empty; | 
						|
            try | 
						|
            { | 
						|
                if (string.IsNullOrWhiteSpace(content)) | 
						|
                    return string.Empty; | 
						|
                System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged | 
						|
                { | 
						|
                    Key = Encoding.UTF8.GetBytes(strKey), | 
						|
                    Mode = System.Security.Cryptography.CipherMode.ECB, | 
						|
                    Padding = System.Security.Cryptography.PaddingMode.PKCS7 | 
						|
                }; | 
						|
                //将base64字符串转换成byte数组 | 
						|
                byte[] contentArray = Convert.FromBase64String(content); | 
						|
                //创建解密转换器 | 
						|
                System.Security.Cryptography.ICryptoTransform cDecryptTransform = rm.CreateDecryptor(); | 
						|
                //对byte数组进行解密转换 | 
						|
                Byte[] DecryptArray = cDecryptTransform.TransformFinalBlock(contentArray, 0, contentArray.Length); | 
						|
                //将解密后的byte[]转换成字符串(base64) | 
						|
                string strDecrypt = Encoding.UTF8.GetString(DecryptArray); | 
						|
                //将base64字符串转换成8位无符号整数数组 | 
						|
                byte[] base64ToByte = Convert.FromBase64String(strDecrypt); | 
						|
                //string s = Encoding.UTF8.GetString(base64ToByte); | 
						|
                //将8位无符号整数数组转换成等效字符串,并返回 | 
						|
                return Encoding.UTF8.GetString(base64ToByte); | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                throw new Exception("解密工程文件异常:" + ex.Message); | 
						|
            } | 
						|
            finally | 
						|
            { | 
						|
                GC.Collect(); | 
						|
            } | 
						|
        } | 
						|
        #endregion | 
						|
 | 
						|
        #region 验证授权范围 | 
						|
        /// <summary> | 
						|
        /// 验证授权范围 | 
						|
        /// </summary> | 
						|
        /// <param name="FeatureClass"></param> | 
						|
        /// <returns></returns> | 
						|
        public static bool VerifyRange(IFeatureClass FeatureClass) | 
						|
        { | 
						|
            bool VerifyMandate = false; | 
						|
            try | 
						|
            { | 
						|
                if ((FeatureClass as FeatureClass).Workspace.Type != esriWorkspaceType.esriRemoteDatabaseWorkspace) | 
						|
                { | 
						|
                    IFeatureClassManage fcManage = FeatureClass as IFeatureClassManage; | 
						|
                    fcManage.UpdateExtent(); | 
						|
                } | 
						|
                IEnvelope envelope = (FeatureClass as IGeoDataset).Extent; | 
						|
                if (string.IsNullOrWhiteSpace(RunIDService2.Instance.Area) || envelope.IsEmpty) | 
						|
                { | 
						|
#if DEBUG | 
						|
                    return true; | 
						|
#else | 
						|
                    LogAPI.Debug("未能获取有效的授权信息,数据导出失败!"); | 
						|
                    return VerifyMandate; | 
						|
#endif | 
						|
                } | 
						|
                if (!string.IsNullOrWhiteSpace(RunIDService2.Instance.Area)) | 
						|
                { | 
						|
                    IGeometry geo = AECommonHelper.GetPolygonFromWkt(RunIDService2.Instance.Area); | 
						|
                    IArea area = geo as IArea; | 
						|
                    if (area.Area < 0) | 
						|
                    { | 
						|
                        (geo as IPolygon).ReverseOrientation(); | 
						|
                    } | 
						|
                    ISpatialReferenceFactory NewSpatialReference = new SpatialReferenceEnvironmentClass(); | 
						|
                    geo.SpatialReference = NewSpatialReference.CreateGeographicCoordinateSystem(4490); | 
						|
                    geo.Project(MapsManager.Instance.MapService.getAxMapControl().SpatialReference); | 
						|
                    IPointCollection poly = new PolygonClass(); | 
						|
                    poly.AddPoint(new PointClass() { X = envelope.XMin, Y = envelope.YMax }); | 
						|
                    poly.AddPoint(new PointClass() { X = envelope.XMax, Y = envelope.YMax }); | 
						|
                    poly.AddPoint(new PointClass() { X = envelope.XMax, Y = envelope.YMin }); | 
						|
                    poly.AddPoint(new PointClass() { X = envelope.XMin, Y = envelope.YMin }); | 
						|
                    poly.AddPoint(new PointClass() { X = envelope.XMin, Y = envelope.YMax }); | 
						|
                    IGeometry geo2 = poly as IGeometry; | 
						|
                    IPointCollection poly2 = new PolygonClass(); | 
						|
                    poly2.AddPoint(new PointClass() { X = geo.Envelope.XMin, Y = geo.Envelope.YMax }); | 
						|
                    poly2.AddPoint(new PointClass() { X = geo.Envelope.XMax, Y = geo.Envelope.YMax }); | 
						|
                    poly2.AddPoint(new PointClass() { X = geo.Envelope.XMax, Y = geo.Envelope.YMin }); | 
						|
                    poly2.AddPoint(new PointClass() { X = geo.Envelope.XMin, Y = geo.Envelope.YMin }); | 
						|
                    poly2.AddPoint(new PointClass() { X = geo.Envelope.XMin, Y = geo.Envelope.YMax }); | 
						|
                    geo = poly2 as IGeometry; | 
						|
                    geo.SpatialReference = MapsManager.Instance.MapService.getAxMapControl().SpatialReference; | 
						|
                    geo2.SpatialReference = MapsManager.Instance.MapService.getAxMapControl().SpatialReference; | 
						|
                    ITopologicalOperator topo = geo as ITopologicalOperator; | 
						|
                    IGeometry newGeo = topo.Intersect(geo2, geo2.Dimension); | 
						|
                    double d = geo.GetEllipseArea(); | 
						|
                    double d1 = geo2.GetEllipseArea(); | 
						|
                    double newD = newGeo.GetEllipseArea(); | 
						|
                    if (newD / d1 < 0.8) | 
						|
                        return VerifyMandate; | 
						|
                    else | 
						|
                        VerifyMandate = true; | 
						|
                } | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                LogAPI.Debug("验证授权范围异常:" + ex.Message + ex.StackTrace); | 
						|
                VerifyMandate = false; | 
						|
            } | 
						|
            return VerifyMandate; | 
						|
        } | 
						|
        #endregion | 
						|
 | 
						|
    } | 
						|
}
 | 
						|
 |