农村土地确权数据建库
- 土地确权数据库介绍
农村集体土地确权是依照法律、政策的规定确定某一范围内的土地(或称宗地)的所有权、使用权的隶属关系和他项权利的内容,即确认和确定土地所有权、使用权和他项权利,简称农村土地确权。每宗土地权属要经过土地登记申请、地籍调查、权属审核、登记注册、颁发土地证书等土地登记程序,才能得到最后的确认和确定。
农村土地确权工作包括资料收集、工作底图制作、外业调查测量和登记、土地确权空间数据库建设、成果汇交等步骤。其中,空间数据库建设是土地确权工作的重要基础,只有利用信息技术精准化、精细化地管理和处理宗地空间数据,才能减少宗地“四至”边界不清、面积不明等带来的诸多问题。
利用外业调查制作的土地调查底图转换入库是农村土地确权空间数据库建设的主要环节。在实际工作中,许多外业调查单位使用AutoCAD软件编制土地确权图纸,图层包括村组行政边界、地块界址线、地块名称、地块编号、权属单位和名称、承包人名称等,如图1所示。数据详情见图2。
图1 土地确权外业调查图纸
图2 局部数据详情
《农村土地承包经营权确权登记数据库规范》(NY/T 2539—2014)简称确权登记数据库规范,是设计和建设农村土地确权空间数据的基础。确权登记数据库规范规定了数据库主要包括用于农村土地承包经营权调查、确权登记的地理信息数据和权属数据。地理信息要素包括定位基础、境界与管辖区域以及对承包地块四至描述有重要意义的其他地物信息。农村土地权属要素指用于描述承包地块空间位置、坐落(四至)、面积、编码和毗邻关系的矢量信息。权属数据包括发包方、承包方、承包地块信息、权属来源、承包经营权登记簿、承包经营权证等。
本示例主要处理地块空间数据表、承包方地块信息表、承包方表,表结构如表1和表2、表3所示。
表 1 地块属性结构描述表 (属性表名 :DK)
序号 | 字段名称 | 字段代码 | 字段 类型 | 字段 长度 | 小数 位数 | 约束 条件 | 备注 |
1 | 标识码 | BSM | Int | 10 | M | 主码 | |
2 | 要素代码 | YSDM | Char | 6 | M | ||
3 | 地块编码 | DKBM | Char | 19 | M | ||
4 | 地块名称 | DKMC | Char | 50 | M | ||
5 | 所有权性质 | SYQXZ | Char | 2 | O | ||
6 | 地块类别 | DKLB | Char | 2 | M | ||
7 | 土地利用类型 | TDLYLX | Char | 3 | O | ||
8 | 地力等级 | DLDJ | Char | 2 | M | ||
9 | 土地用途 | TDYT | Char | 1 | M | ||
10 | 是否基本农田 | SFJBNT | Char | 1 | M | ||
11 | 实测面积 | SCMJ | Float | 15 | 2 | M | 单位:m2 |
12 | 地块东至 | DKDZ | Char | 50 | C | ||
13 | 地块西至 | DKXZ | Char | 50 | C | ||
14 | 地块南至 | DKNZ | Char | 50 | C | ||
15 | 地块北至 | DKBZ | Char | 50 | C | ||
... | ... | ... | ... | ... | ... |
表2 承包地块信息表结构 (属性表名 :CBDKXX)
序号 | 字段名称 | 字段 代码 | 字段 类型 | 字段 长度 | 小数 位数 | 约束 条件 | 说明 |
1 | 地块编码 | DKBM | Char | 19 | M | ||
2 | 发包方编码 | FBFBM | Char | 14 | M | ||
3 | 承包方编码 | CBFBM | Char | 18 | M | ||
4 | 承包经营权取得方式 | CBJYQQDFS | Char | 3 | M | ||
5 | 合同面积 | HTMJ | Float | 15 | 2 | M | 单位:m2 |
... | ... | ... | ... | ... | ... |
表3承包方表结构 (表名 :CBF)
序号 | 字段名称 | 字段代码 | 字段 类型 | 字段 长度 | 小数 位数 | 约束 条件 |
1 | 承包方编码 | CBFBM | Char | 18 | M | |
2 | 承包方类型 | CBFLX | Char | 1 | M | |
3 | 承包方(代表)名称 | CBFMC | Char | 50 | M | |
4 | 承包方(代表)证件类型 | CBFZJLX | Char | 1 | M | |
5 | 承包方(代表)证件号 | CBFZJHM | Char | 20 | 非空 | |
... | ... | ... | ... | ... | ... |
为了区分数据表名称和字段名称,本实例所有数据表名称均使用“t_”为缀。例如地块数据表名为t_DK。
- CAD数据导入PostGIS
根据图1所示的外业调查图纸图层内容,分析确权数据库表结构,可以确定土地确权数据入库过程包括CAD数据转SHP文件、SHP文件入库。
(1)本示例使用QGIS开源GIS软件将CAD图纸转为SHP文件,CAD图纸导出的SHP文件如表3所示。
表10-3 CAD图纸导出的SHP文件一览表
序号 | CAD图层名称 | SHP文件/图层名称 |
1 | 地块编号 | DKBH |
2 | 地块名称 | DKMC |
3 | 承包人名称 | CBRMC |
4 | 地名 | DM |
5 | 权属单位 | QSDW |
6 | 地块界址线 | DKJX |
7 | 组界 | ZJ |
8 | 村界 | CJ |
导入CAD图纸可以在QGIS中,点击Project➞Import/Export➞Import Layers from DWG/DXF菜单,打开导入DWG或DXF对话框如图3所示。
图3 导入DWG/DXF文件
❉注意:(1)在导入带有中文文本实体的CAD图纸时,如果直接导入DWG文件,导入后的图层中汉字将出现乱码,所以在导入这类图纸时,要在AutoCAD中,将DWG文件另存为DXF文件,再导入。(2)图纸的图层名称不能为中文,否则打开DWG或DXF文件会报“打开CAD图层错误”之类的错误提示。
CAD图纸导入到QGIS以后的显示结果如图4所示。
图4 DXF导入到QGIS结果
在QGIS图层列表中,右击对图层,在弹出的快捷菜单中选择Export➞Save Featrures as 菜单,弹出图5所示对话框。
图5 导出SHP对话框
❉注意:如果导出CAD注记图层,CAD的注记文本存储在text字段中。
- SHP文件入库操作直接使用PostGIS自带的shp2pgsql命令或shp2pgsql-gui可视化操作工具,将SHP文件导入到PostGIS空间数据库。各数据表名称使用表3中的SHP文件/图层名称,并加上“t_”前缀。例如,地块编号数据表名称为t_DKBH。图6是shp2pgsql-gui导入SHP文件到PostGIS的操作界面。
图6 shp2pgsql-gui界面
在QGIS里,导入了DWG/DXF文件以后,也可以直接使用QGIS的DB Manager工具,直接将加载的DWG/DXF图层导入到PostGIS数据库,界面如图7所示。
图7 DB Manager导入/导出数据界面
- 利用行政界线转换生成行政区划面要素
在CAD图纸中,行政区划界线包括国有界线(图层名gyjx)、村级区域界线(图层名cj)和组级区域界线(图层名zj),导入到PostGIS数据库中的数据表名也图层名相同。为了生成村级区域面要素,首先要将合并国有界线和村界线,然后再使用线转面函数构建村级区域面要素。
(1)合并国有界线和村界面并生成新的临时表cjqy,语句如下:
DROP TABLE IF EXISTS cjqy;
CREATE TABLE cjqy
AS
SELECT geom FROM gyjx
UNION
SELECT geom FROM cj;
(2)村界线转面,语句如下:
-- 创建村级区域数据表
DROP TABLE IF EXISTS t_cjqy;
CREATE TABLE t_cjqy
(
id serial4 primary key, -- 标识字段,主码
cjqybm varchar(20), -- 村级区域编码
cjqymc varchar(20), -- 村级区域名称
geom geometry(polygon, 3857) -- 面状几何图形
);
-- 从界线转面,并存入数据表
INSERT INTO t_cjqy(geom)
SELECT st_force2d(geom)
FROM
(
SELECT(st_dump(st_polygonize(geom))).geom as geom
FROM cjqy
) foo;
(3)将CAD图纸中的村级行政区域注记文字(表cj_texts)存入t_cjqy表的cjqymc字段。语句如下:
update t_cjqy a
set cjqymc = b."text"
from cj_texts b
where st_contains(a.geom,b.geom);
(4)使用村级行政区划操作步骤,实现组级区域空间表构建,语句如下:
DROP TABLE IF EXISTS zjqy;
CREATE TABLE zjqy
AS
SELECT geom FROM gyjx
UNION
SELECT geom FROM cj
UNION
SELECT geom FROM zj
-- 创建组级区域数据表
DROP TABLE IF EXISTS t_zjqy;
CREATE TABLE t_zjqy
(
id serial4 primary key, -- 标识字段,主码
zjqybm varchar(20), -- 组级区域编码
zjqymc varchar(20), -- 组级区域名称
geom geometry(polygon, 3857) -- 面状几何图形
);
-- 从界线转面,并存入数据表
INSERT INTO t_zjqy(geom)
SELECT st_force2d(geom)
FROM
(
SELECT(st_dump(st_polygonize(geom))).geom as geom
FROM zjqy
) foo;
update t_zjqy a
set cjqymc = b."text"
from zj_texts b
where st_contains(a.geom,b.geom);
(5)使用已有的村、组行政区划信息表中的行政区编码更新到村、组级区域数据表的编码字段,语句如下:
update t_cjqy a
set cjqybm = b.cjbm -- cjbm为村行政区表cjxx的村编码字段
from cjxx b
where a.cjqymc = b.cjmc; -- cjmc为村行政区表cjxx的村名称字段
update t_zjqy a
set zjqybm = b.fbfbm -- fbfbm为组级发包方表t_fbf的组编码字段
from t_fbf b
where a.zjqymc = b.fbfmc; -- fbfmc为组级发包方表t_fbf的组名称字段
上述语句是利用行政区名称,将两个数据表进行关联更新。处理后的组级行政区划信息如图8所示。
图8 处理后的组级行政区划及信息
- 利用地块界线转换生成地块面要素
在CAD里,地块界线不仅包括图层中的dkjx线实体,而且还包括各级行政区划界面,因此在postgis中构建地块面要素时,需要将各级行政区划界线、地块界线合并,存入临时数据表dkjx_all,然后再构建地块面要素。
(1)合并各类界线,语句如下:
DROP TABLE IF EXISTS dkjx_all;
CREATE TABLE dkjx_all
AS
SELECT geom FROM gyjx
UNION
SELECT geom FROM cj
UNION
SELECT geom FROM zj
UNION
SELECT geom FROM dkjx
;
(2)地块界线转面要素,语句如下:
-- 创建组级区域数据表
DROP TABLE IF EXISTS t_dk;
CREATE TABLE t_dk
(
id serial4 primary key, -- 标识字段,主码
dkbm varchar(20), -- 地块编码
dkmc varchar(20), -- 地块名称
cbr varchar(20), -- 地块承包人,用于存储CAD图纸中的承包人注记
geom geometry(polygon, 3857) -- 面状几何图形
);
-- 从界线转面,并存入数据表
INSERT INTO t_dk(geom)
SELECT st_force2d(geom)
FROM
(
SELECT(st_dump(st_polygonize(geom))).geom as geom
FROM dkjx_all
) foo
;
-- 将地块名称注记转存到t_dk表的dkmc字段
update t_dk a
set dkmc = b."text"
from dkmc_texts b -- dkmc_texts为地块名称注记数据表
where st_contains(a.geom,b.geom);
-- 将地块预编码注记转存到t_dk表的dkbm字段
update t_dk a
set dkbm = b."text"
from dkybm_texts b -- dkybm_texts为地块预编码注记数据表
where st_contains(a.geom,b.geom);
-- 将地块承包人注记转存到t_dk表的dkbm字段
update t_dk a
set cbr = b."text"
from cbr_texts b --cbr_texts为地块承包人注记数据表
where st_contains(a.geom,b.geom);
-- 去除承包人中共有宗地的“共有”两字
Update t_dk
Set cbr = replace(cbr,’共有’,’’);
-- 地块重编码,即将地块所属组级区域代码与预编码组合生成地块编码
UPDATE
t_DK a
SET
DKBM = b.ZJQYDM || a.DKBM
FROM
t_ZJQY b
WHERE
ST_Contains(b.geom,a.geom);
- 创建承包地块信息表
此过程首先要创建被包地块信息表(t_cbdkxx),然后从地块信息表中提取承包人(cbr)、地块编码(DKBM),并存入t_cbdkxx表。
(1)创建t_cbdkxx并赋值
--创建t_cbdkxx
CREATE TABLE t_CBDKXX
(
BSM serial8 primary key , -- 标识码
DKBM varchar(19) , -- 地块编码
FBFBM varchar(14) , -- 发包方编码
CBFBM varchar(18) , -- 承包方编码
CBFMC varchar(20) , -- 承包方名称(临时)
CBJYQQDFS varchar(3) , -- 承包经营权取得方式
HTMJ float , -- 合同面积
CBHTBM varchar(18) , -- 承包合同编码
LZHTBM varchar(20) , -- 流转合同编码
CBJYQZBM varchar(19) -- 承包经营权证(登记簿)编码
);
-- 从地块表中导入数据单个承包人数据
INSERT INTO t_CBDKXX(DKBM,CBFBM)
SELECT
a.DKBM,b.CBFMC
FROM
t_dk a,t_cbf b
where
a.CBRMC=B.CBFMC;
-- 从地块表中导入共有宗承包人信息
WITH foo AS
(
SELECT
dkbm, UNNEST(STRING_TO_ARRAY(cbr,'、')) as CBRMC --※
from
t_dk
where
cbr like '%、%' -- 在图纸中多个承包人使用“、”分隔
)
INSERT INTO t_CBDKXX(DKBM,CBFBM)
SELECT
a.DKBM,b.CBFBM
FROM
foo a,
t_cbf b
where
a.CBRMC=B.CBFMC;
程序行※的作用是将初始地块信息表中共有宗的多个承包人转换成数组并打散,形成多行记录。在共有宗多个承包人信息格式为“承包人1、承包人2、...承包人n共有”,函数STRING_TO_ARRAY用“、”将多个承包人的长字符串切分成数组,函数UNNEST将数组转换为多行记录。例如,下列语句:
SELECT UNNEST(STRING_TO_ARRAY('我~爱~中国','~'));
执行结果为:
unnest
-------------------
我
爱
中国
(2)为承包地块信息表赋发包方信息。宗地的发包方是宗地所属行政村民小组,因此根据地块面要素与行政村民小组(组级区域)面要素之间的包含关系,得到组级区域代码(即发包方代码)并赋给地块的发包方编码字段(FBFBM)。程序如下:
UPDATE t_CBDKXX a
SET
FBFBM= b.ZJQYDM -- 组级区域代码
FROM
t_ZJQY b, -- 组级区域表
t_dk c -- 地块表
WHERE
a.DKBM = c.DKBM
AND ST_Contains(b.geom, c.geom);
- 统计分析
(1)地块相交性检查
在农村土地确权数据库中,地块之间不应存在重叠现象,因此在地块完成入库以后,需要对地块面要素进行重叠性检查。语句如下:
SELECT
a.*
FROM
t_dk a
WHERE
EXISTS(
SELECT
1
FROM
t_dk b
WHERE
a.bsm <> b.bsm
and st_intersects(a.geom, b.geom)
);
(2)统计承包人地块面积
由于地块有单承包人和多承包人共有两种承包关系,多承包人共有的地块在计算时需要平均分配承包面积。统计语句如下:
-- 统计每个承包方承包地块面积小计
WITH foo AS -- 统计每个宗地的承包人数
(
SELECT
DKBM, COUNT(0) CBRS
FROM
t_CBDKXX
GROUP BY DKBM
)
SELECT
b.CBFBM AS 承包方编码,
MAX(d.CBFMC) AS 承包方名称,
ROUND(SUM(ST_Area(a.geom)/c.CBRS)::numeric,2) AS 承包地块面积
FROM
t_DK a, t_CBDKXX b, foo c, t_CBF d
WHERE
a.DKBM = b.DKBM
AND a.dkbm = c.dkbm
AND b.CBFBM = d.CBFBM
GROUP BY b.CBFBM;