2

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

公里进口

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

我有这个 :

线串

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 的所有行。

是否有另一种解决方案来合并线串而不需要排序?

当我连接线串时,结果是错误的:它将第 1 行的端点与第 4 行的起点等联系起来。我认为这是因为它们没有排序。

4

1 回答 1

10

尝试使用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,与您的图相同: 一种

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)

在此处输入图像描述

因此,从这一点来看,顺序甚至方向都不重要。

于 2013-07-30T11:58:21.113 回答