using ESRI.ArcGIS.Geometry; using KGIS.Framework.Utils; using Kingo.PluginServiceInterface.Model; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.IO; using System.Text; namespace Kingo.PluginServiceInterface { /// /// Model:工程结构 /// Description:用于记录工程信息 /// Author:李进营 /// Finished:2017年11月18日 /// [Serializable] public class ProjectInfo { /// /// =======临时增加,用于控制图形合并提示框========= /// 是否再次提醒(true:下次继续提醒;false:下次不再提醒) /// [Newtonsoft.Json.JsonIgnore] public bool IsPromptAgain = true; /// /// 工程名称 /// [Newtonsoft.Json.JsonIgnore] public string ProjName { get; set; } /// /// 单图斑建库-工程使用人 /// [Newtonsoft.Json.JsonIgnore] public string ProjUserName { get; set; } /// /// 默认方案 /// //public string DefaultScheme { get; set; } ///// ///// 当前方案 ///// //public string CurrentScheme { get; set; } ///// ///// 记录所有方案 ///// //public List SchemeList { get; set; } /// /// 数据库名称 /// public string DataBaseName { get; set; } /// /// 变更数据库 /// public string BGDatabase { get; set; } /// /// 变更成果导出路径 /// public string BGResultPath { get; set; } /// /// 监测图层数据库 /// public string JCDatabase { get; set; } /// /// 单图斑基础库图层数据库 /// public string DTBJKDatabase { get; set; } /// /// 单图斑变更更新图层图层数据库 /// public string DTBBGGXDatabase { get; set; } /// /// 单图斑数据检查库 /// public string DTBCheckDatabase { get; set; } /// /// 单图斑预处理数据库 /// public string DTBYCLDatabase { get; set; } /// /// 单图斑预处理预审数据库 /// public string DTBYCLYHDatabase { get; set; } /// /// 增量数据库 /// public string ZLDatabase { get; set; } /// /// 年末数据库 /// public string NMDatabase { get; set; } /// /// 变化图斑数据库 /// public string BHTBDatabase { get; set; } /// /// 举证成果包地址 /// public string DBPath { get; set; } /// /// 工程后缀名 /// [Newtonsoft.Json.JsonIgnore] public string ProjSuffix { get; set; } /// /// 行政代码 /// public string CODE { get; set; } /// /// 陆地调查面积 /// public double DCMJ { get; set; } /// /// 海岛调查面积 /// public double DCMJHD { get; set; } public KZMJInfo KZMJ { get; set; } /// /// 比例尺 /// public string Scale { get; set; } /// /// 比例尺代码 /// public string ScaleCode { get; set; } /// /// 容差 /// public double XYResolution { get; set; } /// /// 陆地控制面积公顷 /// [Newtonsoft.Json.JsonIgnore] public double DCMJ2 { get; set; } /// /// 海岛控制面积公顷 /// [Newtonsoft.Json.JsonIgnore] public double DCMJHD2 { get; set; } /// /// 分度带 /// public string FDD { get; set; } //private string /// /// 图形带号 /// public int TXDH { get; set; } /// /// 中央经度 /// public int ZYJD { get; set; } /// /// 影像路径 /// public string[] ImgPath { get; set; } /// /// 坐标参考文件路径(已经过时,请使用PrjFileStr) /// public string PrjFilePath { get; set; } /// /// 坐标参考字符串 /// public string PrjFileStr { get; set; } /// /// 工程所在文件夹 /// public string ProjDir { get; set; } /// /// 工程目录文件夹名称(行政区名称+代码) /// public string ProWorkDir { get; set; } /// /// 模板数据 /// public string TempData { get; set; } public string MulitMapData { get; set; } public string DicData { get; set; } /// /// 是否启用快捷键 /// public bool EnableShortcut { get; set; } /// /// 工作目录-基础库路径 /// public string JCKPath { get; set; } /// /// 工作目录-国检年末库路径 /// public string GJNMKPath { get; set; } /// /// 工作目录-变更范围成果 /// public string BGFWCGPath { get; set; } /// /// 工作目录-监测图斑路径 /// public string JCTBPath { get; set; } /// /// 工作目录-临时用地范围路径 /// public string LSYDFWPath { get; set; } /// /// 工作目录-历年耕地范围路径 /// public string LNGDFWPath { get; set; } /// /// 工作目录-用地管理信息路径 /// public string YDGLXXPath { get; set; } /// /// 工作目录-专项数据路径 /// public string ZXSJPath { get; set; } /// /// 工作目录-坡度图路径 /// public string PDTPath { get; set; } /// /// 工作目录-合法建设用地范围 /// public string HFJSYDPath { get; set; } /// /// 工作目录-耕地及恢复属性图斑路径 /// public string GDJHFSXPath { get; set; } /// /// 工作目录-城镇村等用地路径 /// public string CZCDYDPath { get; set; } /// /// 工作目录-影像路径 /// public string YXPath { get; set; } /// /// 工作目录-5级坡度图 /// public string txtfivePDT { get; set; } /// /// 工作目录-承诺耕地参考图层 /// public string CNGDPath { get; set; } /// /// 工作目录-国家下发监测图层 /// public string GJXFJCPath { get; set; } /// /// 工作目录-撂荒耕地参考图层 /// public string LHGDPath { get; set; } public List ListTaskPackage { get; set; } public string TaskPath { get; set; } public int WKID { get; set; } /// /// 设置的用户名 /// public string UserName { get; set; } /// /// 用户密码 /// public string UserPassword { get; set; } /// /// 任务包密码 /// public string Pathpassword = "; password = 009FA8952F59C8853AF0CC8DA4394D00FEDCD51361C7F1C9C2629EBEB8FDE5B2A1"; /// /// 批量赋属性值列表 /// public List ListBatchAttributes { get; set; } = new List(); /// /// 创建投影坐标系 /// /// esriSRProjCS4Type /// public ISpatialReference GetCurentProjectedCoordinate() { try { if (!string.IsNullOrWhiteSpace(PrjFileStr)) { //创建一个要素集创建一个投影 ISpatialReferenceFactory pSpatialRefFac = new SpatialReferenceEnvironmentClass(); ISpatialReference pSpatialReference; int s; PrjFileStr = PrjFileStr.Replace("'", "\""); pSpatialRefFac.CreateESRISpatialReference(PrjFileStr, out pSpatialReference, out s); return pSpatialReference; } return null; } catch (Exception ex) { LogAPI.Debug(ex); return null; } } public ProjectInfo() { //DefaultScheme = "初始方案"; //CurrentScheme = "初始方案"; } public static ProjectInfo OpenProject(string pFilePath) { if (!string.IsNullOrWhiteSpace(pFilePath) && File.Exists(pFilePath)) { string strBase64 = string.Empty; //读取文件内容到字节数组 using (FileStream stream = new FileStream(pFilePath, FileMode.Open)) { byte[] bytes = new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); stream.Close(); //将字节数组转换成Base64字符串 strBase64 = Convert.ToBase64String(bytes); } //将Base64字符串进行解密,得到原始文件数据 string strData = Decrypt(strBase64, "58ef12f9891a4cd89fa7bdd181ef13a7"); //将原始文件数据反序列化为对象 ProjectInfo data = JsonConvert.DeserializeObject(strData); if (data == null) { data = SerializeAPI.DeserializeToObject(strData.Substring(1)); } if (data != null) { data.ProjName = System.IO.Path.GetFileNameWithoutExtension(pFilePath); data.ProjSuffix = System.IO.Path.GetExtension(pFilePath); data.ProjDir = System.IO.Path.GetDirectoryName(pFilePath); data.BGDatabase = System.IO.Path.Combine(data.ProjDir, "BGDB.gdb"); if (!Directory.Exists(data.BGDatabase)) data.BGDatabase = string.Empty; data.ZLDatabase = System.IO.Path.Combine(data.ProjDir, "ZLDB.gdb"); if (!Directory.Exists(data.ZLDatabase)) data.ZLDatabase = string.Empty; data.NMDatabase = System.IO.Path.Combine(data.ProjDir, "NMDB.gdb"); if (!Directory.Exists(data.NMDatabase)) data.NMDatabase = string.Empty; FileInfo fIf = new FileInfo(data.ProjDir); //data.ProWorkDir= data.DCMJ2 = Math.Round(data.DCMJ * 0.0001, 2); data.DCMJHD2 = Math.Round(data.DCMJHD2 * 0.0001, 2); //if (string.IsNullOrEmpty(data.PrjFileStr) && !string.IsNullOrEmpty(data.PrjFilePath) && System.IO.File.Exists(data.PrjFilePath)) //{ // // 兼容老的坐标参考系 // SetPrjFileStrByOldPrjFilePath(data); //} } return data; } else { return null; } } //public static ProjectInfo OpenProject1(string pFilePath) //{ // if (!string.IsNullOrWhiteSpace(pFilePath) && File.Exists(pFilePath)) // { // ProjectInfo data = null; // return data; // } // else // { // return null; // } //} /// /// 获取工程文件路径 /// /// public string GetProjFilePath() { try { if (string.IsNullOrWhiteSpace(ProjDir)) return string.Empty; string filePath = ProjDir + "\\" + ProjName + ProjSuffix; if (File.Exists(filePath)) return filePath; else return ""; } catch (Exception ex) { LogAPI.Debug("获取工程文件路径异常:" + ex); return ""; } } /// /// 获取数据字典文件路径 /// /// public string GetDicDataPath() { if (!string.IsNullOrWhiteSpace(ProjDir)) { string dbPath = System.IO.Path.Combine(ProjDir, "BGTJ.sqlite"); if (File.Exists(dbPath)) { return dbPath; } } return string.Empty; } /// /// 获取检查结果DB路径 /// /// public string GetDataCheckrResultPath() { if (!string.IsNullOrWhiteSpace(ProjDir)) { string dbPath = System.IO.Path.Combine(ProjDir, "DataCheckrResult.db"); if (File.Exists(dbPath)) { return dbPath; } } return string.Empty; } public string GetDHZSDBPath() { if (!string.IsNullOrWhiteSpace(ProjDir)) { string dbPath = System.IO.Path.Combine(ProjDir, "外业助手.gdb"); if (Directory.Exists(dbPath)) { return dbPath; } } return string.Empty; } /// /// 地图范围 /// public MapExtent MapExtent { get; set; } public bool Save() { try { if (string.IsNullOrWhiteSpace(this.ProjDir)) { return false; } //将对象序列化成字符串 //string Str = SerializeAPI.SerializeToXML(this); string sss = JsonConvert.SerializeObject(this); //对字符串进行加密 Byte[] resultArray = AesEncrypt(sss, "58ef12f9891a4cd89fa7bdd181ef13a7"); //修改人:李进营 修改时间 增加using引用 using (Stream stream = new FileStream(this.ProjDir + "\\" + this.ProjName + ProjSuffix, FileMode.Create, FileAccess.Write, FileShare.None)) { stream.Write(resultArray, 0, resultArray.Length); stream.Close(); } return true; } catch (Exception ex) { LogAPI.Debug(ex); return false; } } public string GetPRJName() { string result = string.Empty; if (!string.IsNullOrWhiteSpace(PrjFileStr)) { try { string beginstr = "["; int leftindex = PrjFileStr.IndexOf(beginstr) + beginstr.Length; string spatialrefrightstr = PrjFileStr.Substring(leftindex); int length = spatialrefrightstr.IndexOf(","); result = spatialrefrightstr.Substring(0, length).Replace("\"", ""); } catch { } } return result; } /// /// AES 加密 /// /// 需要加密的字符串 /// 秘钥 /// public Byte[] AesEncrypt(string str, string strKey) { try { if (string.IsNullOrWhiteSpace(strKey)) throw new Exception("加密秘钥为空!"); byte[] Key = Encoding.UTF8.GetBytes(strKey); if (Key.Length != 32) throw new Exception("秘钥长度不符合要求!"); if (string.IsNullOrEmpty(str)) return null; Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str); string strBase64 = Convert.ToBase64String(toEncryptArray); byte[] contentArray = Encoding.UTF8.GetBytes(strBase64); #region 加密 System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged { Key = Key, Mode = System.Security.Cryptography.CipherMode.ECB, Padding = System.Security.Cryptography.PaddingMode.PKCS7 }; System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateEncryptor(); Byte[] resultArray = cTransform.TransformFinalBlock(contentArray, 0, contentArray.Length); #endregion return resultArray; } catch (Exception ex) { throw ex; } } /// /// 解密函数 /// /// Base64字符串 /// 秘钥 /// 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(); } } private string ByteToString(byte[] arrByte) { StringBuilder sb = new StringBuilder(); foreach (byte b in arrByte) { sb.Append(b > 15 ? Convert.ToString(b, 16) : '0' + Convert.ToString(b, 16)); } return sb.ToString(); } #region 工程信息增加 /// /// 项目类型 /// public EnumProjType ProjType { get; set; } /// /// 县级行政区代码发生变化 /// public bool XZQDMChange { get; set; } /// /// 城镇村等用地碎图斑小于30平的是否自动修复 /// public bool LessThan30Missing { get; set; } /// /// 村级调查区名称发生变化 /// public bool ZLDWMCChange { get; set; } /// /// 调入村级调查区 /// public string DR_CJDCQPath { get; set; } /// /// 调入行政区 /// public string DR_XZQPath { get; set; } /// /// 坐落变更信息 /// public ObservableCollection ListZLXXInfo { get; set; } #endregion public string DataCheckPath { get; set; } /// /// 调入CZC /// public string DR_CZCPath { get; set; } } /// /// 属性赋值配置类 /// [Serializable] public class KZMJInfo : INotifyPropertyChanged { private double tZQ_LDMJ; private double tZQ_LDMJ_GQ; private double tZQ_HDMJ; private double tZQ_HDMJ_GQ; private double tZH_LDMJ; private double tZH_LDMJ_GQ; private double tZH_HDMJ; private double tZH_HDMJ_GQ; /// /// 调整前陆地面积 /// public double TZQ_LDMJ { get => tZQ_LDMJ; set { tZQ_LDMJ = value; TZQ_LDMJ_GQ = Math.Round(value * 0.0001, 2); RaisePropertyChanged("TZQ_LDMJ"); } } /// /// 调整前陆地面积(公顷) /// public double TZQ_LDMJ_GQ { get => tZQ_LDMJ_GQ; set { tZQ_LDMJ_GQ = value; RaisePropertyChanged("TZQ_LDMJ_GQ"); } } /// /// 调整前海岛面积 /// public double TZQ_HDMJ { get => tZQ_HDMJ; set { tZQ_HDMJ = value; TZQ_HDMJ_GQ = Math.Round(value * 0.0001, 2); RaisePropertyChanged("TZQ_HDMJ"); } } /// /// 调整前海岛面积(公顷) /// public double TZQ_HDMJ_GQ { get => tZQ_HDMJ_GQ; set { tZQ_HDMJ_GQ = value; RaisePropertyChanged("TZQ_HDMJ_GQ"); } } /// /// 调整后陆地面积 /// public double TZH_LDMJ { get => tZH_LDMJ; set { tZH_LDMJ = value; TZH_LDMJ_GQ = Math.Round(value * 0.0001, 2); RaisePropertyChanged("TZH_LDMJ"); } } /// /// 调整后陆地面积(公顷) /// public double TZH_LDMJ_GQ { get => tZH_LDMJ_GQ; set { tZH_LDMJ_GQ = value; RaisePropertyChanged("TZH_LDMJ_GQ"); } } /// /// 调整后海岛面积 /// public double TZH_HDMJ { get => tZH_HDMJ; set { tZH_HDMJ = value; TZH_HDMJ_GQ = Math.Round(value * 0.0001, 2); RaisePropertyChanged("TZH_HDMJ"); } } /// /// 调整后海岛面积(公顷) /// public double TZH_HDMJ_GQ { get => tZH_HDMJ_GQ; set { tZH_HDMJ_GQ = value; RaisePropertyChanged("TZH_HDMJ_GQ"); } } public event PropertyChangedEventHandler PropertyChanged; protected void RaisePropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } /// /// 地图范围 /// [Serializable] public class MapExtent { public double XMax { get; set; } public double YMax { get; set; } public double XMin { get; set; } public double YMin { get; set; } } public enum EnumProjType { NDBG, RCBG_ZJG, RCBG_BCGD, BHTBTQ, DTBJK, YCLJK, WYZS } }