使用PostGIS求两个要素类的相交部分 | 您所在的位置:网站首页 › pdf打印方向自动改变 › 使用PostGIS求两个要素类的相交部分 |
先用一张图来表达。 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执行效率很慢,我们看一下执行计划 但是该版本sql执行效率很慢,我们看一下执行计划 增加索引,提升分析过滤效率 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在比较特殊的情况下,上述版本3的代码执行还是很慢,首先我们观察数据 原因有如下几点: 行政区数据较大,空间索引发挥的作用优先,大图斑筛选出来的图斑个数仍然较多行政区数据较大,每一个筛选出来的图斑需要与行政区图版做计算,大图斑中绝大部分节点的计算是无效且无意义的。但是大量节点的计算耗时巨大所以如果使用小图斑计算可以更加便捷。 将行政区数据格网化后计算使用下一级行政区数据进行计算,比如CJDCQ(村级调查区)、XZXZQ(乡镇行政区) |
CopyRight 2018-2019 实验室设备网 版权所有 |