使用PostGIS求两个要素类的相交部分 您所在的位置:网站首页 pdf打印方向自动改变 使用PostGIS求两个要素类的相交部分

使用PostGIS求两个要素类的相交部分

2023-07-22 04:25| 来源: 网络整理| 查看: 265

先用一张图来表达。

在这里插入图片描述

ArcGIS的相交是将两个要素类的交集部分保存到生成的要素类中。

PostGIS的相交和ArcGIS的相交底层数学逻辑不一样 1.0 版本 create table ana_test as with a as (select * from xzqxs_temp ), b as (select * from yjjbntcbq_temp ), resultTable as (select ST_Multi(st_intersection(ST_MakeValid(a.wkb_geometry),ST_MakeValid(b.wkb_geometry))) as wkb_geometry from a,b) select *,ST_Area(resultTable.wkb_geometry) as inter_area from resultTable where ST_Area(wkb_geometry)>0

但是该版本sql执行效率很慢,我们看一下执行计划 在这里插入图片描述

2.0 版本 create table ana_test as with a as (select * from xzqxs_temp ), b as (select * from yjjbntcbq_temp ), resultTable as (select ST_Multi(st_intersection(ST_MakeValid(a.wkb_geometry),ST_MakeValid(b.wkb_geometry))) as wkb_geometry from a,b where ST_Intersects(a.wkb_geometry,b.wkb_geometry)) select *,ST_Area(resultTable.wkb_geometry) as inter_area from resultTable where ST_Area(wkb_geometry)>0

但是该版本sql执行效率很慢,我们看一下执行计划

在这里插入图片描述

3.0 版本

增加索引,提升分析过滤效率

CREATE INDEX spatial_xzqxs_temp_geom_idx ON xzqxs_temp USING GIST (wkb_geometry); CREATE INDEX spatial_yjjbntcbq_temp_geom_idx ON yjjbntcbq_temp USING GIST (wkb_geometry); explain analyze create table ana_test as with a as (select * from xzqxs_temp ), b as (select * from yjjbntcbq_temp ), resultTable as (select ST_Multi(st_intersection(ST_MakeValid(a.wkb_geometry),ST_MakeValid(b.wkb_geometry))) as wkb_geometry from a,b where ST_Intersects(a.wkb_geometry,b.wkb_geometry)) select *,ST_Area(resultTable.wkb_geometry) as inter_area from resultTable where ST_Area(wkb_geometry)>0

在这里插入图片描述

4.0 版本

在比较特殊的情况下,上述版本3的代码执行还是很慢,首先我们观察数据

在这里插入图片描述

原因有如下几点:

行政区数据较大,空间索引发挥的作用优先,大图斑筛选出来的图斑个数仍然较多行政区数据较大,每一个筛选出来的图斑需要与行政区图版做计算,大图斑中绝大部分节点的计算是无效且无意义的。但是大量节点的计算耗时巨大

所以如果使用小图斑计算可以更加便捷。

将行政区数据格网化后计算使用下一级行政区数据进行计算,比如CJDCQ(村级调查区)、XZXZQ(乡镇行政区)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有