PostGIS开发实例之农村土地确权数据库实例

农村土地确权数据建库

  1. 土地确权数据库介绍

农村集体土地确权是依照法律、政策的规定确定某一范围内的土地(或称宗地)的所有权、使用权的隶属关系和他项权利的内容,即确认和确定土地所有权、使用权和他项权利,简称农村土地确权。每宗土地权属要经过土地登记申请、地籍调查、权属审核、登记注册、颁发土地证书等土地登记程序,才能得到最后的确认和确定。

农村土地确权工作包括资料收集、工作底图制作、外业调查测量和登记、土地确权空间数据库建设、成果汇交等步骤。其中,空间数据库建设是土地确权工作的重要基础,只有利用信息技术精准化、精细化地管理和处理宗地空间数据,才能减少宗地“四至”边界不清、面积不明等带来的诸多问题。

利用外业调查制作的土地调查底图转换入库是农村土地确权空间数据库建设的主要环节。在实际工作中,许多外业调查单位使用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。

  1. 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字段中。

  1. 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导入/导出数据界面

  1. 利用行政界线转换生成行政区划面要素

在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 处理后的组级行政区划及信息

  1. 利用地块界线转换生成地块面要素

在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);

  1. 创建承包地块信息表

此过程首先要创建被包地块信息表(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. 统计分析

(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;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lixilin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值