基于ArcEngine的农村土地承包经营权数据库建设

2018-04-18 09:51于中伟
地理空间信息 2018年11期
关键词:村组字段权属

于中伟

(1.沈阳市勘察测绘研究院,辽宁 沈阳 110014)

农村土地承包经营权确权登记的主要目的是解决承包地块面积不准、空间位置不明、四至关系不清等问题,最终形成权属合法、界址清楚、面积准确、图数实地一致的农村土地承包经营权调查成果。农村土地确权登记数据库是开展农村土地承包经营权确权登记最重要的成果之一。确权登记数据库主要包括用于农村土地承包经营权调查、确权登记的地理信息数据和权属数据,权属数据又包括业务数据和权属资料数据。NY/T 2539-2016《农村土地承包经营权确权登记数据库规范》对数据库的分层、图层名称、字段名称以及约束信息等进行了严格定义,实现了数据库成果的规范化和标准化。

农村土地承包经营权数据库建设是先将入库后的实地测量图形数据与权属调查信息进行挂接,形成公示结果和待解决记录表;再根据公示反馈的信息修改数据库,整理完善承包地块属性,形成界址信息;然后利用质量检查功能对数据库进行检查;最终形成无质量问题的国家标准格式数据。

1 工作流程

根据NY/T 2539-2016《农村土地承包经营权确权登记数据库规范》,农村土地确权登记标准数据库包括地理信息数据和权属数据共26个图层。实际作业中,图形地理信息成果主要包括地块(DK)、界址点(JZD)、界址线(JZX)等图层,权属数据主要包括发包方(FBF)、承包方(CBF)、承包地块信息(CBDKXX)、承包合同(CBHT)、家庭成员(CBF_JTCY)、承包经营权证登记簿(CBJYQZDJB)等表格。本文着重讨论如何在程序中实现数据库图形地理信息成果与权属数据的自动挂接,并形成符合国家规范的数据库。

1)为标准数据库添加DKYBM过渡字段。为了方便地块与村组填写的CBDKXX表进行对应,地块预编码采用01001的编码方式,而不是规范中要求的顺序码,其中01为承包方在村组中的顺序码,001为承包方所有的地块顺序码。

2)将利用CASS或ArcGIS等绘图软件绘制的地块图层导入标准数据库的DK图层中,并将预编码放入DK预编码中,以实现图形数据与属性数据的挂接。针对DK图层,根据地块编码规则按村组对所有地块进行编码,此时DK图层中的每个要素均对应一个预编码DKYBM和一个规范编码DKBM。

3)顺序读入村组填写的FBF表,CBF表和CBDKXX表,并将相关属性信息入库。发包方入库时,仅涉及FBF表;承包方入库时,共涉及CBF、CBF_JTCY、CBHT和CBJYQZDJB四个属性表;执行承包地块入库时,涉及DK图层和CBDKXX表。承包地块信息入库后,可将DKYBM字段删除。

4)生成JZD、JZX图层,实现四至等属性的自动识别录入,并对数据库进行检查,形成国家标准格式的数据库。

2 关键技术的实现

1)为了避免在读取和保存Excel时不区别版本,本文引用了NetOffice控件,在程序中添加NetOffice.dll、ExcelApi.dll和VBIDEApi.dll引用,相关代码为:

‘添加引用

using NetOffice.ExcelApi;

using NetOffice.ExcelApi.Enums;

‘初始化Excel实例,并打开工作簿

NetOffice.ExcelApi.Application application= new NetOffice.ExcelApi.Application();

Workbook workbook= application.Workbooks.Add(excelPath);

Worksheet worksheet= workbook.Worksheets[1] as Worksheet;

‘读取普通文本单元格

string FBFMC=worksheet.Range("C8").Text.ToString();

‘针对数据序列,验证单元格

char[] ch= new char[] { ',' };

string[] validation= worksheet.Range("D11").Validation.Formula1.Split(ch);

‘退出并释放

application.Quit();

application.Dispose();

2)由于需将调查表格信息写入或更新到mdb数据库中,会多次执行SQL语句,可将常用操作封装成类,予以调用。例如,在Access Tools类中,包括以下字段和方法:

public OleDbConnection Conn;

public string ConnString; ‘链接字符串

DataTable SelectToDataTable(string SQL); ‘根据SQL返回DataTable数据表

OleDbDataAdapter SelectToOleDbDataAdapter(string SQL); ‘根据SQL返回OleDbDataAdapter

int ExecuteSQLNonquery(string SQL); ‘执行SQL,适用于删除、更新

AccessTools(string Dbpath); ‘构造函数,链接数据库

void Close(); ‘关闭数据链接

3)在对DK图层进行统一编码时,首先需获得DK图层的几何重心,可通过程序依次调用GP工具的FeatureToPoint和AddXY工具,将DK转为点,并添加X、Y坐标。执行后的DK_FeatureToPoint图层即为DK图层对应的几何重心图层,具有严格对应的ObjectID。采用GP调用FeatureToPoint工具的代码为:

ESRI.ArcGIS.Geoprocessor.Geoprocessor gp= new Geoprocessor();

FeatureToPoint featureToPoint= new FeatureToPoint();

featureToPoint.in_features= mdbPath + "\DK";

featureToPoint.out_feature_class= mdbPath + "\DK_FeatureToPoint";

IGeoProcessorResult result=gp.Execute(featureToPoint,null) as IGeoProcessorResult;

然后获取DK图层的包络线,即图层的最小外接矩形。根据该包络线构建一定步长的正方形框,自左上角遍历正方形框,同一个正方形框中的地块仅比较几何重心的横向(东西)关系,从而可按自北向南、自西向东的顺序对所有地块进行编码。执行编码赋值时,可直接采用SQL语句的方式,根据添加的POINT_X和POINT_Y字段设立条件关系,提高执行效率。JZD图层的编码方法与之类似。部分关键代码为:

IFeatureClass featureClass= featureWorkspace.OpenFeatureClass("DK");

IGeoDataset geoDataset= featureClass as IGeoDataset;

IEnvelope envelope= geoDataset.Extent; ‘获得DK图层的包络线

double buchang= 50.0; ‘设置一定步长的正方形框

int xCount= Math.Ceiling((envelope.XMax-envelope.XMin) / buchang);

int yCount= Math.Ceiling((envelope.YMax-envelope.YMin) / buchang);

for (int i= 0; i < yCount; i++)

{

for (int j= 0; j < xCount; j++)

{

‘求出正方形框四角的坐标

xmin= envelope.XMin + j * buchang);

ymin= envelope.YMax-(i + 1) * buchang;

xmax= envelope.XMin + (j + 1) * buchang;

ymax= envelope.YMax-i * buchang;

sql= "select * from DK_FeatureToPoint WHERE POINT_X>=" + xmin.ToString() + " and POINT_X<" + xmax.ToString() + " and POINT_Y <=" + ymax.ToString() + " and POINT_Y >" + ymin.ToString();

dt= accessTools.SelectToDataTable(sql); ‘选中正方形框内的所有点

foreach (DataRow row in dt.Rows)

{

list.Add(Convert.ToInt16(row["ORIG_FID"].ToString()),Convert.ToDouble(row["POINT_X"].ToString()));

}

‘按照X坐标进行排序,key值即为ObjectID

List<KeyValuePair<int, double>> lstorder= list.OrderBy(c=> c.Value).ToList();

}

} ‘再根据lstorder,采用SQL语句的update进行ZD的编码更新操作

4)将图形导入标准数据库,并进行相关拓扑错误处理后,可进一步实现地块四至的自动读取。算法通过遍历DK图层中的要素,利用空间关系找出当前地块的相邻地块,并根据相邻地块与当前地块的几何重心连线计算方位角;再根据方位角的大小判断四至关系,并更新到地块记录的四至字段中。实践证明,该方法自动读取的成功率在90%以上。其部分代码为:

‘遍历DK图层

IPoint gravityDK= new PointClass(); ‘用于存放DK要素的几何重心

ISpatialFilter spatialFilter= new SpatialFilterClass(); ‘用于空间位置查询

string dongzhi=””,xizhi=””,nanzhi=””,beizhi=””; ‘用于存放四至

foreach (DataRow rowDK in dtDK.Rows){

‘获得当前DK要素

featureDK= featureClassDK.GetFeature(int.Parse(rowDK["OBJECTID"].ToString()));

‘利用SQL查询方式从DK_FeatureToPoint表中获得DK的几何重心,比使用ArcEngine游标效率高

sql="select * from DK_FeatureToPoint where ORIG_FID="+rowDK["OBJECTID"].ToString();

dt= accessTools.SelectToDataTable(sql);

rowDK_FeatureToPoint=dt.Rows[0];

gravityDK.PutCoords(Convert.ToDouble(rowDK_FeatureToPoint["POINT_X"].ToString()),Convert.ToDouble(rowDK_FeatureToPoint["POINT_Y"].ToString()));

‘查找当前DK要素的相邻地块

spatialFilter.Geometry= featureDK.ShapeCopy;

spatialFilter.SpatialRel= esriSpatialRelEnum.esriSpatialRelIntersects;

featureCursor= featureClassDK.Search(spatialFilter, false);

feature= featureCursor.NextFeature();

while(feature!=null)

{

‘获取相邻要素的几何中心并计算方位角,根据方位角判定四至并存入对应的字符串

feature= featureCursor.NextFeature();

}

featureDK.set_Value(feature.Fields.FindField("DKDZ"),dongzhi); ‘设置东至

‘释放查询游标featureCursor

System.Runtime.InteropServices.Marshal.ReleaseComObje ct(featureCursor);

}

3 需要注意的问题

1)由于FBF表、CBF表和CBDKXX表均由村组填写,水平参差不齐,为了避免Excel在读取或写入数据库时的异常报错(或错误信息较多),在根据NY/T 2537-2014《农村土地承包经营权调查规程》设计数据库模板时,可将某些字段的强制性要求设计为弱强制性,如相关必填字段可设计为空,限制长度的字段可先不做检查,而在完成数据库建设后统一执行数据库检查程序。

2)在向村组下发FBF表、CBF表和CBDKXX表时,不应直接采取NY/T 2537-2014《农村土地承包经营权调查规程》中定义的相关表格样式,如CBF表中的家庭成员列未包含是否共有人等字段,但数据库中却包含该字段。因此,应该根据NY/T 2539-2016《农村土地承包经营权确权登记数据库规范》中的数据库字段设计完整的表格,并在完成数据库建设后根据NY/T 2537-2014《农村土地承包经营权调查规程》执行相应表格规范和统一输出。

3)在批量读取执行表格信息时,应具有一定的容错能力。在某个Excel读取或写入失败后,应自动跳过,并在批量执行结束后,进行错误信息提示。在对数据库表执行增加、更新、删除等遍历操作时,考虑到执行效率,应尽量使用SQL语句的方式,并在操作完成后,及时对表进行关闭,以避免出现“无法打开表格”等异常。在利用ArcEngine执行遍历操作时,应及时释放游标。

4 结 语

在沈阳市开展农村土地承包经营权确权登记试点的过程中,由作业单位实际负责承包地块的测绘工作,并出具具体的CBF、FBF、CBDKXX等表格样式;由村组负责完成表格填写和权属资料整理。结合该工作模式,本文利用Esri公司提供的ArcEngine二次开发技术,实现了表格权属信息与测绘图形信息的自动关联,有效调动了村组在信息调查方面的优势和动力,不仅提高了工作效率,而且节约了作业成本,在实际作业中取得了较好的效果。

猜你喜欢
村组字段权属
图书馆中文图书编目外包数据质量控制分析
房屋“权属存在争议”的合理认定
试论农村村组职能社区化
农村宅基地房屋权属的确定
河南严控"确权确股不确地"范围
浅谈农村集体土地上房屋权属登记与交易管理
论权属档案的公开
浅析当前村组财务管理工作中存在的问题及改进措施
CNMARC304字段和314字段责任附注方式解析
无正题名文献著录方法评述