使用PostGIS连接相交线


15

我几乎不敢问这个问题,但是我似乎无法让它在我的一生中发挥作用。

我有一个路段,每个路段都有一个Road ID和一个路段type

我想将所有的段连接在一起,将每个段连接Road ID成一个线串,但前提是它们相同type且相互接触(所有线都对齐)。

在此处输入图片说明

Road ID - Type
   1       L
   1       L
   1       T
   1       L

Answers:


11

我认为,出于以下几个原因,下面的代码是比所选答案更干净的解决方案。首先,没有表联接是必要的,因此每个街道属性都不需要对“ ON”子句进行补充;其次,如果存在多个不连续的具有所有相同的属性值,而ST_Dump在此解决方案中解决了该问题。

SELECT (ST_Dump(geom)).geom AS geom, "road_id", "road_type"
FROM (
    SELECT ST_LineMerge(ST_Union(geom)) AS geom, "road_id", "road_type"
    FROM "RoadCentreLines"
    GROUP BY "road_id", "road_type"
) AS street_union

我的几何图形未与任何一个查询合并
Luffydude

@Luffydude想提供更多的信息吗?您正在使用的几何图形可能未对齐,因此有可能被合并
Grant Humphries,2017年

这对我来说很不错,它可以基于道路ID合并道路数据集。这样可以很好地处理带有间隙的道路(间隙部分无线)。我不是OP,但这是一个很好的答案。这应该是公认的答案。谢谢。
jbalk

这是最好的答案!
aborruso19年

6

似乎可行

SELECT a."Road_ID",a."Road_Type", ST_LineMerge(ST_Collect(a.the_geom))
FROM "RoadCentreLines" as a 
LEFT JOIN "RoadCentreLines" as b ON 
ST_Touches(a.the_geom,b.the_geom) 
    AND a."Road_Type" = b."Road_Type" 
    AND a."Road_ID" = b."Road_ID"
GROUP BY ST_Touches(a.the_geom,b.the_geom), a."Road_Type", a."Road_ID"

0

只是吐口水,但我可以想到其他一些解决方案。我不知道它们是好是坏,只是他们是其他。

首先,如果道路类型很少,则可以使用类似的内容逐一进行:

WITH type As (SELECT "Road_ID" As id WHERE "Road_Type" = 'type')
SELECT ST_LineMerge (ST_Collect(the_geom))
FROM "RoadCentreLines"
WHERE ST_StartPoint(the_geom) && ST_EndPoint(the_geom) IS TRUE
AND "Road_ID" IN (SELECT id FROM type);

如果有很多类型,您也可以将上述大多数功能与Road_Type一起用作FOR循环中的变量。

我的最后一个想法涉及合并所有几何图形,然后使用ST_Line_Substring函数(Link-Link)调用道路类型,但这根本行不通。

祝你好运,Rob

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.