当前位置:首页 期刊杂志

Python结合SQL建立地籍数据库的方法

时间:2024-05-22

陈秀萍, 郭忠明,吕翠华

(1.云南省测绘产品检测站,云南 昆明 650034;2.昆明冶金高等专科学校 测绘学院,云南 昆明 650033)

本文以云南省某建制镇地籍数据库建设为例,尝试利用Python编程语言构建数据库数据框架,采用ArcGIS数据导入模块,将外业采集的CAD格式的地形、地籍数据导入数据框架中,利用SQL查询语言对属性赋值,完成数据库的建设。

1 地籍建库中遇到的问题

笔者单位地籍建库工作可谓“一波三折”:工作初期技术路线的确定是基于建库作业员有多年MapGIS平台的数据编辑经验,拟购买MapGIS地籍管理系统:采用南方CASS地籍成图软件采集数据,以DXF为数据交换格式,将数据转换为入库要求的(*.wt、*.wl、*.wp)格式,然后建库,输出数据交换文件VCT。后期由于上交成果格式由最初规定的VCT或MDB改为唯一格式MDB,只能将数据重新转换到ArcGIS的personal GDB数据库中。由于MapGIS和ArcGIS对拓扑规则的定义不一致,两者在数据转换过程中产生了许多拓扑错误,无法保证数据精度。为了工作的正常进行,单位购买了一套城镇地籍建库管理软件(南方数码太极软件),重新考虑建库技术路线,之前在MapGIS平台所做的工作都白费了,不仅浪费大量的时间,而一套城镇地籍建库管理软件根本无法满足10个项目的需求。在这种情况下,综合利用多种已有的公共软件平台构建地籍数据库势在必行。

2 解决方案

针对以上问题,笔者经过反复研究和实践,利用Python编程语言构建数据库框架及完整属性结构,配合ArcGIS的数据导入模块、强大的拓扑检测 、拓扑处理功能,结合关系数据库的特点,利用SQL查询语句,完成了多个数据库的建设。

2.1 Python和SQL简介

1)Python是ESRI支持的一种面向对象、直译式、开源脚本语言,在ArcGIS典型安装时随其他组件一起安装[2],其语法简捷而清晰,具有丰富和强大的类库。

2)关系数据库是当前数据库系统的主流,SQL语言是关系数据库系统的一种高级语言,它集数据操作、定义和控制功能于一体,具有很强的通用性,且语言简单易学、风格统一,利用几个简单的英语单词组合,就可以完成很多复杂的功能[3]。

2.2 地籍数据库主要内容

地籍数据库的主要内容为包括[1]:定位基础、行政区划、地形、土地权属、土地利用、注记等空间要素;房屋权利人扩展属性、权属来源证明扩展属性等多个扩展属性表;街坊宗地、街坊面积等面积统计表;地籍调查表、审批意见等宗地文档。

2.3 建库流程及算法

根据数据库的内容及现有数据采集平台、数据处理软件,建库流程如下:

2.3.1 空间数据的处理

1)数据库数据框架的建立。采用2种方法:利用已有的南方数码太极软件建立数据框架;利用Python程序建立数据框架,这种方法可以完全脱离专业软件,充分发挥作业员的主动性和创造性(本文重点推荐)。

①设计、建立一个空数据库。为了便于数据的管理,在MDB数据库中建立一个数据集,数据集中包括所有要素类,根据要求对要素类定义相应的属性结构。地籍数据的精度非常重要,在自动建立数据集的过程中,需要增加1段代码,定义数据集中要素类的XYTolerance、XYResolution值,确保精度满足要求,代码中的A、B根据项目范围确定。

②下载并安装Python2.6。使用Windows的记事本建立一个新文件,输入程序代码,并保存为Build53XXXX.py文件。Build53XXXX.py的核心代码如下:

location = sys.argv[1]

gdb = sys.argv[2]

gp.CreatePersonalGDB_management(location, gdb)

mdb = "%s\%s" % (location, gdb)

gp.XYTolerance = "0.0000000001"

gp.XYResolution = "0.00000000001"

rs = gp.CreateSpatialReference_management("", "","0 0 A B, "", "", "", "0")

ds = "DS"

gp.CreateFeatureDataset_management(mdb, ds, rs)

gp.workspace = "%s\%s\%s" % (location, gdb, ds)

fc = "DGX"

gp.CreateFeatureclass(gp.workspace, fc, "POLYLINE")

gp.AddField_management(fc,"BSM","LONG","#","#","#","标识码", "NULLABLE", "NON_REQUIRED", "#")

gp.AddField_management(fc,"YSDM","TEXT","#","#","10"," 要素代码 ","NULLABLE", "NON_REQUIRED", "#")

fc = "GCZJD"

print gp.getmessages()

③启动ArcCatalog,根据项目情况定义数据集的坐标系。

2)数据的导入。利用ArcGIS的数据转换工具将AutoCAD数据导入到personal GDB文件中,已有的地形、地籍的属性数据均需要无损导入ArcGIS平台[4-6]。

3)数据拓扑处理。ArcGIS拓扑检查、拓扑编辑被广泛应用于地籍空间数据的处理及检查工作中,能够确保各空间数据层内、层间严格的拓扑关系的正确性。ArcGIS通过确定的拓扑规则在ArcMap和ArcCatalog中运行拓扑关系, ArcCatalog用于拓扑规则的创建,拓扑错误的检查,在ArcMap中按照错误提示进行修改。

2.3.2 属性数据的赋值

1)分析已有的3个mdb数据库。①GENERALDATA.mdb:前期在土地部门收集地籍档案资料,录入并保存地籍调查表、土地证等相关信息的数据库,表中包含了大量的扩展属性表内容;②DJ.mdb:外业提供的保存界址点、界址线、宗地等信息的数据库;③53XXXX.mdb:保存地形数据、地籍数据要素类且属性结构完整的数据库。

2)要素空间关系、属性字段的关系分析。①地籍权属要素之间的空间关系:宗地、界址线、界址点三者的空间约束关系非常紧密,界址点必然是界址线的端点,不存在没有界址点的宗地,也不存在孤立于宗地之外的界址点。②调查区、行政区、街坊、宗地、块地之间的关系:同一街坊的宗地加块地形成街坊,无缝的街坊合并后形成行政区,行政区面积之和等于调查区面积。分析要素类字段间的相互关系是确保属性数据赋值正确性的重要前提和基础。

根据云南省城镇地籍数据库建库技术标准,城镇地籍数据库各类要素的代码与名称是根据《基础地理信息要素分类与代码》(GB/T 13923-2006)的扩展,技术标准中规定了唯一代码[7],可以用SQL UPDATE语句直接更新。

扩展属性的部分内容根据土地局收集的地籍调查表、土地证、地籍申请书、权源文件等资料,录入保存在Microsoft Office Access 2003数据库数据总表中,使用INSERT语句复制相关内容到相关扩展属性表中。

3)常用的部分SQL语句。从上述建库技术路线不难看出,属性值仅包含少量的从已有AutoCAD转换过来自带的属性值,大量的属性字段值仍为空。我们采用ArcGIS的空间分析功能,配合SQL语句,对3个mdb中的表进行联合操作,快速完成属性赋值。

图层内字段直接赋值的语句:

update CLKZD, ZD, JZD set CLKZD.YSDM ="1000110000", ZD.YSDM = "1000110000", JZD.YSDM= "1000110000";

图层间字段赋值的语句:

update DLTB,JF set DLTB.QSDWMC =JF.XZQMC,DLTB.ZLDWMC = JF.XZQMC where DLTB.ZLDWDM = JF.XZQDM;

按照建库标准对某些字段值取位的语句:

Update JZD set JZDH1 = right(ZLDM,10) &left(UCa se(JZDH),1)+right("00000"+right(JZDH,len(JZDH)-1),4);

update FW set FWBH1 = right("000"+right(FWBH,le n(FWBH)),3);

update FW set ZDMJ = format(ZDMJ,"0.00");

扩展属性表数据的复制语句:

insert into ZD_TXQLDJ ( DJH, TDZH, QLR,QLRSFZJLX, QLRSFZJH, YWR, YWRSFZJLX,YWRSFZJH, TXQLZL, TXQLFW, SDRQ, QLSX,XCQX, SQSBH, SQS, SJR, SJRQ, SJD, SPBH,CSYJ, SCR, SCRQ, SHYJ, SHR, SHRQ, SPR,SPRQ, DJKBH, DJRQ, DJJS, DJKJBR, DJKSHR,TXQLZH ) select 地籍号, 土地证号, 权利人, 证件种类, 证件编号, 土地使用者, 证件种类, 证件编号, 权利种类, 权利范围, 权利设定日期, 权利顺序, 续存期限, 申请书编号, 申请书, 收件人, 收件日期, 收件单,审批表编号, 初审意见, 初审人, 初审人日期, 审核意见, 审核人, 审核人日期, 审批人, 审批人日期, 登记卡编号, 登记日期,登记记事, 经办人, 审核人, 土地证号from GENERALDATA;

3 结 语

1)综合利用多种公共平台软件构建地籍数据库,减少了对专业建库软件的依赖,降低了生产投入。笔者单位承担10个地籍建库项目,由于工期紧,由几个作业组同时作业,采用本文推荐的建库技术路线,顺利完成了工作任务。

2)在降低投入的同时,大大提高了工作效率。主要体现在2个方面:①SQL是对数据库中的数据表进行操作,与某些专业软件对属性的操作是基于对空间数据的叠加分析相比,速度更快,可以在短时间内更新上万条记录,轻松处理地籍数据库大量的属性内容;②所有数据库规模不同,结构、要素类相同,只要适当修改数据范围,就能生成数据库框架,SQL查询语句保存后可以不断重复用于不同数据库。

3)采用该方法建库,作业人员都感觉自身业务能力得到较大提高,思维模式发生转变,不再是一些工具的“奴隶”。

4)如果利用SQL语言的通用性,嵌入到如Visual Basic这样的高级语言开发平台上,或者结合Python脚本语言,利用高级语言开发工具的计算能力和SQL的数据库操纵能力,快速建立数据库应用程序,能更好地解决地籍建库中的属性录入问题;同时,在数据导入阶段,也可以利用Python脚本语言自动完成,进一步优化工作方案。

[1]张耀武,余蕴祥,赵乔贵,等.云南省地籍调查实施细则[M].昆明:云南大学出版社,2007

[2]Alex Martelli ,Anna Martelli Ravenscroft. Python Cookbook[M].第2版.北京:人民邮电出版社,2010

[3]李俊民.SQL结构化查询语言详解[M].北京:人民邮电出版社,2008

[4]李苏,杨敏华.地籍数据库动态更新机制的探讨[J].测绘科学,2010,33(4):166-168

[5]蒋绍年, 阎凤霞. 地籍数据建库方法研究[J].测绘与空间地理信息,2010,33(5):88-90

[6]陈春华,余红举. GIS 数据质量控制技术在地籍数据库建设中的应用[J].地理空间信息,2009,7(1):31-32

[7]GB/T 13923.基础地理信息要素分类与代码[S].北京:中国标准出版社,2006

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!