예제 #1
0
        public virtual void Check()
        {
            foreach (var tool in Tools)
            {
                if (tool.Check(ParameterManager2.Connection) == false)
                {
                    QuestionManager2.Add(new Question2
                    {
                        Code         = ID,
                        Name         = RuleName,
                        TableName    = tool.TableName,
                        CheckProject = CheckProject,
                        Description  = string.Format("执行质检规则【{0}】失败", tool.Name)
                    });
                }

                if (tool.Messages2.Count > 0)
                {
                    QuestionManager2.AddRange(tool.Messages2.Select(e => new Question2
                    {
                        Code           = ID,
                        Name           = RuleName,
                        TableName      = tool.TableName,
                        CheckProject   = CheckProject,
                        Description    = e.Description,
                        LocationClause = e.WhereClause
                    }).ToList());
                }
            }
        }
        public void Check()
        {
            #region 检查质检目录下的所有文件夹是否存在
            var resultComplete = new ResultComplete(ParameterManager2.Folder)
            {
                Children = ParameterManager2.Folders
            };
            resultComplete.Check();

            QuestionManager2.AddRange(resultComplete.Messages.Select(e =>
                                                                     new Question2
            {
                Code         = "110101",
                Name         = RuleName,
                CheckProject = CheckProject2.目录及文件规范性,
                Description  = e,
                Folder       = ParameterManager2.Folder
            }).ToList());
            #endregion

            var tool = new FileStandard {
                Files = ParameterManager2.Files
            };
            tool.Check2();
            QuestionManager2.AddRange(tool.List.Select(e => new Question2
            {
                Code         = "110102",
                Name         = RuleName,
                CheckProject = CheckProject2.目录及文件规范性,
                Description  = e,
                Folder       = ParameterManager2.Folder
            }
                                                       ).ToList());
        }
예제 #3
0
        public void Check()
        {
            if (System.IO.File.Exists(ParameterManager2.XGH) == false)
            {
                return;
            }
            if (ExtractGHYT("GHYTDM = 'G111'") == false)
            {
                return;
            }
            if (ArcExtensions2.ImportFeatureClass(string.Format("{0}\\{1}", ParameterManager2.XGH, "GHYT"), MdbFilePath, "GHYT_X", "GHYTDM = 'G111'") == false)
            {
                QuestionManager2.Add(new Question2
                {
                    Code         = ID,
                    Name         = RuleName,
                    CheckProject = CheckProject,
                    Description  = string.Format("导入乡规划中示范区基本农田数据失败")
                });
                return;
            }
            var sql  = "SELECT XZQDM FROM GHYT GROUP BY XZQDM";
            var list = Search(MdbFilePath, sql);

            var list2 = new List <string>();

            var questions = new List <Question2>();

            foreach (var xzqdm in list)
            {
                if (ArcExtensions2.Select(string.Format("{0}\\{1}", MdbFilePath, "GHYT"), string.Format("{0}\\{1}_{2}", MdbFilePath, "GHYT", xzqdm), string.Format("XZQDM = '{0}'", xzqdm)) == false)
                {
                    questions.Add(new Question2
                    {
                        Code         = ID,
                        Name         = RuleName,
                        CheckProject = CheckProject,
                        Description  = string.Format("提取行政区代码【{0}】的村规划中示范区永久基本农田数据失败", xzqdm)
                    });
                }
                else
                {
                    if (ArcExtensions2.Select(string.Format("{0}\\{1}", MdbFilePath, "GHYT_X"), string.Format("{0}\\{1}_{2}", MdbFilePath, "GHYT_X", xzqdm), string.Format("XZQDM = '{0}'", xzqdm)) == false)
                    {
                        questions.Add(new Question2
                        {
                            Code         = ID,
                            Name         = RuleName,
                            CheckProject = CheckProject,
                            Description  = string.Format("提取行政区代码【{0}】的乡规划中示范区永久基本农田数据失败", xzqdm)
                        });
                    }
                    else
                    {
                        list2.Add(xzqdm);
                        #region 核对范围
                        if (ArcExtensions2.Union(string.Format("{0}\\{1}_{2};{0}\\{1}_X_{2}", MdbFilePath, "GHYT", xzqdm), string.Format("{0}\\{1}_Union_{2}", MdbFilePath, "GHYT", xzqdm), ParameterManager2.Tolerance) == false)
                        {
                            questions.Add(new Question2
                            {
                                Code         = ID,
                                Name         = RuleName,
                                CheckProject = CheckProject,
                                Description  = string.Format("行政区代码【{0}】的村规划中示范区永久基本农田数据与乡规划中示范区永久基本农田数据Union失败", xzqdm)
                            });
                        }
                        else
                        {
                            var sql1 = string.Format("SELECT COUNT(*) FROM GHYT_Union_{0} WHERE FID_GHYT_{0} < 0 OR FID_GHYT_X_{0} < 0", xzqdm);
                            var obj  = SearchRecord(MdbFilePath, sql1);
                            if (obj != null)
                            {
                                var count = 0;
                                if (int.TryParse(obj.ToString(), out count))
                                {
                                    questions.Add(new Question2
                                    {
                                        Code         = ID,
                                        Name         = RuleName,
                                        CheckProject = CheckProject,
                                        Description  = string.Format("行政区代码【{0}】的村规划示范区永久基本农田范围与乡规划示范区永久基本农田范围不一致", xzqdm)
                                    });
                                }
                            }
                        }
                        #endregion
                    }
                }
            }

            var quests = CheckArea(list2, MdbFilePath, "6004", CheckProject2.村规划数据库与乡规划数据库示范区永久基本农田面积是否一致, ParameterManager2.Relative, ParameterManager2.Absolute);
            QuestionManager2.AddRange(quests);
        }
예제 #4
0
        public void Check()
        {
            Init();
            if (System.IO.File.Exists(MdbFilePath) == false)
            {
                return;
            }
            IWorkspace workspace = MdbFilePath.OpenAccessFileWorkSpace();

            if (workspace == null)
            {
                QuestionManager2.Add(new Question2
                {
                    Code         = ID,
                    Name         = RuleName,
                    Description  = "无法打开ArcGIS 工作空间",
                    CheckProject = CheckProject
                });
                return;
            }
            var tools = new List <SplinterTool>()
            {
                #region 建设用地
                new SplinterTool {
                    FeatureClassName = "JQDLTB", CompareValue = 100, Absolute = 20, Key = "BSM", WhereClause = "DLDM LIKE '2*'"
                },
                new SplinterTool {
                    FeatureClassName = "GHYT", CompareValue = 100, Absolute = 20, Key = "BSM", WhereClause = "GHYTDM LIKE 'X2*' OR GHYTDM LIKE 'G2*'"
                },
                new SplinterTool {
                    FeatureClassName = "TDGHDL", CompareValue = 100, Absolute = 20, Key = "BSM", WhereClause = "GHDLDM LIKE '2*'"
                },
                #endregion

                #region 设施农用地
                new SplinterTool {
                    FeatureClassName = "JDQLTB", CompareValue = 200, Absolute = 20, Key = "BSM", WhereClause = "DLDM = '151'"
                },
                new SplinterTool {
                    FeatureClassName = "GHYT", CompareValue = 200, Absolute = 20, Key = "BSM", WhereClause = "GHYTDM = 'X151' OR GHYTDM = 'G151'"
                },
                new SplinterTool {
                    FeatureClassName = "TDGHDL", CompareValue = 200, Absolute = 20, Key = "BSM", WhereClause = "GHDLDM = '151'"
                },
                #endregion

                #region 农用地(除设施农用地)
                new SplinterTool {
                    FeatureClassName = "JQDLTB", CompareValue = 400, Absolute = 20, Key = "BSM", WhereClause = "DLDM = '111' OR DLDM = '113' OR DLDM = '12' OR DLDM = '132' OR DLDM = '152' OR DLDM = '153' OR DLDM = '154' OR DLDM = '155'"
                },
                new SplinterTool {
                    FeatureClassName = "GHYT", CompareValue = 400, Absolute = 20, Key = "BSM", WhereClause = ""
                },
                new SplinterTool {
                    FeatureClassName = "TDGHDL", CompareValue = 400, Absolute = 20, Key = "BSM", WhereClause = "DLDM = '111' OR DLDM = '113' OR DLDM = '12' OR DLDM = '132' OR DLDM = '152' OR DLDM = '153' OR DLDM = '154' OR DLDM = '155'"
                },

                #endregion

                #region 其他地类
                new SplinterTool {
                    FeatureClassName = "JQDLTB", CompareValue = 600, Absolute = 20, Key = "BSM", WhereClause = "DLDM = '131' OR DLDM = '31' OR DLDM = '32'"
                },
                new SplinterTool {
                    FeatureClassName = "GHYT", CompareValue = 600, Absolute = 20, Key = "BSM", WhereClause = ""
                },
                new SplinterTool {
                    FeatureClassName = "TDGHDL", CompareValue = 600, Absolute = 20, Key = "BSM", WhereClause = "DLDM = '131' OR DLDM = '31' OR DLDM = '32'"
                },
                #endregion

                #region 建设用地管制区
                new SplinterTool {
                    FeatureClassName = "JSYDGZQ", CompareValue = 10000, Absolute = 20, Key = "BSM"
                }
                #endregion
            };


            foreach (var tool in tools)
            {
                if (tool.Check(workspace) == false)
                {
                    QuestionManager2.Add(new Question2
                    {
                        Code         = ID,
                        Name         = RuleName,
                        TableName    = tool.FeatureClassName,
                        CheckProject = CheckProject2.碎片多边形,
                        Description  = string.Format("执行【{0}】失败", tool.Name)
                    });
                }
                if (tool.Messages.Count > 0)
                {
                    QuestionManager2.AddRange(tool.Messages.Select(e => new Question2
                    {
                        Code           = ID,
                        Name           = RuleName,
                        TableName      = tool.FeatureClassName,
                        Description    = e.Description,
                        LocationClause = e.WhereClause,
                        CheckProject   = CheckProject2.碎片多边形
                    }).ToList());
                }
            }
        }
예제 #5
0
        public void Check()
        {
            Init();
            if (System.IO.File.Exists(MdbFilePath) == false)
            {
                return;
            }
            #region  检查基期地类图斑地类面积=图斑面积-应扣田坎计算面积   应扣田坎计算面积=图斑面积*田坎系数
            var tool1 = new JQDLTBAreaTool {
                Relative = ParameterManager2.Relative, Absolute = ParameterManager2.Absolute
            };
            if (tool1.Check(ParameterManager2.Connection) == false)
            {
                QuestionManager2.Add(new Question2
                {
                    Code         = ID,
                    Name         = RuleName,
                    CheckProject = CheckProject2.面积一致性,
                    TableName    = "JQDLTB",
                    Description  = "检查基期地类图斑层相关数据失败"
                });
            }
            if (tool1.Messages.Count > 0)
            {
                QuestionManager2.AddRange(tool1.Messages.Select(e => new Question2
                {
                    Code           = ID,
                    Name           = RuleName,
                    CheckProject   = CheckProject2.面积一致性,
                    TableName      = "JQDLTB",
                    Description    = e.Description,
                    LocationClause = e.WhereClause,
                }).ToList());
            }
            #endregion

            #region  规划用途净面积核对
            if (ArcExtensions2.Select(string.Format("{0}\\{1}", MdbFilePath, "GHYT"), string.Format("{0}\\{1}", MdbFilePath, "GHYT_JBNT"), "GHYTDM = 'G111' OR GHYTDM = 'G112'") == false)
            {
                QuestionManager2.Add(new Question2
                {
                    Code         = ID,
                    Name         = RuleName,
                    CheckProject = CheckProject,
                    Description  = string.Format("提取规划用途层中的基本农田数据失败")
                });
            }
            else
            {
                if (ArcExtensions2.Intersect(string.Format("{0}\\{1};{0}\\{2}", MdbFilePath, "GHYT_JBNT", "JQDLTB"), string.Format("{0}\\{1}", MdbFilePath, "GHYT_JBNT_Intersect"), ParameterManager2.Tolerance) == false)
                {
                    QuestionManager2.Add(new Question2
                    {
                        Code         = ID,
                        Name         = RuleName,
                        CheckProject = CheckProject,
                        Description  = string.Format("规划用途层中的基本农田数据与基期地类图斑数据相交Intersect失败")
                    });
                }
                else
                {
                    CheckJMJ();
                }
            }

            #endregion

            IWorkspace workspace = MdbFilePath.OpenAccessFileWorkSpace();
            if (workspace == null)
            {
                QuestionManager2.Add(new Question2
                {
                    Code         = ID,
                    Name         = RuleName,
                    CheckProject = CheckProject,
                    Description  = "无法打开ArcGIS 工作空间",
                    Folder       = "",
                });
                return;
            }

            if (System.IO.File.Exists(ParameterManager2.TDLYXZ) == true)//判断土地利用现状数据库文件是否存在  存在 导入行政区
            {
                var in_feature = string.Format("{0}\\{1}", ParameterManager2.TDLYXZ, "XZQ");

                var tools = new List <ExtentTool>();
                foreach (var xzc in ParameterManager2.XZCList)
                {
                    var where = string.Format("XZQDM = '{0}'", xzc.XZCDM);
                    var extentLayerName = "XZQ_" + xzc.XZCDM;
                    if (ArcExtensions2.ImportFeatureClass(in_feature, MdbFilePath, extentLayerName, where) == false)//将指定行政区XZQ导入到
                    {
                        QuestionManager2.Add(new Question2
                        {
                            Code         = ID,
                            Name         = RuleName,
                            CheckProject = CheckProject,
                            Description  = string.Format("导入行政区【{0}({1})】信息失败", xzc.XZCMC, xzc.XZCDM),
                            Folder       = ""
                        });
                    }
                    else
                    {
                        foreach (var table in ParameterManager2.Tables)
                        {
                            var checkLayerName = string.Format("{0}_{1}", table.Name, xzc.XZCDM);//JSYDGZQ_xxxxxxxxxxxx
                            if (ArcExtensions2.Select(string.Format("{0}\\{1}", MdbFilePath, table.Name), string.Format("{0}\\{1}", MdbFilePath, checkLayerName), where) == false)
                            {
                                QuestionManager2.Add(new Question2
                                {
                                    Code         = ID,
                                    Name         = RuleName,
                                    CheckProject = CheckProject,
                                    Description  = string.Format("提取图层【{0}】中行政区为【{1}】失败", table.Name, xzc.XZCDM)
                                });
                            }
                            else
                            {
                                var unionLayerName = string.Format("{0}_Union", checkLayerName);
                                if (ArcExtensions2.Union(string.Format("{0}\\{1};{0}\\{2}", MdbFilePath, checkLayerName, extentLayerName), string.Format("{0}\\{1}", MdbFilePath, unionLayerName), ParameterManager2.Tolerance) == false)
                                {
                                    QuestionManager2.Add(new Question2
                                    {
                                        Code         = ID,
                                        Name         = RuleName,
                                        CheckProject = CheckProject,
                                        Description  = string.Format("执行图层【{0}】与图层【{1}】之间的Union操作失败", checkLayerName, extentLayerName)
                                    });
                                }
                                else
                                {
                                    tools.Add(new ExtentTool
                                    {
                                        CheckLayerName  = checkLayerName,
                                        ExtentLayerName = extentLayerName,
                                        Absolute        = ParameterManager2.Absolute,
                                        Relative        = ParameterManager2.Relative
                                    });
                                }
                            }
                        }
                    }
                }

                foreach (var tool in tools)
                {
                    if (tool.Check(workspace) == false)
                    {
                        QuestionManager2.Add(new Question2
                        {
                            Code         = ID,
                            Name         = RuleName,
                            CheckProject = CheckProject,
                            Description  = string.Format("执行检查【{0}】失败", tool.Name)
                        });
                    }

                    if (tool.Messages.Count > 0)
                    {
                        QuestionManager2.AddRange(tool.Messages.Select(e => new Question2
                        {
                            Code         = ID,
                            Name         = RuleName,
                            CheckProject = CheckProject,
                            Description  = e.Description
                        }).ToList());
                    }
                }
            }
            else
            {
                QuestionManager2.Add(new Question2
                {
                    Code         = ID,
                    Name         = RuleName,
                    CheckProject = CheckProject,
                    Description  = string.Format("土地利用现状数据库文件未指定,不做行政区范围与面积核查")
                });
            }

            #region 建设用地管制区面积 公顷
            var tool2 = new JSYDGZQAreaTool {
                Relative = ParameterManager2.Relative, Absolute = ParameterManager2.Absolute
            };
            if (tool2.Check(workspace) == false)
            {
                QuestionManager2.Add(new Question2
                {
                    Code         = ID,
                    Name         = RuleName,
                    CheckProject = CheckProject2.面积一致性,
                    TableName    = "JSYDGZQ",
                    Description  = "检查建设用地管制区面积公顷失败"
                });
            }

            if (tool2.Messages.Count > 0)
            {
                QuestionManager2.AddRange(tool2.Messages.Select(e => new Question2
                {
                    Code           = ID,
                    Name           = RuleName,
                    CheckProject   = CheckProject2.面积一致性,
                    TableName      = "JSYDGZQ",
                    Description    = e.Description,
                    LocationClause = e.WhereClause
                }).ToList());
            }
            #endregion
        }
예제 #6
0
        private void CheckJMJ()
        {
            var questions = new List <Question2>();

            using (var connection = new OleDbConnection(string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}", MdbFilePath)))
            {
                connection.Open();
                var list = new List <GHYTJMJ>();
                using (var command = connection.CreateCommand())
                {
                    command.CommandText = "SELECT BSM,MJ,JMJ FROM GHYT_JBNT";
                    var reader = command.ExecuteReader();
                    while (reader.Read())
                    {
                        list.Add(new GHYTJMJ
                        {
                            BSM = reader[0].ToString(),
                            MJ  = Math.Round(double.Parse(reader[1].ToString()), 0),
                            JMJ = Math.Round(double.Parse(reader[2].ToString()), 0)
                        });
                    }
                }
                using (var command = connection.CreateCommand())
                {
                    foreach (var item in list)
                    {
                        var tt = new List <TKXSEntry>();
                        command.CommandText = "SELECT TKXS,Shape_Area FROM GHYT_JBNT_Intersect";
                        var reader = command.ExecuteReader();
                        while (reader.Read())
                        {
                            tt.Add(new TKXSEntry
                            {
                                TKXS = Math.Round(double.Parse(reader[0].ToString()), 4),
                                Area = double.Parse(reader[1].ToString())
                            });
                        }
                        item.TKXSList = tt;

                        var sum  = tt.Sum(e => e.Area);
                        var tkxs = .0;
                        foreach (var t in tt)
                        {
                            tkxs += t.Area / sum * t.TKXS;
                        }
                        tkxs = Math.Round(tkxs, 4);
                        var jmj  = item.MJ * (1 - tkxs);
                        var abs  = Math.Abs(jmj - item.JMJ);
                        var flag = false;
                        if (ParameterManager2.Absolute.HasValue)
                        {
                            flag = abs < ParameterManager2.Absolute.Value;
                        }
                        if (ParameterManager2.Relative.HasValue)
                        {
                            var pp = abs / jmj;
                            flag = pp < ParameterManager2.Relative.Value;
                        }
                        if (flag == false)
                        {
                            questions.Add(new Question2
                            {
                                Code           = ID,
                                Name           = RuleName,
                                CheckProject   = CheckProject,
                                Description    = string.Format("[BSM = '{0}'] 对应的净面积填写误差不符合容差", item.BSM),
                                LocationClause = string.Format("[BSM] = '{0}'", item.BSM)
                            });
                        }
                    }
                }
                connection.Close();
            }
            QuestionManager2.AddRange(questions);
        }
예제 #7
0
        /// <summary>
        /// 核对面积
        /// </summary>
        /// <param name="list"></param>
        /// <param name="mdbfile"></param>
        /// <param name="id"></param>
        /// <param name="checkProject"></param>
        /// <param name="relative"></param>
        /// <param name="absolute"></param>
        private void CheckArea(List <string> list, string mdbfile, string id, CheckProject2 checkProject, double?relative, double?absolute)
        {
            IWorkspace workspace = mdbfile.OpenAccessFileWorkSpace();

            if (workspace == null)
            {
                QuestionManager2.Add(new Question2
                {
                    Code         = id,
                    Name         = RuleName,
                    CheckProject = checkProject,
                    Description  = string.Format("无法打开ArcGIS 工作空间")
                });
                return;
            }

            var questions = new List <Question2>();

            foreach (var xzqdm in list)
            {
                var cghyt = workspace.GetFeatureClass(string.Format("GHYT_{0}", xzqdm));
                if (cghyt == null)
                {
                    questions.Add(new Question2
                    {
                        Code         = id,
                        Name         = RuleName,
                        CheckProject = checkProject,
                        Description  = string.Format("无法获取行政区代码【{0}】的村规划中永久基本农田的要素类", xzqdm)
                    });
                    continue;
                }
                var xghyt = workspace.GetFeatureClass(string.Format("GHYT_X_{0}", xzqdm));


                if (xghyt == null)
                {
                    questions.Add(new Question2
                    {
                        Code         = id,
                        Name         = RuleName,
                        CheckProject = checkProject,
                        Description  = string.Format("无法获取行政区代码【{0}】的乡规划中永久基本农田的要素类", xzqdm)
                    });
                    continue;
                }

                var cArea = Math.Round(ArcClass.GainArea(cghyt), 0);
                var xArea = Math.Round(ArcClass.GainArea(xghyt), 0);
                var abs   = Math.Abs(cArea - xArea);
                var flag  = false;
                if (absolute.HasValue)
                {
                    flag = abs < absolute.Value;
                }
                if (relative.HasValue)
                {
                    var pp = abs / xArea;
                    flag = pp < relative.Value;
                }

                if (flag == false)
                {
                    questions.Add(new Question2
                    {
                        Code         = id,
                        Name         = RuleName,
                        CheckProject = checkProject,
                        Description  = string.Format("行政区代码【{0}】的村规划永久基本农田面积与乡规划永久基本农田面积不一致", xzqdm)
                    });
                }
            }
            QuestionManager2.AddRange(questions);
        }
예제 #8
0
        public void Check()
        {
            Init();
            if (System.IO.File.Exists(MdbFilePath) == false)
            {
                return;
            }
            var layers = new string[] {
                "JQDLTB",
                "GHYT",
                "TDGHDL",
                "JSYDGZQ"
            };
            IWorkspace workspace = MdbFilePath.OpenAccessFileWorkSpace();

            if (workspace == null)
            {
                QuestionManager2.Add(new Question2
                {
                    Code         = ID,
                    Name         = RuleName,
                    CheckProject = CheckProject,
                    Folder       = "",
                    Description  = string.Format("无法打开矢量数据的workspace,故无法质检")
                });
                return;
            }

            var tools = new List <TopoTool>();

            foreach (var layer in layers)
            {
                var path          = string.Format("{0}\\{1}", MdbFilePath, layer);
                var in_features   = string.Format("{0};{1}", path, path);
                var intersectName = string.Format("{0}_intersect", layer);
                var out_feature   = string.Format("{0}\\{1}", MdbFilePath, intersectName);
                if (ArcExtensions2.Intersect(in_features, out_feature, ParameterManager2.Tolerance) == false)
                {
                    QuestionManager2.Add(new Question2
                    {
                        Code         = ID,
                        Name         = RuleName,
                        CheckProject = CheckProject,
                        Description  = string.Format("图层【{0}】执行Intersect失败", layer)
                    });
                }
                else
                {
                    tools.Add(new TopoTool {
                        LayerName = layer, Key = "BSM"
                    });
                }
            }
            foreach (var tool in tools)
            {
                if (tool.Check(workspace) == false)
                {
                    QuestionManager2.Add(new Question2
                    {
                        Code         = ID,
                        Name         = RuleName,
                        CheckProject = CheckProject,
                        Description  = string.Format("执行【{0}】失败", tool.Name)
                    });
                }
                if (tool.Messages.Count > 0)
                {
                    QuestionManager2.AddRange(tool.Messages.Select(e => new Question2
                    {
                        Code           = ID,
                        Name           = RuleName,
                        CheckProject   = CheckProject,
                        Description    = e.Description,
                        LocationClause = e.WhereClause
                    }).ToList());
                }
            }
        }
예제 #9
0
        public void Check()
        {
            if (ExtractGHYT() == false)
            {
                return;
            }
            if (ArcExtensions2.ImportFeatureClass(string.Format("{0}\\{1}", ParameterManager2.MDBFilePath, "TDGHDL"), MdbFilePath, "TDGHDL", null) == false)
            {
                QuestionManager2.Add(new Question2
                {
                    Code         = ID,
                    Name         = RuleName,
                    CheckProject = CheckProject,
                    Description  = string.Format("导入土地规划地类图层失败")
                });
                return;
            }
            if (ArcExtensions2.Select(string.Format("{0}\\{1}", MdbFilePath, "GHYT"), string.Format("{0}\\{1}", MdbFilePath, "GHYT_XG"), "GHYTDM LIKE 'G*' OR GHYTDM LIKE 'X*'") == false)
            {
                QuestionManager2.Add(new Question2
                {
                    Code         = ID,
                    Name         = RuleName,
                    CheckProject = CheckProject,
                    Description  = string.Format("提取规划用途层中现状和新增数据失败!")
                });
                return;
            }

            var sql  = "SELECT MID(GHYTDM,2) FROM GHYT_XG GROUP BY MID(GHYTDM,2)";
            var list = Search(MdbFilePath, sql);

            if (list.Count == 0)
            {
                QuestionManager2.Add(new Question2
                {
                    Code         = ID,
                    Name         = RuleName,
                    CheckProject = CheckProject,
                    Description  = string.Format("执行SQL[{0}]获取结果为空", sql)
                });
                return;
            }
            var workspace = MdbFilePath.OpenAccessFileWorkSpace();

            if (workspace == null)
            {
                QuestionManager2.Add(new Question2
                {
                    Code         = ID,
                    Name         = RuleName,
                    CheckProject = CheckProject,
                    Description  = string.Format("打开ArcGIS 工作空间失败!")
                });
                return;
            }
            var ghytFeatureClass = workspace.GetFeatureClass("GHYT_XG");

            if (ghytFeatureClass == null)
            {
                QuestionManager2.Add(new Question2
                {
                    Code         = ID,
                    Name         = RuleName,
                    CheckProject = CheckProject,
                    Description  = string.Format("获取要素类【GHYT_XG】失败!")
                });
                return;
            }
            var tdghdlFeatureClass = workspace.GetFeatureClass("TDGHDL");

            if (tdghdlFeatureClass == null)
            {
                QuestionManager2.Add(new Question2
                {
                    Code         = ID,
                    Name         = RuleName,
                    CheckProject = CheckProject,
                    Description  = string.Format("获取要素类【TDGHDL】失败!")
                });
                return;
            }
            var messages = new List <string>();

            foreach (var item in list)
            {
                var ghytArea   = Math.Round(ArcClass.GainArea(ghytFeatureClass, string.Format("GHYTDM = 'X{0}' OR GHYTDM = 'G{0}'", item)), 2);
                var tdghdlArea = Math.Round(ArcClass.GainArea(tdghdlFeatureClass, string.Format("GHDLDM = '{0}'", item)), 2);
                var abs        = Math.Abs(ghytArea - tdghdlArea);
                var flag       = false;
                if (ParameterManager2.Absolute.HasValue)
                {
                    flag = abs < ParameterManager2.Absolute.Value;
                }
                if (ParameterManager2.Relative.HasValue)
                {
                    var pp = abs / tdghdlArea;
                    flag = pp < ParameterManager2.Relative.Value;
                }
                if (flag == false)
                {
                    messages.Add(string.Format("规划用途中规划用途代码为【X{0}】+【G{0}】的面积和与土地规划地类层中地类面积和不相等", item));
                }
            }
            QuestionManager2.AddRange(messages.Select(e => new Question2
            {
                Code         = ID,
                Name         = RuleName,
                CheckProject = CheckProject,
                Description  = e
            }).ToList());
        }
예제 #10
0
        public void Check()
        {
            Init2();
            if (System.IO.File.Exists(MdbFilePath) == false)
            {
                return;
            }

            if (ArcExtensions2.ImportFeatureClass(string.Format("{0}\\{1}", ParameterManager2.MDBFilePath, "JQDLTB"), MdbFilePath, "JQDLTB", null) == false)
            {
                QuestionManager2.Add(new Question2
                {
                    Code         = ID,
                    Name         = RuleName,
                    CheckProject = CheckProject,
                    Description  = string.Format("导入JQDLTB图层失败")
                });
                return;
            }


            if (System.IO.File.Exists(ParameterManager2.TDLYXZ) == true)
            {
                var in_feature = string.Format("{0}\\{1}", ParameterManager2.TDLYXZ, "XZQ");
                var array      = ParameterManager2.XZCList.Select(e => string.Format("[XZQDM] = '{0}'", e.XZCDM)).ToArray();
                var where = string.Join(" OR ", array);
                if (ArcExtensions2.ImportFeatureClass(in_feature, MdbFilePath, "XZQ", where) == false)//首先导入行政区
                {
                    QuestionManager2.Add(new Question2
                    {
                        Code         = ID,
                        Name         = RuleName,
                        CheckProject = CheckProject,
                        Description  = string.Format("导入行政区信息失败")
                    });
                }
                else
                {
                    var dltb         = string.Format("{0}\\{1}", ParameterManager2.TDLYXZ, "DLTB");
                    var clip_feature = string.Format("{0}\\{1}", MdbFilePath, "XZQ");
                    var out_feature  = string.Format("{0}\\{1}", MdbFilePath, "DLTB");
                    if (ArcExtensions2.Clip(dltb, clip_feature, out_feature, ParameterManager2.Tolerance) == false)
                    {
                        QuestionManager2.Add(new Question2
                        {
                            Code         = ID,
                            Name         = RuleName,
                            CheckProject = CheckProject,
                            Description  = string.Format("通过行政区提取DLTB层失败")
                        });
                    }
                    else
                    {
                        var workspace = MdbFilePath.OpenAccessFileWorkSpace();
                        if (workspace == null)
                        {
                            QuestionManager2.Add(new Question2
                            {
                                Code         = ID,
                                Name         = RuleName,
                                CheckProject = CheckProject,
                                Description  = string.Format("无法打开ArcGIS 工作空间")
                            });
                            return;
                        }
                        var tools = new List <AreaTool>();
                        tools.Add(new AreaTool {
                            CheckFeatureClassName = "JQDLTB", CurrentFeatureClassName = "DLTB", Relative = ParameterManager2.Relative, Absolute = ParameterManager2.Absolute
                        });
                        tools.Add(new AreaTool {
                            CheckFeatureClassName = "JQDLTB", CheckWhereClause = "DLDM = '111' OR DLDM = '113'", CurrentFeatureClassName = "DLTB", CurrentWhereClause = "DLBM LIKE '01*'", Relative = ParameterManager2.Relative, Absolute = ParameterManager2.Absolute
                        });
                        tools.Add(new AreaTool {
                            CheckFeatureClassName = "JQDLTB", CheckWhereClause = "DLDM LIKE '21*'", CurrentFeatureClassName = "DLTB", CurrentWhereClause = "DLBM LIKE '05*' OR DLBM LIKE '06*' OR DLBM LIKE '07*' OR DLBM LIKE '08*' OR DLBM LIKE '09*' OR DLBM LIKE '10*' OR DLBM = '1109' OR DLBM DLBM = '1201'", Relative = ParameterManager2.Relative, Absolute = ParameterManager2.Absolute
                        });

                        foreach (var tool in tools)
                        {
                            if (tool.Check(workspace) == false)
                            {
                                QuestionManager2.Add(new Question2
                                {
                                    Code         = ID,
                                    Name         = RuleName,
                                    CheckProject = CheckProject,
                                    Description  = string.Format("执行检查【{0}】失败", tool.Name)
                                });
                            }

                            if (tool.Messages.Count > 0)
                            {
                                QuestionManager2.AddRange(tool.Messages.Select(e => new Question2
                                {
                                    Code         = ID,
                                    Name         = RuleName,
                                    CheckProject = CheckProject,
                                    Description  = e.Description
                                }).ToList());
                            }
                        }
                    }
                }
            }
            else
            {
                QuestionManager2.Add(new Question2
                {
                    Code         = ID,
                    Name         = RuleName,
                    CheckProject = CheckProject,
                    Description  = string.Format("土地利用现状数据库文件未指定,不做检查")
                });
            }
        }