コード例 #1
0
ファイル: GeoDataChecker.cs プロジェクト: siszoey/geosufan
        //处理检查结果
        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);
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
ファイル: GeoDataChecker.cs プロジェクト: siszoey/geosufan
        //加载执行检查功能
        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);
             *  }
             * }
             * */
        }
コード例 #5
0
        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;
            }
        }
コード例 #6
0
        /// <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
        }
コード例 #7
0
        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
        }
コード例 #8
0
        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
        }
コード例 #9
0
        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;
                }
            }
        }
コード例 #10
0
        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
        }