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.
563 lines
29 KiB
563 lines
29 KiB
using ESRI.ArcGIS.Carto; |
|
using ESRI.ArcGIS.DataSourcesGDB; |
|
using ESRI.ArcGIS.Geodatabase; |
|
using ESRI.ArcGIS.Geometry; |
|
using KGIS.Framework.AE; |
|
using KGIS.Framework.AE.ExtensionMethod; |
|
using KGIS.Framework.AE.GPHelper; |
|
using KGIS.Framework.DBOperator; |
|
using KGIS.Framework.Maps; |
|
using KGIS.Framework.Platform; |
|
using KGIS.Framework.Platform.Helper; |
|
using KGIS.Framework.Utils; |
|
using KGIS.Framework.Utils.ExtensionMethod; |
|
using KGIS.Framework.Utils.Helper; |
|
using Kingo.PluginServiceInterface; |
|
//using OSGeo.GDAL; |
|
//using OSGeo.OGR; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.Data; |
|
using System.Data.SQLite; |
|
using System.IO; |
|
using System.Linq; |
|
using System.Runtime.InteropServices; |
|
|
|
namespace Kingo.Plugin.DataCheck.Helper |
|
{ |
|
public class BGTBAndCZCTopoCheck : DataCheckRule |
|
{ |
|
private string _RuleName; |
|
public override string RuleName { get => _RuleName; set => _RuleName = value; } |
|
private string _RuleDesc; |
|
public override string RuleDesc { get => _RuleDesc; set => _RuleDesc = value; } |
|
public BGTBAndCZCTopoCheck() : base() |
|
{ |
|
_RuleName = "城镇村与图斑边界套合"; |
|
_RuleDesc = "检查变更图斑数据是否存在重叠、与城镇村基础数据边界不套合等问题"; |
|
} |
|
|
|
private IFeatureLayer GetCheckLayer() |
|
{ |
|
IFeatureLayer result = null; |
|
try |
|
{ |
|
IFeatureLayer m_Layer = MapsManager.Instance.MapService.GetFeatureLayerByName("DLTBBG"); |
|
IFeatureLayer m_JCLayer = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("地类图斑"); |
|
IFeatureLayer m_JCCZCLayer = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("城镇村等用地"); |
|
string gdbFolder = Directory.GetCurrentDirectory() + "\\Temp\\BGQDataCheck"; |
|
if (!System.IO.Directory.Exists(gdbFolder)) |
|
{ |
|
System.IO.Directory.CreateDirectory(gdbFolder); |
|
} |
|
try |
|
{ |
|
DelectDir(gdbFolder);//能删除就删除 删除报错不处理 |
|
} |
|
catch |
|
{ } |
|
IWorkspaceFactory pFtWsFct = null; |
|
IWorkspaceName workspaceName = null; |
|
pFtWsFct = new FileGDBWorkspaceFactory(); |
|
|
|
string gdbFileName = Guid.NewGuid().ToString() + ".gdb"; |
|
string path = System.IO.Path.Combine(gdbFolder, gdbFileName); |
|
workspaceName = pFtWsFct.Create(gdbFolder, gdbFileName, null, 0); |
|
|
|
IFeatureLayer tempLayer = null; |
|
GPParamClass gPParamClass = new GPParamClass(); |
|
//gPParamClass.Tolerance = "0.0001"; |
|
//ESRI.ArcGIS.Carto.IFeatureSelection selection = m_JCLayer as IFeatureSelection; |
|
//selection.Clear(); |
|
//设置基础地类图斑选中 |
|
//gPParamClass = new GPParamClass(); |
|
//gPParamClass.Tolerance = "0.0001"; |
|
//gPParamClass.FirstFeatureLayer = m_JCLayer; |
|
//gPParamClass.SecondFeatureClass = m_Layer.FeatureClass; |
|
////gPParamClass.Tolerance = "5"; |
|
//gPParamClass.IsGetOutPutFeature = true; |
|
//GeoprocessorHelper.SelectLayerByLocationAnalysis(gPParamClass, "INTERSECT", ref tempLayer); |
|
|
|
//选中的基础地类图斑导出至临时gdb |
|
//gPParamClass = new GPParamClass(); |
|
//gPParamClass.Tolerance = "0.0001"; |
|
//gPParamClass.FirstFeatureLayer = m_JCLayer; |
|
//gPParamClass.OutFeatureClassPath = path; |
|
//gPParamClass.IsGetOutPutFeature = true; |
|
//GeoprocessorHelper.FeatureClassToFeatureClass(gPParamClass, "JC_DLTB", ref tempLayer); |
|
|
|
IFeatureLayer CK_DLTBBGLayer = null; |
|
gPParamClass.FirstFeatureLayer = m_Layer; |
|
gPParamClass.SecondFeatureLayer = m_JCLayer; |
|
gPParamClass.OutFeatureClassPath = path + "\\" + "CK_DLTB_CZC"; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
GeoprocessorHelper.UnionAnalysis(gPParamClass, ref CK_DLTBBGLayer); |
|
|
|
gPParamClass.FirstFeatureLayer = CK_DLTBBGLayer; |
|
gPParamClass.OutFeatureClassPath = path + "\\" + "CK_DLTB_CZC2"; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
GeoprocessorHelper.MultipartToSinglePath(gPParamClass, ref CK_DLTBBGLayer); |
|
|
|
IWorkspace tempWs = (CK_DLTBBGLayer.FeatureClass as FeatureClass).Workspace; |
|
string dbPath = System.IO.Path.GetDirectoryName((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetProjFilePath()) + @"\BGTJ.sqlite"; |
|
IRDBHelper rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); |
|
rdbHelper.ExecuteSQL(" drop table CK_DLTB_CZC2 "); |
|
IWorkspaceFactory pOutWorkFactory = new SqlWorkspaceFactoryClass(); |
|
IWorkspace pOutWork = pOutWorkFactory.OpenFromFile(dbPath, 0); |
|
TableToTable(tempWs as IFeatureWorkspace, pOutWork, "CK_DLTB_CZC2"); |
|
string jcdltbname = $"FID_{ m_JCLayer.FeatureClass.AliasName}"; |
|
DataTable dt = rdbHelper.ExecuteDatatable("TempCK_DLTB_CZC2", $"select * from (select * from CK_DLTB_CZC2 group by {jcdltbname} HAVING count(0) = 1) where FID_DLTBBG = -1", true); |
|
List<int> delOIDs = new List<int>(); |
|
if (dt != null) |
|
{ |
|
foreach (DataRow row in dt.Rows) |
|
{ |
|
int oid = row["OBJECTID"].ToInt(); |
|
if (!delOIDs.Contains(oid)) |
|
delOIDs.Add(oid); |
|
} |
|
} |
|
foreach (var oid in delOIDs) |
|
{ |
|
CK_DLTBBGLayer.FeatureClass.GetFeature(oid).Delete(); |
|
} |
|
rdbHelper.ExecuteSQL(" drop table CK_DLTB_CZC2 "); |
|
//featureProcess.TableToTable(inWs, pOutWork, "CK_DLTB_CZC2"); |
|
|
|
gPParamClass.FirstFeatureLayer = m_JCCZCLayer; |
|
gPParamClass.SecondFeatureLayer = CK_DLTBBGLayer; |
|
gPParamClass.OutFeatureClassPath = path + "\\" + "CK_DLTB_CZC_Result"; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
GeoprocessorHelper.UnionAnalysis(gPParamClass, ref CK_DLTBBGLayer); |
|
|
|
gPParamClass.FirstFeatureLayer = CK_DLTBBGLayer; |
|
//gPParamClass.SecondFeatureClass = tempLayer.FeatureClass; |
|
gPParamClass.OutFeatureClassPath = path + "\\" + "CK_DLTB_CZC_Result2"; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
GeoprocessorHelper.MultipartToSinglePath(gPParamClass, ref CK_DLTBBGLayer); |
|
rdbHelper.ExecuteSQL(" drop table CK_DLTB_CZC_Result2 "); |
|
//featureProcess.TableToTable(inWs, pOutWork, "CK_DLTB_CZC_Result2"); |
|
result = CK_DLTBBGLayer; |
|
} |
|
catch (Exception ex) |
|
{ |
|
throw ex; |
|
} |
|
return result; |
|
} |
|
|
|
public override void StartCheck(object pParm) |
|
{ |
|
|
|
IFeatureLayer CK_DLTBBGLayer = GetCheckLayer(); |
|
string dbPath = System.IO.Path.GetDirectoryName((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetProjFilePath()) + @"\BGTJ.sqlite"; |
|
IRDBHelper rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); |
|
DataTable dt = rdbHelper.ExecuteDatatable("error", string.Format("select * from CK_DLTB_CZC_Result2 where (czclx='203' or czclx='203A') and FID_DLTBBG=-1 and (czcsxm_1='' or czcsxm_1 is null)"), true); |
|
int idxArea = CK_DLTBBGLayer.FeatureClass.FindField("SHAPE_AREA"); |
|
int idxBGOID = CK_DLTBBGLayer.FeatureClass.FindField("FID_JC_DLTB"); |
|
int idxJCBSM = CK_DLTBBGLayer.FeatureClass.FindField("BSM_12"); |
|
string m_Msg = "基础地类图斑标识码为{0}的要素被动变更部分,在城镇村范围内,但城镇村属性码为空,变更后城镇村将会灭失,灭失面积 {1}"; |
|
if (dt != null) |
|
{ |
|
foreach (DataRow row in dt.Rows) |
|
{ |
|
IFeature err_F = CK_DLTBBGLayer.FeatureClass.GetFeature(row["OBJECTID"].ToInt()); |
|
double area = err_F.Value[idxArea].ToDouble(); |
|
int bgoid = err_F.Value[idxBGOID].ToInt(); |
|
string jcBSM = err_F.Value[idxJCBSM].ToTrim(); |
|
string strErrCode = "300100"; |
|
//if (bgoid == -1) |
|
//{ |
|
// strErrCode = "300200"; |
|
//} |
|
base.CheckResults.Add(new DataCheckResult() |
|
{ |
|
ErrorDesc = string.Format(m_Msg, jcBSM, area), |
|
ErrorCode = strErrCode, |
|
ErrorData = row["CZCLX"].ToTrim(), |
|
ErrorLayer = "JC_DLTB", |
|
PrimaryKey = "BSM", |
|
PrimaryKeyValue = jcBSM.ToTrim(), |
|
ErrorType = area <= 0.01 ? EnumErrorType.错误 : EnumErrorType.警告, |
|
ErrorArea = err_F.ShapeCopy.ToJson(), |
|
ErrorMJ = area |
|
}); |
|
System.Runtime.InteropServices.Marshal.ReleaseComObject(err_F); |
|
} |
|
} |
|
} |
|
|
|
public override void StartLoadData(object pParm) |
|
{ |
|
try |
|
{ |
|
string dbPath = System.IO.Path.Combine((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).ProjDir, "DataCheckrResult.db"); |
|
DataTable dtFJ = SQLiteDBOperate.Instance.ExceDataTable(dbPath, "select * from DataCheckResults WHERE ErrorCode = '300100' order by ErrorMJ"); |
|
if (dtFJ == null) |
|
return; |
|
IFeatureLayer dltbbg_Layer = MapsManager.Instance.MapService.GetFeatureLayerByName("DLTBBG"); |
|
int idxBsm = dltbbg_Layer.FeatureClass.FindField("BSM"); |
|
base.CheckResults.Clear(); |
|
for (int i = 0; i < dtFJ.Rows.Count; i++) |
|
{ |
|
int id = dtFJ.Rows[i]["ID"].ToInt(); |
|
var bgoid = dtFJ.Rows[i]["PrimaryKeyValue"]; |
|
string jcError = dtFJ.Rows[i]["ErrorDesc"].ToTrim(); |
|
string jcErroArea = dtFJ.Rows[i]["ErrorArea"].ToTrim(); |
|
string bgErrorType = dtFJ.Rows[i]["ErrorType"].ToTrim(); |
|
string bgErrorData = dtFJ.Rows[i]["ErrorData"].ToTrim(); |
|
string bgErrorCODE = dtFJ.Rows[i]["ErrorCode"].ToTrim(); |
|
//double area = jcError.Split('[')[1].Split(']')[0].ToDouble(); |
|
EnumErrorType errType = (EnumErrorType)Enum.Parse(typeof(EnumErrorType), bgErrorType); |
|
base.CheckResults.Add(new DataCheckResult() |
|
{ |
|
ID = id, |
|
ErrorData = bgErrorData, |
|
ErrorDesc = jcError, |
|
ErrorCode = bgErrorCODE, |
|
ErrorLayer = "JC_DLTB", |
|
PrimaryKey = "BSM", |
|
PrimaryKeyValue = bgoid.ToTrim(), |
|
ErrorType = errType, |
|
ErrorArea = jcErroArea, |
|
Icon = string.Format("pack://siteoforigin:,,,/Images/{0}.{1}", errType.ToString(), "png") |
|
}); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
MessageHelper.ShowError("加载检查结果视图数据失败,请查看日志!"); |
|
LogAPI.Debug(ex.Message); |
|
} |
|
} |
|
public void StartRepair2(object pParm) |
|
{ |
|
try |
|
{ |
|
ProgressHelper.ShowProcessBar("正在进行城镇村灭失数据修复……"); |
|
IFeatureLayer CK_DLTBBGLayer = GetCheckLayer(); |
|
ProgressHelper.ShowProcessBar("正在进行城镇村灭失数据修复……"); |
|
ProgressHelper.CountProgress = CK_DLTBBGLayer.FeatureClass.FeatureCount(null); |
|
IFeatureLayer m_BGLayer = MapsManager.Instance.MapService.GetFeatureLayerByName("DLTBBG"); |
|
string dbPath = System.IO.Path.GetDirectoryName((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetProjFilePath()) + @"\BGTJ.sqlite"; |
|
IRDBHelper rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); |
|
DataTable dt = rdbHelper.ExecuteDatatable("error", string.Format("select * from CK_DLTB_CZC_Result2 where (czclx='203' or czclx='203A') and FID_DLTBBG=-1 and (czcsxm_1='' or czcsxm_1 is null)"), true); |
|
|
|
int idxArea = CK_DLTBBGLayer.FeatureClass.FindField("SHAPE_AREA"); |
|
int idxBGOID = CK_DLTBBGLayer.FeatureClass.FindField("FID_JC_DLTB"); |
|
int idxJCBSM = CK_DLTBBGLayer.FeatureClass.FindField("BSM_12"); |
|
if (dt != null) |
|
{ |
|
IFeatureCursor insCursor = m_BGLayer.FeatureClass.Insert(true); |
|
int num = 0; |
|
string resultDbPath = System.IO.Path.GetDirectoryName((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).ProjDir) + @"\DataCheckrResult.db"; |
|
DataTable dtED = SQLiteDBOperate.Instance.ExceDataTable(resultDbPath, string.Format("select * from DataCheckResults WHERE ErrorCode == '300100' and ErrorMJ > {0} and (ErrorType='错误' or ErrorType='警告') order by ErrorMJ", pParm.ToDouble()));//失效数据集合 |
|
foreach (DataRow row in dt.Rows) |
|
{ |
|
num++; |
|
if (num % 100 == 0 || num == dt.Rows.Count) |
|
{ |
|
ProgressHelper.CurrentProgress = num; |
|
} |
|
IFeature err_F = CK_DLTBBGLayer.FeatureClass.GetFeature(row["OBJECTID"].ToInt()); |
|
double area = err_F.Value[idxArea].ToDouble(); |
|
int bgoid = err_F.Value[idxBGOID].ToInt(); |
|
string jcBSM = err_F.Value[idxJCBSM].ToTrim(); |
|
if (dtED != null) |
|
{ |
|
DataRow[] drs = dtED.Select(string.Format("PrimaryKeyValue='{0}' and ErrorMJ={1}", jcBSM, area)); |
|
if (drs == null || drs.Length == 0) continue; |
|
} |
|
if (area > pParm.ToDouble()) |
|
{ |
|
IFeatureBuffer buf = m_BGLayer.FeatureClass.CreateFeatureBuffer(); |
|
buf.Shape = err_F.ShapeCopy; |
|
int czclxIdx = err_F.Fields.FindField("CZCLX"); |
|
for (int fIdx = 0; fIdx < buf.Fields.FieldCount; fIdx++) |
|
{ |
|
IField field = buf.Fields.Field[fIdx]; |
|
if (!field.Editable || field.Name.ToUpper() == "SHAPE") continue; |
|
int bufIdx = err_F.Fields.FindField(field.Name.ToUpper() + "_1"); |
|
if (bufIdx == -1) continue; |
|
if (field.Name.ToUpper() == "CZCSXM" && czclxIdx != -1) |
|
{ |
|
buf.Value[fIdx] = err_F.Value[czclxIdx].ToTrim(); |
|
} |
|
else |
|
{ |
|
buf.Value[fIdx] = err_F.Value[bufIdx]; |
|
} |
|
} |
|
insCursor.InsertFeature(buf); |
|
|
|
//SQLiteDBOperate.Instance.ExecuteNonQuery(dbPath, sql, null); |
|
} |
|
System.Runtime.InteropServices.Marshal.ReleaseComObject(err_F); |
|
|
|
} |
|
insCursor.Flush(); |
|
string sql = string.Format("update DataCheckResults set ErrorType='已修复' where ErrorMJ > '{0}' and ErrorCode = '300100'", pParm.ToDouble()); |
|
SQLiteDBOperate.Instance.ExecuteNonQuery(dbPath, sql, null); |
|
} |
|
ProgressHelper.CloseProcessBar(); |
|
} |
|
catch (Exception ex) |
|
{ |
|
ProgressHelper.CloseProcessBar(); |
|
LogAPI.Debug(ex); |
|
throw ex; |
|
} |
|
} |
|
public override void StartRepair(object pParm) |
|
{ |
|
//ProgressHelper.ShowProcessBar("正在修复城镇村灭失数据……"); |
|
//string dbPath = System.IO.Path.Combine((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).ProjDir, "DataCheckrResult.db"); |
|
//DataTable dtED = SQLiteDBOperate.Instance.ExceDataTable(dbPath, string.Format("select * from DataCheckResults WHERE ErrorCode == '300100' and ErrorMJ > {0} and (ErrorType='错误' or ErrorType='警告') order by ErrorMJ Desc", pParm.ToDouble()));//失效数据集合 |
|
//if (dtED == null && dtED.Rows.Count == 0) return; |
|
//IFeatureLayer m_BGLayer = MapsManager.Instance.MapService.GetFeatureLayerByName("DLTBBG"); |
|
//IFeatureLayer m_JCLayer = MapsManager.Instance.MapService.GetFeatureLayerByName("JC_DLTB"); |
|
//IFeatureLayer m_JCCZCLayer = MapsManager.Instance.MapService.GetFeatureLayerByName("JC_CZCDYD"); |
|
//int idxJCBSM = m_JCLayer.FeatureClass.FindField("BSM"); |
|
//IFeatureCursor insCursor = m_BGLayer.FeatureClass.Insert(true); |
|
//string gdbFolder = Directory.GetCurrentDirectory() + "\\Temp\\BGQCheckDataRepair"; |
|
//if (!System.IO.Directory.Exists(gdbFolder)) |
|
//{ |
|
// System.IO.Directory.CreateDirectory(gdbFolder); |
|
//} |
|
//try |
|
//{ |
|
// DelectDir(gdbFolder);//能删除就删除 删除报错不处理 |
|
//} |
|
//catch |
|
//{ } |
|
//BasicDataModel[] dicXZQ = Platform.Instance.DicHelper.GetXZQDic(1); |
|
//if (dicXZQ == null) |
|
// dicXZQ = new BasicDataModel[] { }; |
|
//List<DataDicTionary> dicQS = Platform.Instance.DicHelper.GetNoGroupDic(DicTypeEnum.QSDM); |
|
//if (dicQS == null) |
|
// dicQS = new List<DataDicTionary>(); |
|
//IWorkspaceFactory pFtWsFct = null; |
|
//IWorkspaceName workspaceName = null; |
|
//pFtWsFct = new FileGDBWorkspaceFactory(); |
|
|
|
//string gdbFileName = Guid.NewGuid().ToString() + ".gdb"; |
|
//string path = System.IO.Path.Combine(gdbFolder, gdbFileName); |
|
//workspaceName = pFtWsFct.Create(gdbFolder, gdbFileName, null, 0); |
|
//IFeatureLayer tempLayer = null; |
|
//GPParamClass gPParamClass = new GPParamClass(); |
|
//ESRI.ArcGIS.Carto.IFeatureSelection selection = m_JCLayer as IFeatureSelection; |
|
//selection.Clear(); |
|
////设置基础地类图斑选中 |
|
//gPParamClass = new GPParamClass(); |
|
//gPParamClass.FirstFeatureLayer = m_JCLayer; |
|
//gPParamClass.SecondFeatureClass = m_JCCZCLayer.FeatureClass; |
|
////gPParamClass.Tolerance = "5"; |
|
//gPParamClass.IsGetOutPutFeature = true; |
|
//GeoprocessorHelper.SelectLayerByLocationAnalysis(gPParamClass, "INTERSECT", ref tempLayer); |
|
|
|
//gPParamClass = new GPParamClass(); |
|
//gPParamClass.FirstFeatureLayer = m_JCLayer; |
|
//gPParamClass.OutFeatureClassPath = path; |
|
//gPParamClass.IsGetOutPutFeature = true; |
|
//GeoprocessorHelper.FeatureClassToFeatureClass(gPParamClass, "TempJC_DLTB", ref tempLayer); |
|
|
|
//IFeatureLayer JCTB_Layer = GeoDBAPI.CreateFeatureLayerInmemeory("DLTBGX201", "地类图斑更新201数据", (m_JCLayer.FeatureClass as IGeoDataset).SpatialReference, m_JCLayer.FeatureClass.ShapeType, m_JCLayer.FeatureClass.Fields); |
|
//InsertDataToMemeoryLayer(tempLayer.FeatureClass, JCTB_Layer.FeatureClass, null); |
|
|
|
//selection.Clear(); |
|
|
|
|
|
////IFeatureLayer CK_DLTBBGLayer = GetCheckLayer(); |
|
//try |
|
//{ |
|
// //if (CK_DLTBBGLayer == null) return; |
|
// List<string> ListSql = new List<string>(); |
|
// //ProgressHelper.ShowProcessBar("正在进行城镇村灭失数据修复……"); |
|
// //ProgressHelper.CountProgress = CK_DLTBBGLayer.FeatureClass.FeatureCount(null); |
|
// int num = 0; |
|
// //IFeatureCursor cursor = CK_DLTBBGLayer.FeatureClass.Search(null, true); |
|
// ProgressHelper.CountProgress = dtED.Rows.Count; |
|
// foreach (DataRow dr in dtED.Rows) |
|
// { |
|
// num++; |
|
// if (num % 100 == 0 || num == dtED.Rows.Count) |
|
// { |
|
// ProgressHelper.CurrentProgress = num; |
|
// } |
|
// if (string.IsNullOrEmpty(dr["ErrorArea"].ToTrim())) |
|
// continue; |
|
// //string strPoly = dr["ErrorArea"].ToTrim().Replace(".0,", ".0006,"); |
|
// IGeometry geo = dr["ErrorArea"].ToTrim().ToGeometry(); |
|
// if (geo != null && !geo.IsEmpty) |
|
// { |
|
// ITopologicalOperator topo = geo as ITopologicalOperator; |
|
// topo.Simplify(); |
|
// IGeometry tempGeo = topo.Buffer(-0.01); |
|
// List<IFeature> bgFeatures = FeatureAPI.Identify(tempGeo, JCTB_Layer); |
|
// for (int i = 0; i < bgFeatures.Count;) |
|
// { |
|
// IFeature jcFeature = bgFeatures[0]; |
|
// IFeatureBuffer buf = m_BGLayer.FeatureClass.CreateFeatureBuffer(); |
|
// buf.Shape = geo; |
|
// for (int fIdx = 0; fIdx < jcFeature.Fields.FieldCount; fIdx++) |
|
// { |
|
// IField field = jcFeature.Fields.Field[fIdx]; |
|
// if (!field.Editable || field.Name.ToUpper() == "SHAPE") continue; |
|
// int bufIdx = buf.Fields.FindField(field.Name); |
|
// if (bufIdx == -1) continue; |
|
// if (field.Name.ToUpper() == "CZCSXM") |
|
// { |
|
// buf.Value[bufIdx] = dr["ErrorData"].ToTrim(); |
|
// } |
|
// else |
|
// { |
|
// buf.Value[bufIdx] = jcFeature.Value[fIdx]; |
|
// } |
|
// } |
|
// insCursor.InsertFeature(buf); |
|
|
|
// string sql = string.Format("update DataCheckResults set ErrorType='已修复' where ID = '{0}'", dr["ID"]); |
|
// ListSql.Add(sql); |
|
// //SQLiteDBOperate.Instance.ExecuteNonQuery(dbPath, sql, null); |
|
// System.Runtime.InteropServices.Marshal.ReleaseComObject(jcFeature); |
|
// break; |
|
// } |
|
// } |
|
// } |
|
// InsertSQLiteData(dbPath, ListSql); |
|
// insCursor.Flush(); |
|
//} |
|
//catch (Exception ex) |
|
//{ |
|
// LogAPI.Debug("修复城镇村灭失数据时发生异常,异常信息如下:"); |
|
// LogAPI.Debug(ex); |
|
//} |
|
//finally |
|
//{ |
|
// ProgressHelper.CloseProcessBar(); |
|
//} |
|
} |
|
|
|
public void InsertSQLiteData(string dbPath, List<string> sqlList) |
|
{ |
|
try |
|
{ |
|
//DateTime dtS = DateTime.Now; |
|
//LogAPI.Debug(sqlList.Count() + " 条; "); |
|
using (SQLiteConnection conn = new SQLiteConnection("Data Source=" + dbPath)) |
|
{ |
|
conn.Open(); |
|
using (SQLiteTransaction pTrans = conn.BeginTransaction()) |
|
{ |
|
using (SQLiteCommand cmd = new SQLiteCommand(conn)) |
|
{ |
|
for (int i = 0; i < sqlList.Count(); i++) |
|
{ |
|
cmd.CommandText = sqlList[i]; |
|
cmd.ExecuteNonQuery(); |
|
} |
|
pTrans.Commit(); |
|
} |
|
} |
|
conn.Close(); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("批量插入SQLite数据(地址:" + dbPath + ") 执行失败,异常原因: " + ex.Message + " ; "); |
|
return; |
|
} |
|
} |
|
public override void StartSingleRepair(object pParm) |
|
{ |
|
|
|
} |
|
private void DelectDir(string srcPath) |
|
{ |
|
try |
|
{ |
|
DirectoryInfo dir = new DirectoryInfo(srcPath); |
|
FileSystemInfo[] fileinfo = dir.GetFileSystemInfos(); //返回目录中所有文件和子目录 |
|
foreach (FileSystemInfo i in fileinfo) |
|
{ |
|
if (i is DirectoryInfo) //判断是否文件夹 |
|
{ |
|
DirectoryInfo subdir = new DirectoryInfo(i.FullName); |
|
subdir.Delete(true); //删除子目录和文件 |
|
} |
|
else |
|
{ |
|
File.Delete(i.FullName); //删除指定文件 |
|
} |
|
} |
|
} |
|
catch (Exception) |
|
{ |
|
throw; |
|
} |
|
} |
|
|
|
public bool TableToTable(IFeatureWorkspace pInWork, IWorkspace pOutWork, string tableName, IQueryFilter queryFilter = null) |
|
{ |
|
try |
|
{ |
|
if (pInWork == null || pOutWork == null || string.IsNullOrEmpty(tableName)) return false; |
|
IWorkspace2 workspace2 = pInWork as IWorkspace2; |
|
if (workspace2 != null) |
|
{ |
|
if (!workspace2.get_NameExists(esriDatasetType.esriDTFeatureClass, tableName)) |
|
{ |
|
return false; |
|
} |
|
} |
|
ITable pInTable = pInWork.OpenTable(tableName); |
|
if (pInTable == null) return false; |
|
IDataset pIndataset = (IDataset)pInTable; |
|
IDatasetName pInDatasetName = (IDatasetName)pIndataset.FullName; |
|
IEnumDataset enumDataset = pOutWork.get_Datasets(esriDatasetType.esriDTTable); |
|
IDataset dataset; |
|
enumDataset.Reset(); |
|
while ((dataset = enumDataset.Next()) != null) |
|
{ |
|
string[] names = dataset.Name.Split('.'); |
|
if (string.Equals(names[names.Length - 1], tableName, StringComparison.CurrentCultureIgnoreCase)) |
|
{ |
|
dataset.Delete(); |
|
break; |
|
} |
|
} |
|
IDataset pOutDataset = (IDataset)pOutWork; |
|
IDatasetName pOutDatasetName = new TableNameClass(); |
|
pOutDatasetName.WorkspaceName = (IWorkspaceName)pOutDataset.FullName; |
|
pOutDatasetName.Name = tableName; |
|
IFieldChecker fieldChecker = new FieldCheckerClass(); |
|
IFields targetFeatureClassFields = pInTable.Fields; |
|
IFields sourceFeatureClassFields = pInTable.Fields; |
|
IEnumFieldError enumFieldError; |
|
fieldChecker.InputWorkspace = pInWork as IWorkspace; |
|
fieldChecker.ValidateWorkspace = pOutWork; |
|
fieldChecker.Validate(sourceFeatureClassFields, out enumFieldError, out targetFeatureClassFields); |
|
IFeatureDataConverter one2another = new FeatureDataConverterClass(); |
|
try |
|
{ |
|
one2another.ConvertTable(pInDatasetName, queryFilter, pOutDatasetName, targetFeatureClassFields, "", 1000, 0); |
|
} |
|
finally |
|
{ |
|
Marshal.ReleaseComObject(one2another); |
|
} |
|
return true; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex); |
|
throw ex; |
|
} |
|
} |
|
|
|
public override void StartCheckForThread(object pParam) |
|
{ |
|
|
|
} |
|
} |
|
}
|
|
|