using ESRI.ArcGIS.Geodatabase; using KGIS.Framework.Maps; using KGIS.Framework.Utils; using Kingo.PluginServiceInterface.Model; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; namespace Kingo.Plugin.DataLoad.Helper { public class SetKCDLXSHelper { private static List GDEntitys; private static XDocument xDoc; private static IQueryFilter pQueryFilterTT1 = new QueryFilter(); private static IFeatureCursor pTT1FeatureCursor; private static IFeature pTT1Feature; private static string BG_GDLXConfigPath; private static string GDLX = null; private static string GDPDJB = null; private static object obj = null; /// /// 设置扣除系数 /// public static void SetKCDLXS() { try { InitGD(); IFeatureClass pFeatureClass = MapsManager.Instance.MapService.GetFeatureClassByName("DLTB"); if (pFeatureClass != null && pFeatureClass.FeatureCount(null) > 0) { ITable pTable = pFeatureClass as ITable; #region 梯田扣除地类系数 string TempFH = "%"; if (Path.GetExtension((pFeatureClass as FeatureClass).Workspace.PathName).ToLower().Contains(".mdb")) TempFH = "*"; for (int i = 0; i < pTable.Fields.FieldCount; i++) { IField pField = pFeatureClass.Fields.get_Field(i); if (pField.AliasName == "扣除地类系数" || pField.AliasName == "KCXS") { for (int j = 1; j < 6; j++) { if (j == 1) { pQueryFilterTT1.WhereClause = string.Format(" KCXS >= 0 AND GDLX = 'TT' AND DLBM LIKE '01{1}' AND GDPDJB = '{0}' ", j, TempFH); pTT1FeatureCursor = pFeatureClass.Search(pQueryFilterTT1, true); pTT1Feature = pTT1FeatureCursor.NextFeature(); while (pTT1Feature != null) { obj = pTT1Feature.get_Value(i); GDLX = "TT"; GDPDJB = "1"; Save(); if (!string.IsNullOrWhiteSpace(obj?.ToString() ?? "")) break; else pTT1Feature = pTT1FeatureCursor.NextFeature(); } } else if (j == 2) { pQueryFilterTT1.WhereClause = string.Format(" KCXS >= 0 AND GDLX = 'TT' AND DLBM LIKE '01{1}' AND GDPDJB = '{0}' ", j, TempFH); pTT1FeatureCursor = pFeatureClass.Search(pQueryFilterTT1, true); pTT1Feature = pTT1FeatureCursor.NextFeature(); while (pTT1Feature != null) { obj = pTT1Feature.get_Value(i); GDLX = "TT"; GDPDJB = "2"; Save(); if (!string.IsNullOrWhiteSpace(obj?.ToString() ?? "")) break; else pTT1Feature = pTT1FeatureCursor.NextFeature(); } } else if (j == 3) { pQueryFilterTT1.WhereClause = string.Format(" KCXS >= 0 AND GDLX = 'TT' AND DLBM LIKE '01{1}' AND GDPDJB = '{0}' ", j, TempFH); pTT1FeatureCursor = pFeatureClass.Search(pQueryFilterTT1, true); pTT1Feature = pTT1FeatureCursor.NextFeature(); while (pTT1Feature != null) { obj = pTT1Feature.get_Value(i); GDLX = "TT"; GDPDJB = "3"; Save(); if (!string.IsNullOrWhiteSpace(obj?.ToString() ?? "")) break; else pTT1Feature = pTT1FeatureCursor.NextFeature(); } } else if (j == 4) { pQueryFilterTT1.WhereClause = string.Format(" KCXS >= 0 AND GDLX = 'TT' AND DLBM LIKE '01{1}' AND GDPDJB = '{0}' ", j, TempFH); pTT1FeatureCursor = pFeatureClass.Search(pQueryFilterTT1, true); pTT1Feature = pTT1FeatureCursor.NextFeature(); while (pTT1Feature != null) { obj = pTT1Feature.get_Value(i); GDLX = "TT"; GDPDJB = "4"; Save(); if (!string.IsNullOrWhiteSpace(obj?.ToString() ?? "")) break; else pTT1Feature = pTT1FeatureCursor.NextFeature(); } } else if (j == 5) { pQueryFilterTT1.WhereClause = string.Format(" KCXS >= 0 AND GDLX = 'TT' AND DLBM LIKE '01{1}' AND GDPDJB = '{0}' ", j, TempFH); pTT1FeatureCursor = pFeatureClass.Search(pQueryFilterTT1, true); pTT1Feature = pTT1FeatureCursor.NextFeature(); while (pTT1Feature != null) { obj = pTT1Feature.get_Value(i); GDLX = "TT"; GDPDJB = "5"; Save(); if (!string.IsNullOrWhiteSpace(obj?.ToString() ?? "")) break; else pTT1Feature = pTT1FeatureCursor.NextFeature(); } } } break; } } #endregion #region 坡地扣除地类系数 for (int k = 0; k < pTable.Fields.FieldCount; k++) { IField pField = pFeatureClass.Fields.get_Field(k); if (pField.AliasName == "扣除地类系数" || pField.AliasName == "KCXS") { for (int j = 1; j < 6; j++) { if (j == 1) { pQueryFilterTT1.WhereClause = string.Format(" KCXS >= 0 AND GDLX = 'TT' AND DLBM LIKE '01{1}' AND GDPDJB = '{0}' ", j, TempFH); pTT1FeatureCursor = pFeatureClass.Search(pQueryFilterTT1, true); pTT1Feature = pTT1FeatureCursor.NextFeature(); while (pTT1Feature != null) { obj = pTT1Feature.get_Value(k); GDLX = "PD"; GDPDJB = "1"; Save(); if (!string.IsNullOrWhiteSpace(obj?.ToString() ?? "")) break; else pTT1Feature = pTT1FeatureCursor.NextFeature(); } } else if (j == 2) { pQueryFilterTT1.WhereClause = string.Format(" KCXS >= 0 AND GDLX = 'PD' AND DLBM LIKE '01{1}' AND GDPDJB = '{0}' ", j, TempFH); pTT1FeatureCursor = pFeatureClass.Search(pQueryFilterTT1, true); pTT1Feature = pTT1FeatureCursor.NextFeature(); while (pTT1Feature != null) { obj = pTT1Feature.get_Value(k); GDLX = "PD"; GDPDJB = "2"; Save(); if (!string.IsNullOrWhiteSpace(obj?.ToString() ?? "")) break; else pTT1Feature = pTT1FeatureCursor.NextFeature(); } } else if (j == 3) { pQueryFilterTT1.WhereClause = string.Format(" KCXS >= 0 AND GDLX = 'PD' AND DLBM LIKE '01{1}' AND GDPDJB = '{0}' ", j, TempFH); pTT1FeatureCursor = pFeatureClass.Search(pQueryFilterTT1, true); pTT1Feature = pTT1FeatureCursor.NextFeature(); while (pTT1Feature != null) { obj = pTT1Feature.get_Value(k); GDLX = "PD"; GDPDJB = "3"; Save(); if (!string.IsNullOrWhiteSpace(obj?.ToString() ?? "")) break; else pTT1Feature = pTT1FeatureCursor.NextFeature(); } } else if (j == 4) { pQueryFilterTT1.WhereClause = string.Format(" KCXS >= 0 AND GDLX = 'PD' AND DLBM LIKE '01{1}' AND GDPDJB = '{0}' ", j, TempFH); pTT1FeatureCursor = pFeatureClass.Search(pQueryFilterTT1, true); pTT1Feature = pTT1FeatureCursor.NextFeature(); while (pTT1Feature != null) { obj = pTT1Feature.get_Value(k); GDLX = "PD"; GDPDJB = "4"; Save(); if (!string.IsNullOrWhiteSpace(obj?.ToString() ?? "")) break; else pTT1Feature = pTT1FeatureCursor.NextFeature(); } } else if (j == 5) { pQueryFilterTT1.WhereClause = string.Format(" KCXS >= 0 AND GDLX = 'PD' AND DLBM LIKE '01{1}' AND GDPDJB = '{0}' ", j, TempFH); pTT1FeatureCursor = pFeatureClass.Search(pQueryFilterTT1, true); pTT1Feature = pTT1FeatureCursor.NextFeature(); while (pTT1Feature != null) { obj = pTT1Feature.get_Value(k); GDLX = "PD"; GDPDJB = "5"; Save(); if (!string.IsNullOrWhiteSpace(obj?.ToString() ?? "")) break; else pTT1Feature = pTT1FeatureCursor.NextFeature(); } } } break; } } #endregion } } catch (Exception ex) { LogAPI.Debug("设置扣除系数发生异常:" + ex); } } private static void InitGD() { try { GDEntitys = new List(); BG_GDLXConfigPath = (MapsManager.Instance.CurrProjectInfo as PluginServiceInterface.ProjectInfo).ProjDir + "\\BG_GDLXConfig.xml"; if (string.IsNullOrWhiteSpace(BG_GDLXConfigPath) || !File.Exists(BG_GDLXConfigPath)) BG_GDLXConfigPath = SysAppPath.GetBGGDLXConfigPath(); xDoc = XDocument.Load(BG_GDLXConfigPath); foreach (XElement xElement in xDoc.Descendants("Item")) { GDEntity model = new GDEntity(); model.GDLX = xElement.Attributes("GDLX").Single().Value; model.GDPDJB = xElement.Attributes("GDPDJB").Single().Value; model.GDPDJBMC = xElement.Attributes("GDPDJBMC").Single().Value; decimal kcdlxs = 0; if (decimal.TryParse(xElement.Attributes("KCDLXS").Single().Value, out kcdlxs)) { model.KCDLXS = kcdlxs; } else { model.KCDLXS = 0; } GDEntitys.Add(model); } } catch (Exception ex) { throw ex; } } private static void Save() { try { List Entitys = GDEntitys.ToList(); foreach (GDEntity model1 in Entitys) { if (model1.GDLX == GDLX && model1.GDPDJB == GDPDJB) { xDoc.Descendants("Item").Where(p => p.Attribute("GDLX").Value.Equals(model1.GDLX) && p.Attribute("GDPDJB").Value.Equals(model1.GDPDJB)).Single().Attribute("KCDLXS").SetValue(obj.ToString()); } } xDoc.Save(BG_GDLXConfigPath); } catch (Exception ex) { throw ex; } } } }