在PostGIS中计算两个多边形的共享边的长度

时间:2015-08-06 14:35:19

标签: polygon postgis

我有几个多边形的数据库。每个多边形都有许多定义它的节点。另外,每个多边形具有至少一个邻居。为了计算,我需要确定两个相邻多边形的共享边的长度。在示例图片中,示出了这种情况。这两个多边形共享红色边缘。如何在PostGIS的帮助下计算红边的长度?我找不到这个功能。

Example of two polygones that share two edges

1 个答案:

答案 0 :(得分:4)

您可以获取两个多边形的intersection,然后获取任何LineStrings的长度。例如,采用两种几何形状:

SELECT ST_Length(ST_CollectionExtract(ST_Intersection(a_geom, b_geom), 2))
FROM (
  SELECT
    'POLYGON((70 170,160 250,240 220,270 130,185 62,90 80,70 170))'::geometry AS a_geom,
    'POLYGON((160 250,236 314,380 290,390 150,270 130,240 220,160 250))'::geometry AS b_geom
) f;

或者为表mypoly touch中的所有多边形对执行此操作:

SELECT a.gid AS gid_a, b.gid AS gid_b,
  ST_Length(ST_CollectionExtract(ST_Intersection(a.geom, b.geom), 2))
FROM mypoly a, mypoly b
WHERE a.gid < b.gid AND ST_Touches(a.geom, b.geom);

您还可以浏览Topology extension,它是PostGIS 2.x的一部分。

相关问题