要质检的数据包括使用权宗地、所有权宗地、自然幢,属性质检规则如下:

使用权宗地、所有权宗地属性质检项如下:

1.       必填项

区县代码(QXDM)、宗地特征码(ZDTZM)、坐落(ZL)、定着物特征码(DZWTZM)、权力人(QLR)、面积单位(MJDW)。

2.       字段限制

1)       要素代码(YSDM)为空,或不为空必须是10位数字组成;

2)       宗地代码(ZDDM)为空,或不为空必须是19位、数字或字母组成;

3)       不动产单元号(BDCDYH)为空,或不为空必须是28位、数字或字母组成;

4)       宗地特征码(ZDTZM),2个字母组成,如果第一个字母是G、第二个字母只能是BDEFSXY中的一个,第一个字母是J、第二字母是ABCDEFSXY中一个,第一个字母是Z、第二个字母只能是W,无其他组合;

5)       定着物特征码(DZWTZM),宗地只能是W。

自然幢属性质检项如下:

1.       字段限制

1)       区县代码(QXDM)为空,或不为空只能是6位数字;

2)       要素代码(YSDM)为空,或不为空必须是10位数字组成;

3)       宗地代码(ZDDM)为空,或不为空必须是19位、数字或字母组成;

4)       不动产单元号(BDCDYH)为空,或不为空必须是28位、数字或字母组成;

5)       自然幢号(ZRZH)为空,或不为空必须是24位、数字或字母组成;

宗地宗海特征码(ZDZHTZM)为空,或不为空由2个字母组成,如果第一个字母是G、第二个字母只能是BDEFSXY中的一个,第一个字母是J、第二字母是ABCDEFSXY中一个,第一个字母是Z、第二个字母只能是W,无其他组合。

设计时,考虑通用性和可复用性,设计了质检类CheckFieldValue,并在此基础上设计了一宗地数据的宗地特征码、自然幢数据的宗地宗海特征码检查类ParcelCheckFieldValue。

如下:

using GISWebService.HttpRequestContent;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;namespace GISWebService.Common
{/// <summary>/// 属性质检/// </summary>public class CheckFieldValue{/// <summary>/// 要质检的属性与值/// </summary>private static Dictionary<string, object> _dictFieldValue { get; set; }/// <summary>/// 质检结果/// </summary>//private static List<CheckFieldResult> _listResult { get; set; }private static List<string> _listResult { get; set; }/// <summary>/// 属性质检/// </summary>/// <param name="name">字段名</param>/// <param name="value">字段值</param>public CheckFieldValue(string name, object value){CheckInstance();object oValue = null;if (_dictFieldValue.TryGetValue(name, out oValue))_dictFieldValue[name] = value;else_dictFieldValue.Add(name, value);}/// <summary>/// 属性质检/// </summary>/// <param name="dictFieldValue">属性名与属性值集合</param>public CheckFieldValue(Dictionary<string, object> dictFieldValue){CheckInstance();_dictFieldValue = dictFieldValue;}/// <summary>/// /// </summary>private static void CheckInstance(){if (null == _dictFieldValue)_dictFieldValue = new Dictionary<string, object>() { };_dictFieldValue.Clear();if (null == _listResult)_listResult = new List<string>() { };}/// <summary>/// 正则表达式匹配检查/// </summary>/// <param name="sInput">检查参数</param>/// <param name="sPattern">正则表达式</param>/// <returns>是否匹配</returns>public static bool IsMatch(string sInput, string sPattern){return IsMatch(sInput, sPattern, false, false);}/// <summary>/// 正则表达式匹配检查/// </summary>/// <param name="sInput">检查参数</param>/// <param name="sPattern">正则表达式</param>/// <param name="bIngnoreCase">忽略大小写</param>/// <param name="bIngnoreWhiteSpace">忽略空白</param>/// <returns>是否匹配</returns>public static bool IsMatch(string sInput, string sPattern, bool bIngnoreCase, bool bIngnoreWhiteSpace){if (bIngnoreWhiteSpace && string.IsNullOrWhiteSpace(sInput))return false;return (bIngnoreCase ? new Regex(sPattern, RegexOptions.IgnoreCase) : new Regex(sPattern)).IsMatch(sInput);}/// <summary>/// 是否为纯数字的字符串/// </summary>/// <param name="sInput">检查参数</param>/// <param name="nMinLength">最小长度</param>/// <param name="nMaxLength">最大长度</param>/// <returns>是否匹配</returns>public static bool IsNumberString(string sInput, int nMinLength, int nMaxLength){return IsMatch(sInput, @"^([0-9]{" + nMinLength + "," + nMaxLength + "})$");}/// <summary>/// 是否为指定长度的字符串(包含数字、英文字符)/// </summary>/// <param name="sInput">检查参数</param>/// <param name="nMinLength">最小长度</param>/// <param name="nMaxLength">最大长度</param>/// <returns>是否匹配</returns>public static bool IsNumberStringOrEnglishCharactor(string sInput, int nMinLength, int nMaxLength){return IsMatch(sInput, @"^([0-9a-zA-Z]{" + nMinLength + "," + nMaxLength + "})$");}/// <summary>/// 非空检查(不允许为空)/// </summary>public void RuleNotNullable(){foreach (var _item in _dictFieldValue){if (ValueConvert.IsNull(_item.Value))_listResult.Add(string.Format("必填字段 {0} 为空", _item.Key));}}/// <summary>/// 固定长度检查(为空或为固定长度的字符串,可为数字或英文字符)/// </summary>/// <param name="nLength">固定长度</param>public void RuleNullOrFixedLength(int nLength){foreach (var _item in _dictFieldValue){if (!ValueConvert.IsNull(_item.Value) && !IsNumberStringOrEnglishCharactor(Convert.ToString(_item.Value), nLength, nLength))_listResult.Add(string.Format("字段 {0} 长度不为 {1} 位", _item.Key, nLength));}}/// <summary>/// 固定长度检查(为空或为固定长度的数字字符串)/// </summary>/// <param name="nLength"></param>public void RuleNullOrFixedLengthDigit(int nLength){foreach (var _item in _dictFieldValue){if (!ValueConvert.IsNull(_item.Value) && !IsNumberString(Convert.ToString(_item.Value), nLength, nLength))_listResult.Add(string.Format("字段 {0} 长度不为 {1} 位", _item.Key, nLength));}}/// <summary>/// 清空检查结果/// </summary>public void ClearResult(){if (null != _listResult && 0 < _listResult.Count)_listResult.Clear();}/// <summary>/// 获取质检结果/// </summary>/// <param name="bAutoClear">是否自动清空</param>/// <returns>质检结果</returns>public List<string> GetResult(bool bAutoClear = true){List<string> ls = new List<string>(_listResult);if (bAutoClear)_listResult.Clear();return ls;}}/// <summary>/// 宗地属性检查/// </summary>public class ParcelCheckFieldValue{/// <summary>/// 检查宗地特征码/// </summary>/// <param name="field">字段名</param>/// <param name="value">字段值</param>/// <returns>质检结果</returns>public static string CheckParcelFeatureCode(string field, object value, bool allowNull = false){bool bNull = ValueConvert.IsNull(value);if (!allowNull && bNull)return string.Format("字段{0}不允许为空", field);else if (allowNull && bNull)return null;return CheckFieldValue.IsMatch(System.Convert.ToString(value), @"^((G[BDEFSXY])|(J[ABCDEFSXY])|(ZW))$") ? null : string.Format("字段 {0} 不符合规范", field);}/// <summary>/// 检查宗地的定着物特征码/// </summary>/// <param name="field">字段名</param>/// <param name="value">字段值</param>/// <returns>质检结果</returns>public static string CheckFixedThingFeatureCode(string field ,object value){return (!ValueConvert.IsNull(value) && 0 == string.Compare(Convert.ToString(value), "W", true)) ? null : string.Format("字段 {0} 不符合规范", field);}}
}

其中,接口传入参数与质检结果相关返回参数设计如下:

using GeoJSON.Net.Feature;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;namespace GISWebService.HttpRequestContent
{/// <summary>/// 属性质检的传入参数/// </summary>public class CheckFieldsRequestBody{/// <summary>/// 图层/// </summary>[JsonProperty("layer")]public string Layer { get; set; }/// <summary>/// 要素集合/// </summary>[JsonProperty("feature")]public List<Feature> Feature { get; set; }}/// <summary>/// 要素属性质检结果/// </summary>public class CheckPropertyResult{/// <summary>/// OBJECTID/// </summary>[JsonProperty("objectid")]public int ObjectID { get; set; }/// <summary>/// 字段检查结果/// </summary>[JsonProperty("fields")]public List<string> FieldInfo { get; set; }}/// <summary>/// 属性质检结果/// </summary>public class CheckFieldsResponseBody{/// <summary>/// 图层/// </summary>[JsonProperty("layer")]public string Layer { get; set; }/// <summary>/// 质检结果/// </summary>[JsonProperty("info")]public List<CheckPropertyResult> Information { get; set; }}
}

调用时,以宗地质检为例:

                            {foreach (var aFeature in item.Feature){object oOid = null;if (!aFeature.Properties.TryGetValue("OBJECTID", out oOid))throw new Exception(string.Format("图层 {0} 存在OBJECTID有误的要素", item.Layer));int nOid = System.Convert.ToInt32(oOid);CheckPropertyResult aCheckPropResult = new CheckPropertyResult() { ObjectID = nOid, FieldInfo = new List<string>() { } };{List<string> lsNotNullFields = new List<string>() { "QXDM", "ZDTZM", "ZL", "DZWTZM", "QLR", "MJDW" };Dictionary<string, object> dict = new Dictionary<string, object>() { };foreach (var field in lsNotNullFields){object oValue = null;if (!aFeature.Properties.TryGetValue(field, out oValue))throw new Exception(string.Format("未能获取图层 {0} 的OBJECTID为 {1} 的要素的 {2} 字段值", item.Layer, nOid, field));dict.Add(field, oValue);}CheckFieldValue aCheck = new CheckFieldValue(dict);aCheck.RuleNotNullable();aCheckPropResult.FieldInfo.AddRange(aCheck.GetResult());}{for (int n = 0; n < 3; n++){string sFieldName = null;if (0 == n)sFieldName = "YSDM";else if (1 == n)sFieldName = "ZDDM";elsesFieldName = "BDCDYH";object oValue = null;if (!aFeature.Properties.TryGetValue(sFieldName, out oValue))throw new Exception(string.Format("未能获取图层 {0} 的OBJECTID为 {1} 的要素的 {2} 字段值", item.Layer, nOid, sFieldName));CheckFieldValue aCheck = new CheckFieldValue(sFieldName, oValue);if (0 == n)aCheck.RuleNullOrFixedLengthDigit(10);else if (1 == n)aCheck.RuleNullOrFixedLength(19);elseaCheck.RuleNullOrFixedLength(28);aCheckPropResult.FieldInfo.AddRange(aCheck.GetResult());}}{for (int n = 0; n < 2; n++){string sFeatureCode = (0 == n) ? "ZDTZM" : "DZWTZM";object oValue = null;if (!aFeature.Properties.TryGetValue(sFeatureCode, out oValue))throw new Exception(string.Format("未能获取图层 {0} 的OBJECTID为 {1} 的要素的 {2} 字段值", item.Layer, nOid, sFeatureCode));string sResult = 0 == n ? ParcelCheckFieldValue.CheckParcelFeatureCode(sFeatureCode, oValue) : ParcelCheckFieldValue.CheckFixedThingFeatureCode(sFeatureCode, oValue);if (!string.IsNullOrEmpty(sResult))aCheckPropResult.FieldInfo.Add(sResult);}}aResponseBody.Information.Add(aCheckPropResult);}}

若传入的参数为如下结构的List<CheckFieldsRequestBody>类型的param对象,内容为:

[{"layer": "ZRZ","feature": [{"type": "Feature","geometry": {"type": "Polygon","coordinates": [[[38527161.51,2564408.7410000004],[38527162.14,2564389.3790000007],[38527096.8336,2564387.3809999991],[38527096.8223,2564387.7569999993],[38527088.323,2564394.569],[38527087.9087,2564394.6539999992],[38527087.5629,2564406.4140000008],[38527161.51,2564408.7410000004]]]},"properties": {"OBJECTID": 1343,"BSM": null,"YSDM": null,"BDCDYH": "441322001001GB08213F0005000","ZDDM": "441322001001GB082134","ZRZH": "441322001001GB08213F005","XMMC": null,"JZWMC": null,"JGRQ": null,"JZWGD": null,"ZZDMJ": 1387.1000000000001,"ZYDMJ": null,"YCJZMJ": null,"SCJZMJ": null,"ZCS": 3,"DSCS": 3,"DXCS": null,"GHYT": null,"FWJG": null,"ZTS": null,"JZWJBYT": null,"DAH": null,"BZ": null,"ZT": null,"GID": "E5078ADBDD8A49A0958762CE5106C9AF","RKSJ": null,"SJZT": null,"ISLOCK": null,"ZDZHTZM": "GAB","ZBH": null,"IMPORTFLAG": null,"BMFBUILDID": null,"BMFBUILDCODE": null,"RKRQ": null,"RKR": null,"RKRID": null,"RKID": null,"ZTHYY": null,"RKFS": null,"DZWTZM": null,"ZL": "BL县LY镇水西村委会望牛墩(土名)地段远望数码城8栋","ZDT": "ZDImage/E5078ADBDD8A49A0958762CE5106C9AF.jpg","DXSD": null,"QXDM": null,"YBDCDYH": null,"HQZTBS": null,"DOCUNID": null,"QJSHBZ": null}},{"type": "Feature","geometry": {"type": "Polygon","coordinates": [[[38527157.83,2564265.0409999993],[38527158.08,2564257.2640000004],[38527118.2,2564245.0390000008],[38527118.269999996,2564242.3949999996],[38527090.652,2564241.6089999992],[38527090.0357,2564262.9230000004],[38527157.83,2564265.0409999993]]]},"properties": {"OBJECTID": 813,"BSM": null,"YSDM": null,"BDCDYH": "441322001001GB08213F00150000","ZDDM": "441322001001GB08213","ZRZH": "441322001001GB08213F0015","XMMC": null,"JZWMC": null,"JGRQ": null,"JZWGD": null,"ZZDMJ": 1123.8,"ZYDMJ": null,"YCJZMJ": null,"SCJZMJ": null,"ZCS": null,"DSCS": null,"DXCS": null,"GHYT": null,"FWJG": null,"ZTS": null,"JZWJBYT": null,"DAH": null,"BZ": null,"ZT": null,"GID": "07B5F49C731B4F9CACDF77DAEEE502BB","RKSJ": null,"SJZT": null,"ISLOCK": null,"ZDZHTZM": "GB","ZBH": null,"IMPORTFLAG": null,"BMFBUILDID": null,"BMFBUILDCODE": null,"RKRQ": null,"RKR": null,"RKRID": null,"RKID": null,"ZTHYY": null,"RKFS": null,"DZWTZM": null,"ZL": "BL县LY镇水西村委会望牛墩(土名)地段远望数码城15栋","ZDT": "ZDImage/07B5F49C731B4F9CACDF77DAEEE502BB.jpg","DXSD": null,"QXDM": null,"YBDCDYH": null,"HQZTBS": null,"DOCUNID": null,"QJSHBZ": null}}]},{"layer": "ZD_SHYQ","feature": [{"type": "Feature","geometry": {"type": "Polygon","coordinates": [[[38526926.715,2564197.0757999998],[38526920.7464,2564198.8359999992],[38526919.6978,2564204.0397999994],[38526910.2842,2564503.0131],[38526998.747,2564504.4110000003],[38526998.7721,2564521.7214],[38527175.1219,2564521.6728000008],[38527175.582,2564507.2051999997],[38527175.8705,2564495.5077],[38527180.167899996,2564363.0360000003],[38527183.1127,2564270.4807999991],[38527178.6205,2564255.3690000009],[38527165.8622,2564245.9126999993],[38526952.1922,2564176.4903999995],[38526941.2566,2564175.5524000004],[38526934.5509,2564178.1996999998],[38526930.5365,2564179.7846000008],[38526925.1559,2564185.8017999996],[38526922.8309,2564188.4188],[38526920.355399996,2564197.5955],[38526926.715,2564197.0757999998]]]},"properties": {"OBJECTID": 780,"BSM": 2564,"YSDM": "60201030110","ZDDM": null,"BDCDYH": "441322001001444GB08213W00000000","ZDTZM": "ZpW","ZL": "BL县LY镇水西村望牛墩地段-远望数码城","ZDMJ": 81035,"MJDW": "1","YT": "054","DJ": null,"JG": null,"QLLX": "3","QLXZ": "102","QLSDFS": "2","RJL": null,"JZMD": null,"JZXG": null,"ZDSZD": "空地","ZDSZN": "空地","ZDSZX": "空地","ZDSZB": "空地","ZDT": "ZDImage/2CE6B4BA40584E7DAC9E2C14A84F2924.jpg","TFH": null,"DJH": null,"DAH": null,"ZT": null,"ZLDWDM": null,"ZLDWMC": null,"GID": "2CE6B4BA40584E7DAC9E2C14A84F2924","RKSJ": null,"SJZT": 0,"ISLOCK": null,"RKFS": "0","DZWTZM": "A","JZDH": null,"TDSYQSSJ": "2013-12-12T00:00:00","TDSYJSSJ": "2053-12-12T00:00:00","BZ": "本宗地土地证为:B府国用(2014)第010031号,B府国用(2013)第010198号,土地用途为商业用地,使用期限至2053年12月12日止,土地用途为商服用地,使用期限至2051年11月8日止","QLR": null,"ZYYT": "054","QXDM": "441322","YBDCDYH": null,"ZDH": null,"HQZTBS": null,"DOCUNID": null,"QJSHBZ": null}}]}
]

则质检返回结果为:

{"status": 0,"result": [{"layer": "ZRZ","info": [{"objectid": 1343,"fields": ["字段 ZDDM 长度不为 19 位","字段 BDCDYH 长度不为 28 位","字段 ZRZH 长度不为 24 位","字段 ZDZHTZM 不符合规范"]},{"objectid": 813,"fields": []}]},{"layer": "ZD_SHYQ","info": [{"objectid": 780,"fields": ["必填字段 QLR 为空","字段 YSDM 长度不为 10 位","字段 BDCDYH 长度不为 28 位","字段 ZDTZM 不符合规范","字段 DZWTZM 不符合规范"]}]}]
}

地籍数据属性质检功能设计与实现相关推荐

  1. 2020FME博客大赛——基于FME的天地图·浙江融合数据质检程序的设计与应用

    作者:闻达 单位:浙江省测绘科学技术研究院 摘 要:基于FME技术,根据天地图·浙江融合设计要求,并结合天地图日常运维工作,建立一套严格的质检规则,用于检查天地图数据是否符合标准.对数据进行逻辑一致性 ...

  2. 生产型WMS系统:库内管理功能设计

    导语 大家好,我是智能仓储物流技术研习社的社长,你的老朋友,老K. 知识星球 * 原创电子书 * 深海社区 * 微信群 对于生产型的企业来说,信息化系统的实施应用是非常重要的,一方面可以提升企业内部的 ...

  3. MES功能设计规格书

    软件功能结构 项目实施方案 概述 按总体规划,MES项目分三个阶段实施,第一阶段先在终端电器制造部和控制电器制造部进行试点实施. 第一阶段目标 建立基本的MES系统框架,提供工厂建模等基础功能. 将目 ...

  4. 「AI 质检员」在富士通上岗,效率比人工高 25%

    日本第一 IT 厂商富士通,于近日宣布开发了用于检测产品外观异常的 AI 技术,从而节省人力成本.材料成本等,同时也可节省声誉损失和退货/召回相关的成本,「无人工厂」已来. 来源 | Hyper超神经 ...

  5. “干细胞制剂制备与质检行业标准”上海“出炉”

    中国整形美容协会在上海正式发布<干细胞制剂制备与质检行业标准(试行)>. 孙国根 摄 中国整形美容协会在上海正式发布<干细胞制剂制备与质检行业标准(试行)>. 孙国根 摄 中新 ...

  6. 「AI 质检员」在富士通工厂上岗,检测效率比人工提升 25%

    来源:HyperAI超神经本文约1500字,建议阅读5分钟日本第一 IT 厂商富士通,于近日宣布开发了用于检测产品外观异常的 AI 技术,从而节省人力成本.材料成本等,同时也可节省声誉损失和退货/召回 ...

  7. SAP QM 检验批上各个MIC质检结果的查询报表?

    SAP QM 检验批上各个MIC质检结果的查询报表? 近日一个同行咨询我,在SAP QM里有没有一个报表可以查询各个检验批的检验结果的. 笔者抽时间在SAP系统上做了检查,也在网上查了不少资料, 收获 ...

  8. SAP MM 可以通过STO在公司间转移质检库存?

    SAP MM 可以通过STO在公司间转移质检库存? 正常情况,SAP项目实践中,公司间转储的场景,一般都是转储非限制使用库存.而冻结或者质检库存,一般不会在公司代码之间去做库存转移的. 在K项目中,全 ...

  9. 「SAP技术」 SAP MM 已启用质检物料创建PO时候'STOCK TYPE'没有默认为X?

    「SAP技术」 SAP MM 已启用质检物料创建PO时候'STOCK TYPE'没有默认为X? Part I:SAP 标准行为 1, 物料11002335, QM视图里 01 inspection t ...

  10. SAP QM 采购货物收到第三方仓库,转库回工厂仓库之后质检之处理

    SAP QM 采购货物收到第三方仓库,转库回工厂仓库之后质检之处理 笔者在某项目里,遇到如下问题,经过与业务部门讨论与分析,采取了相关方案,解决了该问题.是故撰就此篇文字做个总结,以飨读者. AS-I ...

最新文章

  1. 千兆路由器怎么设置网速最快_200M的网速,换成千兆路由器,我得到了什么?...
  2. 查看表扫描次数,并对比索引对表查询的作用
  3. Ubuntu 15 安装Chromium浏览器并添加Flash插件Pepper Flash Player
  4. 特斯拉Model X撞高速中央隔离带起火,司机受伤身亡
  5. HP数组转JSON函数json_encode和JSON转数组json_decode函数的使用方法
  6. linux驱动中使用定时器的设置
  7. 遥感数字图像处理——第三章——空间域处理方法
  8. matlab 积分进阶教程,matlab进阶微积分篇6
  9. Ubuntu输入法使用回车键后字符间距异常的问题
  10. 【应届生必看】技术岗面试应答有哪些话术和技巧?
  11. db服务器在游戏服务器组中的作用
  12. php之form,PHP之表单处理
  13. 机械结构_day12
  14. CHAPTER 23 Question Answering
  15. oracle10g centos 安装,Centos下静默安装oracle10g
  16. c++map自动排序特性
  17. 通过BACnet物联网关实现楼宇自动化的物联网解决方案
  18. SayLove表白墙微信小程序
  19. python中画地图map的用法_使用basemap和python在地图中绘制海洋
  20. ChatGPT国产平替出现了:APP商店就能下载,还可给AI加人设,背后公司刚成立3个月...

热门文章

  1. npm install报错:npm WARN saveError ENOENT: no such file or directory, open ‘xxx‘
  2. 维吾尔语小程序开发个人中心插件
  3. wps使用mathtype编辑数学公式
  4. 教你如何零基础备考公务员
  5. 据说的屏蔽惠普增霸卡方法!
  6. @JsonView的简单使用
  7. Atheros QCA8337交换芯片驱动开发
  8. MATLAB常用画图函数
  9. BootDO框架的使用及介绍
  10. STM32控制AD7124采集调试流程