Postgis合并和线串的顺序

时间:2013-07-30 10:26:45

标签: kml postgis multilinestring

我在我的数据库KML中导入了postgis个文件。当我选择一条道路时,我得到了正确的结果: 这是一条路。没有很多行,所以我可以手动订购,但有些道路有100多个。

kml import

所以我想在导入时订购线串。

我有这个:

Linestrings

1 - 我想合并线串。使用ST_Union可以做到这一点,但如果我现在这样做,结果很奇怪,这就是为什么我必须订购这些线。

2 - 所以我必须订购线串,这就是为什么我在表格中有一个列位置。我知道如何得到线串的结束和第一点。

当我这样做时:

SELECT ST_AsText(ST_ClosestPoint(ST_GeomFromText('POINT(7.38770714271048 47.5497446465569)',4326),geometrie)), ST_AsText(ST_ClosestPoint(geometrie,ST_GeomFromText('POINT(7.38770714271048 47.5497446465569)',4326))) FROM sections WHERE nom_voie = 'LA THERMALE';

7.38770714271048 47.5497446465569是端点

它返回道路LA THERMALE的所有行。

是否有其他解决方案来合并线串可能没有排序?

当我连接线串时,结果为false:它将第1行的端点与第4行的起点相关联。我认为这是因为它们没有被排序。

1 个答案:

答案 0 :(得分:9)

尝试使用ST_Collect将线条聚合成MULTILINESTRING(希望如此),然后使用ST_LineMerge将它们缝合在一起。

SELECT nom_voie, ST_LineMerge(ST_Collect(geometrie))
FROM sections
WHERE nom_voie = 'LA THERMALE'
GROUP BY nom_voie;

例如,使用MULTILINESTRING,与您的图相同: A

SELECT ST_AsText(ST_LineMerge('
MULTILINESTRING ((27 215, 140 170),
  (230 210, 330 170),
  (230 210, 140 170),
  (330 170, 380 230))'));

                     st_astext
----------------------------------------------------
 LINESTRING(27 215,140 170,230 210,330 170,380 230)
(1 row)

enter image description here

因此,它不会出现排序甚至方向问题。