//处理检查结果 public static void GeoDataChecker_DataErrTreat(object sender, DataErrTreatEvent e) { IArcgisDataCheckParaSet dataCheckParaSet = sender as IArcgisDataCheckParaSet; if (dataCheckParaSet == null) { return; } if (dataCheckParaSet.DbConnRes != null) { eErrorCount += 1; _CheckForm.Invoke(new ShowErrorCount(showECount), new object[] { eErrorCount }); InsertRowToAccess(dataCheckParaSet.DbConnRes, dataCheckParaSet.ErrResTableName, e); } }
public void OnDataCheck() { if (Hook == null) { return; } IArcgisDataCheckParaSet dataCheckParaSet = Hook.DataCheckParaSet as IArcgisDataCheckParaSet; if (dataCheckParaSet == null) { return; } if (dataCheckParaSet.Workspace == null) { return; } //获取所有数据集 SysCommon.Gis.SysGisDataSet sysGisDataSet = new SysCommon.Gis.SysGisDataSet(dataCheckParaSet.Workspace); List <IDataset> lstDT = sysGisDataSet.GetAllFeatureClass(); string path = dataCheckParaSet.Workspace.PathName; ExcuteCheck(lstDT, path); }
public void OnDataCheck() { Exception eError = null; if (Hook == null) { return; } IArcgisDataCheckParaSet dataCheckParaSet = Hook.DataCheckParaSet as IArcgisDataCheckParaSet; if (dataCheckParaSet == null) { return; } if (dataCheckParaSet.Workspace == null) { return; } //实现代码 SysCommon.DataBase.SysTable pSysTable = new SysCommon.DataBase.SysTable(); pSysTable.DbConn = dataCheckParaSet.DbConnPara; pSysTable.DBConType = SysCommon.enumDBConType.OLEDB; pSysTable.DBType = SysCommon.enumDBType.ACCESS; //获取所有数据集 SysCommon.Gis.SysGisDataSet sysGisDataSet = new SysCommon.Gis.SysGisDataSet(dataCheckParaSet.Workspace); List <string> featureDatasetNames = sysGisDataSet.GetAllFeatureDatasetNames(); if (featureDatasetNames.Count == 0) { return; } //设置进度条 ProgressChangeEvent eInfo = new ProgressChangeEvent(); eInfo.Max = featureDatasetNames.Count; int pValue = 0; //遍历数据集,并进行检查 foreach (string name in featureDatasetNames) { IFeatureDataset featureDataset = sysGisDataSet.GetFeatureDataset(name, out eError); if (eError != null) { continue; } //线线重合检查,参数为45 DataTable mTable = TopologyCheckClass.GetParaValueTable(featureDataset, pSysTable, 45, out eError); if (eError != null) { //SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", eError.Message); return; } if (mTable.Rows.Count == 0) { continue; } AreaTopoCheck2(Hook, featureDataset, mTable, esriTopologyRuleType.esriTRTLineCoveredByLineClass, out eError); if (eError != null) { eError = new Exception("线线重合检查失败!" + eError.Message); return; } //进度条加1 pValue++; eInfo.Value = pValue; GeoDataChecker.GeoDataChecker_ProgressShow((object)GeoDataChecker._ProgressBarInner, eInfo); } }
//加载执行检查功能 public static void LoadDataCheckLogicFunction(string logicFunName, IDataCheckHook hook, IDataCheckLogic dataCheckLogic) { IArcgisDataCheckHook dataCheckHook = hook as IArcgisDataCheckHook; if (dataCheckHook == null) { return; } IArcgisDataCheckParaSet checkParaSet = dataCheckHook.DataCheckParaSet as IArcgisDataCheckParaSet; if (checkParaSet == null) { return; } if (checkParaSet.XmlDocDataCheckSet == null) { return; } XmlNode aNode = checkParaSet.XmlDocDataCheckSet.DocumentElement.SelectSingleNode(".//LogicCheckFunction[@Name='" + logicFunName + "']"); if (aNode == null) { return; } if (aNode.ChildNodes.Count == 0) { return; } if (DicCheck == null) { return; } //设置进度条 //int pMax = aNode.ChildNodes.Count; //_CheckForm.Invoke(new IntiProgressBarOut(intiaProgressout), new object[] { pMax }); m_DicTopoDataCheck = new Dictionary <string, string>(); int pValue = 0; ProgressChangeEvent eInfo = new ProgressChangeEvent(); eInfo.Max = aNode.ChildNodes.Count; foreach (XmlNode childNode in aNode.ChildNodes) { XmlElement childElement = childNode as XmlElement; if (!childElement.HasAttribute("Name")) { continue; } string name = childElement.GetAttribute("Name"); string pText = childElement.GetAttribute("text").Trim(); string pType = childElement.GetAttribute("type").Trim(); if (pType == "拓扑检查") { if (!m_DicTopoDataCheck.ContainsKey(name)) { m_DicTopoDataCheck.Add(name, pText); } continue; } //if (DicCheck.ContainsKey(name)) //{ // _CheckForm.Invoke(new ShowErrorInfo(showEInfo), new object[] { pText }); // DicCheck[name].OnCreate(hook); // (DicCheck[name] as ICheckEvent).DataErrTreat += new DataErrTreatHandle(dataCheckLogic.DataCheckLogic_DataErrTreat); // (DicCheck[name] as ICheckEvent).ProgressShow += new ProgressChangeHandle(GeoDataChecker_ProgressShow); // DicCheck[name].OnDataCheck(); // //进度条加1 // pValue++; // eInfo.Value = pValue; // //进度条控制 // GeoDataChecker_ProgressShow((object)_PrgressBarOut, eInfo); //} } if (m_DicTopoDataCheck != null && m_DicTopoDataCheck.Count != 0) { //进行拓扑检查 if (DicCheck.ContainsKey("GeoDataChecker.GeoTopologyCheck")) { _CheckForm.Invoke(new ShowErrorInfo(showEInfo), new object[] { "进行拓扑检查" }); DicCheck["GeoDataChecker.GeoTopologyCheck"].OnCreate(hook); (DicCheck["GeoDataChecker.GeoTopologyCheck"] as ICheckEvent).DataErrTreat += new DataErrTreatHandle(dataCheckLogic.DataCheckLogic_DataErrTreat); (DicCheck["GeoDataChecker.GeoTopologyCheck"] as ICheckEvent).ProgressShow += new ProgressChangeHandle(GeoDataChecker_ProgressShow); DicCheck["GeoDataChecker.GeoTopologyCheck"].OnDataCheck(); pValue++; eInfo.Value = pValue; //进度条控制 GeoDataChecker_ProgressShow((object)_PrgressBarOut, eInfo); } } foreach (XmlNode childNode in aNode.ChildNodes) { XmlElement childElement = childNode as XmlElement; if (!childElement.HasAttribute("Name")) { continue; } string name = childElement.GetAttribute("Name"); string pText = childElement.GetAttribute("text").Trim(); string pType = childElement.GetAttribute("type").Trim(); if (pType == "拓扑检查") { continue; } if (DicCheck.ContainsKey(name)) { _CheckForm.Invoke(new ShowErrorInfo(showEInfo), new object[] { pText }); DicCheck[name].OnCreate(hook); (DicCheck[name] as ICheckEvent).DataErrTreat += new DataErrTreatHandle(dataCheckLogic.DataCheckLogic_DataErrTreat); (DicCheck[name] as ICheckEvent).ProgressShow += new ProgressChangeHandle(GeoDataChecker_ProgressShow); DicCheck[name].OnDataCheck(); //进度条加1 pValue++; eInfo.Value = pValue; //进度条控制 GeoDataChecker_ProgressShow((object)_PrgressBarOut, eInfo); } } /* * int pValue = 0; * ProgressChangeEvent eInfo = new ProgressChangeEvent(); * eInfo.Max=aNode.ChildNodes.Count; * * foreach (XmlNode childNode in aNode.ChildNodes) * { * XmlElement childElement = childNode as XmlElement; * if (!childElement.HasAttribute("Name")) continue; * string name = childElement.GetAttribute("Name"); * string pText = childElement.GetAttribute("text").Trim(); * * //如果不是库体结构检查,就用多线程 * //Thread pThread = new Thread(new ThreadStart(delegate { DataCheckRelizeFunction(name, pValue, eInfo, hook, dataCheckLogic); })); * //pThread.Start(); * if (DicCheck.ContainsKey(name)) * { * _CheckForm.Invoke(new ShowErrorInfo(showEInfo), new object[] { pText }); * * DicCheck[name].OnCreate(hook); * (DicCheck[name] as ICheckEvent).DataErrTreat += new DataErrTreatHandle(dataCheckLogic.DataCheckLogic_DataErrTreat); * (DicCheck[name] as ICheckEvent).ProgressShow += new ProgressChangeHandle(GeoDataChecker_ProgressShow); * DicCheck[name].OnDataCheck(); * //进度条加1 * pValue++; * eInfo.Value = pValue; * //_CheckForm.Invoke(new ChangeProgressBarOut(changeProgressOut), new object[] { pValue }); * //进度条控制 * GeoDataChecker_ProgressShow((object)_PrgressBarOut, eInfo); * } * } * */ }
public void OnDataCheck() { if (Hook == null) { return; } IArcgisDataCheckParaSet dataCheckParaSet = Hook.DataCheckParaSet as IArcgisDataCheckParaSet; if (dataCheckParaSet == null) { return; } if (dataCheckParaSet.Workspace == null) { return; } //获取所有数据集 SysCommon.Gis.SysGisDataSet sysGisDataSet = new SysCommon.Gis.SysGisDataSet(dataCheckParaSet.Workspace); List <IDataset> featureDatasets = sysGisDataSet.GetAllFeatureClass(); ISchemeProject m_pProject = null; //数据库结构文件对象 int m_DBScale = 0; //默认比例尺 int m_DSScale = 0; //数据集比例尺 Dictionary <string, IFeatureClass> pLayerDic = new Dictionary <string, IFeatureClass>(); //记录加载到map上的图层对象 foreach (IDataset var in featureDatasets) { string FCName = var.Name; if (FCName.Contains(".")) { FCName = FCName.Substring(FCName.IndexOf('.') + 1); } IFeatureClass FC = var as IFeatureClass; if (FC != null && !pLayerDic.ContainsKey(FCName)) { pLayerDic.Add(FCName, FC); } } ///读取配置方案到对象 /// m_pProject = new SchemeProjectClass(); //创建实例 m_pProject.Load(GeoDataChecker.DBSchemaPath, e_FileType.GO_SCHEMEFILETYPE_MDB); //加载schema文件 if (m_pProject != null) { #region 获得比例尺信息 string DBScale = m_pProject.get_MetaDataValue("Scale") as string; //获取比例尺信息(总工程中的默认比例尺) string[] DBPScaleArayy = DBScale.Split(':'); m_DBScale = Convert.ToInt32(DBPScaleArayy[1]); #endregion IChildItemList pProjects = m_pProject as IChildItemList; //获取属性库集合信息 ISchemeItem pDBList = pProjects.get_ItemByName("ATTRDB"); IChildItemList pDBLists = pDBList as IChildItemList; //遍历属性库集合 long DBNum = pDBLists.GetCount(); for (int i = 0; i < DBNum; i++) { m_DSScale = 0; //比例尺信息 //取得属性库信息 ISchemeItem pDB = pDBLists.get_ItemByIndex(i); ///获取数据集的比例尺信息,如果获取失败则,取默认比例尺信息 IAttribute pa = pDB.AttributeList.get_AttributeByName("Scale") as IAttribute; if (pa == null) { m_DSScale = m_DBScale; } else { string[] DBScaleArayy = pa.Value.ToString().Split(':'); m_DSScale = Convert.ToInt32(DBScaleArayy[1]); } IChildItemList pDBs = pDB as IChildItemList; string pDatasetName = pDB.Name; ////遍历属性表 int TabNum = pDBs.GetCount(); for (int j = 0; j < TabNum; j++) { //获取属性表信息 ISchemeItem pTable = pDBs.get_ItemByIndex(j); //获取属性表对象 string pFeatureClassName = pTable.Name; //要素类名称 ///检查图层是否存在 if (!pLayerDic.ContainsKey(pFeatureClassName)) { //传递错误日志 IDataErrInfo dataErrInfo = new DataErrInfo(new List <object>(new object[] { "批量检查", "数据结构检查", dataCheckParaSet.Workspace.PathName, enumErrorType.目标要素类缺失.GetHashCode(), "要素类在标准中存在,却在目标数据集中未找到", 0, 0, pFeatureClassName, 0, "", 0, false, System.DateTime.Now.ToString() })); DataErrTreatEvent dataErrTreatEvent = new DataErrTreatEvent(dataErrInfo); DataErrTreat(Hook.DataCheckParaSet as object, dataErrTreatEvent); continue; } #region 检查要素类类型是否与配置方案一致 string pFeatureClassType = pTable.Value as string; //要素类类型 ///检查图层类型是否一致 /// IFeatureClass pfeatureclass; bool GetlyrSeccess = pLayerDic.TryGetValue(pFeatureClassName, out pfeatureclass); if (GetlyrSeccess) { //IFeatureLayer pFeatureLayer = player as IFeatureLayer; switch (pFeatureClassType) { case "ANNO": if (pfeatureclass.FeatureType != esriFeatureType.esriFTAnnotation) { //传递错误日志 IDataErrInfo dataErrInfo = new DataErrInfo(new List <object>(new object[] { "批量检查", "数据结构检查", dataCheckParaSet.Workspace.PathName, enumErrorType.要素类类型不一致.GetHashCode(), "目标要素类应为 注记 类型", 0, 0, pFeatureClassName, 0, "", 0, false, System.DateTime.Now.ToString() })); DataErrTreatEvent dataErrTreatEvent = new DataErrTreatEvent(dataErrInfo); DataErrTreat(Hook.DataCheckParaSet as object, dataErrTreatEvent); } break; case "POINT": if (pfeatureclass.ShapeType != ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint) { //传递错误日志 IDataErrInfo dataErrInfo = new DataErrInfo(new List <object>(new object[] { "批量检查", "数据结构检查", dataCheckParaSet.Workspace.PathName, enumErrorType.要素类类型不一致.GetHashCode(), "目标要素类应为 点 类型", 0, 0, pFeatureClassName, 0, "", 0, false, System.DateTime.Now.ToString() })); DataErrTreatEvent dataErrTreatEvent = new DataErrTreatEvent(dataErrInfo); DataErrTreat(Hook.DataCheckParaSet as object, dataErrTreatEvent); } break; case "LINE": if (pfeatureclass.ShapeType != ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline) { //传递错误日志 IDataErrInfo dataErrInfo = new DataErrInfo(new List <object>(new object[] { "批量检查", "数据结构检查", dataCheckParaSet.Workspace.PathName, enumErrorType.要素类类型不一致.GetHashCode(), "目标要素类应为 线 类型", 0, 0, pFeatureClassName, 0, "", 0, false, System.DateTime.Now.ToString() })); DataErrTreatEvent dataErrTreatEvent = new DataErrTreatEvent(dataErrInfo); DataErrTreat(Hook.DataCheckParaSet as object, dataErrTreatEvent); } break; case "AREA": if (pfeatureclass.ShapeType != ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon) { //传递错误日志 IDataErrInfo dataErrInfo = new DataErrInfo(new List <object>(new object[] { "批量检查", "数据结构检查", dataCheckParaSet.Workspace.PathName, enumErrorType.要素类类型不一致.GetHashCode(), "目标要素类应为 面 类型", 0, 0, pFeatureClassName, 0, "", 0, false, System.DateTime.Now.ToString() })); DataErrTreatEvent dataErrTreatEvent = new DataErrTreatEvent(dataErrInfo); DataErrTreat(Hook.DataCheckParaSet as object, dataErrTreatEvent); } break; default: break; } } else { continue; } #endregion //遍历字段 IAttributeList pAttrs = pTable.AttributeList; long FNum = pAttrs.GetCount(); //检查非GIS平台定义的字段 IFields fields = pfeatureclass.Fields; //循环属性表中的字段,添加到arcgis的字段对象中 for (int k = 0; k < FNum; k++) { //添加自定义属性字段 CheckFields(pAttrs, k, fields, pFeatureClassName, dataCheckParaSet); } } } } else { return; } }
/// <summary> /// 根据输入的字段属性对象,检查属性字段是否与标准中定义的一致 /// </summary> /// <param name="pAttrs"></param> /// <param name="k"></param> /// <param name="fields"></param> private void CheckFields(IAttributeList pAttrs, int k, IFields fields, string pFeatureClassName, IArcgisDataCheckParaSet dataCheckParaSet) { //获取基本属性信息 IAttribute pAttr = pAttrs.get_AttributeByIndex(k); //获取扩展属性信息 IAttributeDes pAttrDes = pAttr.Description; ///检查是否存在该名称的字段 /// int i = fields.FindField(pAttr.Name); if (i < 0) { //传递错误日志 IDataErrInfo dataErrInfo = new DataErrInfo(new List <object>(new object[] { "批量检查", "数据结构检查", dataCheckParaSet.Workspace.PathName, enumErrorType.属性字段缺失.GetHashCode(), "目标要素类的 " + pAttr.Name + " 字段缺失", 0, 0, pFeatureClassName, 0, "", 0, false, System.DateTime.Now.ToString() })); DataErrTreatEvent dataErrTreatEvent = new DataErrTreatEvent(dataErrInfo); DataErrTreat(Hook.DataCheckParaSet as object, dataErrTreatEvent); return; } IField pField = fields.get_Field(i); #region 字段类型检查 ///检查字段类型是否一致 /// string pfieldType = pAttr.Type.ToString(); switch (pfieldType) { case "GO_VALUETYPE_STRING": if (pField.Type != esriFieldType.esriFieldTypeString) { //传递错误日志 IDataErrInfo dataErrInfo = new DataErrInfo(new List <object>(new object[] { "批量检查", "数据结构检查", dataCheckParaSet.Workspace.PathName, enumErrorType.属性字段类型不一致.GetHashCode(), "目标要素类的 " + pField.Name + " 字段应为字符串类型", 0, 0, pFeatureClassName, 0, "", 0, false, System.DateTime.Now.ToString() })); DataErrTreatEvent dataErrTreatEvent = new DataErrTreatEvent(dataErrInfo); DataErrTreat(Hook.DataCheckParaSet as object, dataErrTreatEvent); } break; case "GO_VALUETYPE_LONG": if (pField.Type != esriFieldType.esriFieldTypeInteger) { //传递错误日志 IDataErrInfo dataErrInfo = new DataErrInfo(new List <object>(new object[] { "批量检查", "数据结构检查", dataCheckParaSet.Workspace.PathName, enumErrorType.属性字段类型不一致.GetHashCode(), "目标要素类的 " + pField.Name + " 字段应为长整类型", 0, 0, pFeatureClassName, 0, "", 0, false, System.DateTime.Now.ToString() })); DataErrTreatEvent dataErrTreatEvent = new DataErrTreatEvent(dataErrInfo); DataErrTreat(Hook.DataCheckParaSet as object, dataErrTreatEvent); } break; case "GO_VALUETYPE_BOOL": break; case "GO_VALUETYPE_DATE": if (pField.Type != esriFieldType.esriFieldTypeDate) { //传递错误日志 IDataErrInfo dataErrInfo = new DataErrInfo(new List <object>(new object[] { "批量检查", "数据结构检查", dataCheckParaSet.Workspace.PathName, enumErrorType.属性字段类型不一致.GetHashCode(), "目标要素类的 " + pField.Name + " 字段应为日期类型", 0, 0, pFeatureClassName, 0, "", 0, false, System.DateTime.Now.ToString() })); DataErrTreatEvent dataErrTreatEvent = new DataErrTreatEvent(dataErrInfo); DataErrTreat(Hook.DataCheckParaSet as object, dataErrTreatEvent); } break; case "GO_VALUETYPE_FLOAT": if (pField.Type != esriFieldType.esriFieldTypeSingle) { //传递错误日志 IDataErrInfo dataErrInfo = new DataErrInfo(new List <object>(new object[] { "批量检查", "数据结构检查", dataCheckParaSet.Workspace.PathName, enumErrorType.属性字段类型不一致.GetHashCode(), "目标要素类的 " + pField.Name + " 字段应为浮点类型", 0, 0, pFeatureClassName, 0, "", 0, false, System.DateTime.Now.ToString() })); DataErrTreatEvent dataErrTreatEvent = new DataErrTreatEvent(dataErrInfo); DataErrTreat(Hook.DataCheckParaSet as object, dataErrTreatEvent); } break; case "GO_VALUETYPE_DOUBLE": if (pField.Type != esriFieldType.esriFieldTypeDouble) { //传递错误日志 IDataErrInfo dataErrInfo = new DataErrInfo(new List <object>(new object[] { "批量检查", "数据结构检查", dataCheckParaSet.Workspace.PathName, enumErrorType.属性字段类型不一致.GetHashCode(), "目标要素类的 " + pField.Name + " 字段应为双精度类型", 0, 0, pFeatureClassName, 0, "", 0, false, System.DateTime.Now.ToString() })); DataErrTreatEvent dataErrTreatEvent = new DataErrTreatEvent(dataErrInfo); DataErrTreat(Hook.DataCheckParaSet as object, dataErrTreatEvent); } break; default: break; } #endregion #region 字段长度检查 if (pfieldType != "GO_VALUETYPE_DOUBLE") { if (pField.Length != Convert.ToInt32(pAttrDes.InputWidth)) { //传递错误日志 IDataErrInfo dataErrInfo = new DataErrInfo(new List <object>(new object[] { "批量检查", "数据结构检查", dataCheckParaSet.Workspace.PathName, enumErrorType.字段扩展属性不一致.GetHashCode(), "目标要素类的 " + pField.Name + " 字段长度应" + Convert.ToInt32(pAttrDes.InputWidth).ToString(), 0, 0, pFeatureClassName, 0, "", 0, false, System.DateTime.Now.ToString() })); DataErrTreatEvent dataErrTreatEvent = new DataErrTreatEvent(dataErrInfo); DataErrTreat(Hook.DataCheckParaSet as object, dataErrTreatEvent); } } #endregion #region 字段可否为空检查 if (pField.IsNullable != pAttrDes.AllowNull) { //传递错误日志 IDataErrInfo dataErrInfo = new DataErrInfo(new List <object>(new object[] { "批量检查", "数据结构检查", dataCheckParaSet.Workspace.PathName, enumErrorType.字段扩展属性不一致.GetHashCode(), "目标要素类的 " + pField.Name + " 字段是否为空属性应为" + pAttrDes.AllowNull.ToString(), 0, 0, pFeatureClassName, 0, "", 0, false, System.DateTime.Now.ToString() })); DataErrTreatEvent dataErrTreatEvent = new DataErrTreatEvent(dataErrInfo); DataErrTreat(Hook.DataCheckParaSet as object, dataErrTreatEvent); } #endregion #region 字段是否必须存在检查 if (pField.Required != bool.Parse(pAttrDes.Necessary.ToString())) { //传递错误日志 IDataErrInfo dataErrInfo = new DataErrInfo(new List <object>(new object[] { "批量检查", "数据结构检查", dataCheckParaSet.Workspace.PathName, enumErrorType.字段扩展属性不一致.GetHashCode(), "目标要素类的 " + pField.Name + " 字段是否必须属性应为" + pAttrDes.Necessary.ToString(), 0, 0, pFeatureClassName, 0, "", 0, false, System.DateTime.Now.ToString() })); DataErrTreatEvent dataErrTreatEvent = new DataErrTreatEvent(dataErrInfo); DataErrTreat(Hook.DataCheckParaSet as object, dataErrTreatEvent); } #endregion #region 字段是否可编辑检查 #endregion #region 字段值域是否可变检查 #endregion #region 字段精度检查 //双精度类型不可设置精度(在PDB和GDB中不会出现错误,但是在SDE中会抛出“无效的列”错误) if (pfieldType != "GO_VALUETYPE_DOUBLE") { if (pField.Precision != Convert.ToInt32(pAttrDes.PrecisionEx)) { //传递错误日志 IDataErrInfo dataErrInfo = new DataErrInfo(new List <object>(new object[] { "批量检查", "数据结构检查", dataCheckParaSet.Workspace.PathName, enumErrorType.字段扩展属性不一致.GetHashCode(), "目标要素类的 " + pField.Name + " 字段精度应为" + pAttrDes.PrecisionEx.ToString(), 0, 0, pFeatureClassName, 0, "", 0, false, System.DateTime.Now.ToString() })); DataErrTreatEvent dataErrTreatEvent = new DataErrTreatEvent(dataErrInfo); DataErrTreat(Hook.DataCheckParaSet as object, dataErrTreatEvent); } } #endregion }
public void OnDataCheck() { Exception eError = null; if (Hook == null) { return; } IArcgisDataCheckParaSet dataCheckParaSet = Hook.DataCheckParaSet as IArcgisDataCheckParaSet; if (dataCheckParaSet == null) { return; } if (dataCheckParaSet.Workspace == null) { return; } //实现代码 SysCommon.DataBase.SysTable pSysTable = new SysCommon.DataBase.SysTable(); pSysTable.DbConn = dataCheckParaSet.DbConnPara; pSysTable.DBConType = SysCommon.enumDBConType.OLEDB; pSysTable.DBType = SysCommon.enumDBType.ACCESS; //高程点图层,参数ID为19(还需要改进) string pointFeaclsname = TopologyCheckClass.GetParaValue(pSysTable, 19, out eError); if (eError != null) { eError = new Exception("读取数据减配置表失败。" + eError.Message); return; } //等高线图层,参数ID为20 string lineFeaclsname = TopologyCheckClass.GetParaValue(pSysTable, 20, out eError); if (eError != null) { eError = new Exception("读取数据减配置表失败。" + eError.Message); return; } //高程点高程字段名,参数ID为22 string pointFieldsname = TopologyCheckClass.GetParaValue(pSysTable, 22, out eError); if (eError != null) { eError = new Exception("读取数据减配置表失败。" + eError.Message); return; } //等高线高程字段名,参数ID为23 string lineFieldname = TopologyCheckClass.GetParaValue(pSysTable, 23, out eError); if (eError != null) { eError = new Exception("读取数据减配置表失败。" + eError.Message); return; } //等高线间距值,参数ID为21 string intervalValue = TopologyCheckClass.GetParaValue(pSysTable, 21, out eError); if (eError != null) { eError = new Exception("读取数据减配置表失败。" + eError.Message); return; } //高程点搜索半径,参数ID为38 string radiu = TopologyCheckClass.GetParaValue(pSysTable, 38, out eError); if (eError != null) { eError = new Exception("读取数据减配置表失败。" + eError.Message); return; } SysCommon.Gis.SysGisDataSet sysGisDataSet = new SysCommon.Gis.SysGisDataSet(dataCheckParaSet.Workspace); List <IDataset> LstFeaClass = sysGisDataSet.GetAllFeatureClass(); if (LstFeaClass.Count == 0) { return; } //执行等高线点线矛盾检查 PointLineElevCheck(Hook, LstFeaClass, lineFeaclsname, lineFieldname, pointFeaclsname, pointFieldsname, Convert.ToDouble(intervalValue), out eError); if (eError != null) { eError = new Exception("等高线点线矛盾检查失败!" + eError.Message); return; } #region ////获取所有数据集 //SysCommon.Gis.SysGisDataSet sysGisDataSet = new SysCommon.Gis.SysGisDataSet(dataCheckParaSet.Workspace); //List<string> featureDatasetNames = sysGisDataSet.GetAllFeatureDatasetNames(); //if (featureDatasetNames.Count == 0) return; //foreach (string name in featureDatasetNames) //{ // IFeatureDataset featureDataset = sysGisDataSet.GetFeatureDataset(name, out eError); // if (eError != null) continue; // //高程点图层,参数ID为19(还需要改进) // string pointFeaclsname = TopologyCheckClass.GetParaValue(pSysTable, 19, out eError); // if (eError != null) // { // eError=new Exception("读取数据减配置表失败。" + eError.Message); // return; // } // //等高线图层,参数ID为20 // string lineFeaclsname = TopologyCheckClass.GetParaValue(pSysTable, 20, out eError); // if (eError != null) // { // eError = new Exception("读取数据减配置表失败。" + eError.Message); // return; // } // //高程点高程字段名,参数ID为22 // string pointFieldsname = TopologyCheckClass.GetParaValue(pSysTable, 22, out eError); // if (eError != null) // { // eError = new Exception("读取数据减配置表失败。" + eError.Message); // return; // } // //等高线高程字段名,参数ID为23 // string lineFieldname = TopologyCheckClass.GetParaValue(pSysTable, 23, out eError); // if (eError != null) // { // eError = new Exception("读取数据减配置表失败。" + eError.Message); // return; // } // //等高线间距值,参数ID为21 // string intervalValue = TopologyCheckClass.GetParaValue(pSysTable, 21, out eError); // if (eError != null) // { // eError = new Exception("读取数据减配置表失败。" + eError.Message); // return; // } // //高程点搜索半径,参数ID为38 // string radiu = TopologyCheckClass.GetParaValue(pSysTable, 38, out eError); // if (eError != null) // { // eError = new Exception("读取数据减配置表失败。" + eError.Message); // return; // } // //执行等高线点线矛盾检查 // PointLineElevCheck(Hook,featureDataset, lineFeaclsname, lineFieldname, pointFeaclsname, pointFieldsname, Convert.ToDouble(intervalValue), out eError); // if (eError != null) // { // eError = new Exception("等高线点线矛盾检查失败!" + eError.Message); // return; // } //} #endregion }
public void OnDataCheck() { Exception eError = null; if (Hook == null) { return; } IArcgisDataCheckParaSet dataCheckParaSet = Hook.DataCheckParaSet as IArcgisDataCheckParaSet; if (dataCheckParaSet == null) { return; } if (dataCheckParaSet.Workspace == null) { return; } //实现代码 SysCommon.DataBase.SysTable pSysTable = new SysCommon.DataBase.SysTable(); pSysTable.DbConn = dataCheckParaSet.DbConnPara; pSysTable.DBConType = SysCommon.enumDBConType.OLEDB; pSysTable.DBType = SysCommon.enumDBType.ACCESS; //分类代码字段名 string codeName = TopologyCheckClass.GetCodeName(pSysTable, out eError); if (eError != null) { //eError=new Exception(eError.Message); return; } //等高线注记检查,参数ID为31 DataTable mTable = TopologyCheckClass.GetParaValueTable(pSysTable, 31, out eError); if (eError != null) { //SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", eError.Message); return; } if (mTable.Rows.Count == 0) { //eError = new Exception("未进行等高线注记一致性检查参数配置!"); return; } //等高线注记检查搜索半径,参数ID为34 string paraValue3 = TopologyCheckClass.GetParaValue(pSysTable, 34, out eError); if (eError != null) { eError = new Exception("读取数据减配置表失败。" + eError.Message); return; } double serchRadiu3 = Convert.ToDouble(paraValue3); //等高线注记检查精度控制,参数ID为37 paraValue3 = TopologyCheckClass.GetParaValue(pSysTable, 37, out eError); if (eError != null) { eError = new Exception("读取数据减配置表失败。" + eError.Message); return; } long precision3 = Convert.ToInt64(paraValue3); SysCommon.Gis.SysGisDataSet sysGisDataSet = new SysCommon.Gis.SysGisDataSet(dataCheckParaSet.Workspace); List <IDataset> LstFeaClass = sysGisDataSet.GetAllFeatureClass(); if (LstFeaClass.Count == 0) { return; } //执行等高线注记检查 PointAnnoCheck(Hook, LstFeaClass, mTable, codeName, serchRadiu3, precision3, out eError); if (eError != null) { eError = new Exception("等高线注记检查失败。" + eError.Message); return; } #region 分类代码字段名 //string codeName = TopologyCheckClass.GetCodeName(pSysTable, out eError); //if (eError != null) //{ // //eError=new Exception(eError.Message); // return; //} ////获取所有数据集 //SysCommon.Gis.SysGisDataSet sysGisDataSet = new SysCommon.Gis.SysGisDataSet(dataCheckParaSet.Workspace); //List<string> featureDatasetNames = sysGisDataSet.GetAllFeatureDatasetNames(); //if (featureDatasetNames.Count == 0) return; //foreach (string name in featureDatasetNames) //{ // IFeatureDataset featureDataset = sysGisDataSet.GetFeatureDataset(name, out eError); // if (eError != null) continue; // //等高线注记检查,参数ID为31 // DataTable mTable = TopologyCheckClass.GetParaValueTable(featureDataset, pSysTable, 31, out eError); // if (eError != null) // { // //SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", eError.Message); // return; // } // if (mTable.Rows.Count == 0) // { // continue; // } // //等高线注记检查搜索半径,参数ID为34 // string paraValue3 = TopologyCheckClass.GetParaValue(pSysTable, 34, out eError); // if (eError != null) // { // eError = new Exception("读取数据减配置表失败。" + eError.Message); // return; // } // double serchRadiu3 = Convert.ToDouble(paraValue3); // //等高线注记检查精度控制,参数ID为37 // paraValue3 = TopologyCheckClass.GetParaValue(pSysTable, 37, out eError); // if (eError != null) // { // eError = new Exception("读取数据减配置表失败。" + eError.Message); // return; // } // long precision3 = Convert.ToInt64(paraValue3); // //执行等高线注记检查 // PointAnnoCheck(Hook, featureDataset, mTable, codeName, serchRadiu3, precision3, out eError); // if (eError != null) // { // eError = new Exception("等高线注记检查失败。" + eError.Message); // return; // } //} #endregion }
public void OnDataCheck() { Exception eError = null; if (Hook == null) { return; } IArcgisDataCheckParaSet dataCheckParaSet = Hook.DataCheckParaSet as IArcgisDataCheckParaSet; if (dataCheckParaSet == null) { return; } if (dataCheckParaSet.Workspace == null) { return; } //实现代码 SysCommon.DataBase.SysTable pSysTable = new SysCommon.DataBase.SysTable(); pSysTable.DbConn = dataCheckParaSet.DbConnPara; pSysTable.DBConType = SysCommon.enumDBConType.OLEDB; pSysTable.DBType = SysCommon.enumDBType.ACCESS; //获取所有数据集 SysCommon.Gis.SysGisDataSet sysGisDataSet = new SysCommon.Gis.SysGisDataSet(dataCheckParaSet.Workspace); List <string> featureDatasetNames = sysGisDataSet.GetAllFeatureDatasetNames(); if (featureDatasetNames.Count == 0) { return; } foreach (string name in featureDatasetNames) { IFeatureDataset featureDataset = sysGisDataSet.GetFeatureDataset(name, out eError); if (eError != null) { continue; } //线穿面检查,参数ID为17 DataTable mTable = TopologyCheckClass.GetParaValueTable(featureDataset, pSysTable, 17, out eError); if (eError != null) { //SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", eError.Message); return; } if (mTable.Rows.Count == 0) { continue; } LineCrossAreaCheck(Hook, featureDataset, mTable, out eError); if (eError != null) { eError = new Exception("线穿面检查失败!" + eError.Message); return; } } }
public void OnDataCheck() { Exception eError = null; if (Hook == null) { return; } IArcgisDataCheckParaSet dataCheckParaSet = Hook.DataCheckParaSet as IArcgisDataCheckParaSet; if (dataCheckParaSet == null) { return; } if (dataCheckParaSet.Workspace == null) { return; } string path = dataCheckParaSet.Workspace.PathName; //实现代码 SysCommon.DataBase.SysTable pSysTable = new SysCommon.DataBase.SysTable(); pSysTable.DbConn = dataCheckParaSet.DbConnPara; pSysTable.DBConType = SysCommon.enumDBConType.OLEDB; pSysTable.DBType = SysCommon.enumDBType.ACCESS; DataTable mTable = TopologyCheckClass.GetParaValueTable(pSysTable, 2, out eError); if (eError != null) { //SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", eError.Message); return; } if (mTable.Rows.Count == 0) { //SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "未进行空值检查配置!"); return; } SysCommon.Gis.SysGisDataSet sysGisDataSet = new SysCommon.Gis.SysGisDataSet(dataCheckParaSet.Workspace); List <IDataset> LstFeaClass = sysGisDataSet.GetAllFeatureClass(); if (LstFeaClass.Count == 0) { return; } //执行空值检查 IsNullCheck(Hook, LstFeaClass, mTable, path, out eError); if (eError != null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "空值检查失败。" + eError.Message); return; } #region ////获取所有数据集 //SysCommon.Gis.SysGisDataSet sysGisDataSet = new SysCommon.Gis.SysGisDataSet(dataCheckParaSet.Workspace); //List<string> featureDatasetNames = sysGisDataSet.GetAllFeatureDatasetNames(); //if (featureDatasetNames.Count == 0) return; //foreach (string name in featureDatasetNames) //{ // IFeatureDataset featureDataset = sysGisDataSet.GetFeatureDataset(name, out eError); // if (eError != null) continue; // //空值检查参数ID为2 // DataTable mTable = TopologyCheckClass.GetParaValueTable(featureDataset, pSysTable, 2, out eError); // if (eError != null) // { // //SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", eError.Message); // return; // } // if (mTable.Rows.Count == 0) // { // continue; // } // //执行空值检查 // IsNullCheck(Hook, featureDataset, mTable, out eError); // if (eError != null) // { // eError=new Exception("空值检查失败。" + eError.Message); // return; // } //} #endregion }