我已经在数据库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 sectionsWHERE nom_voie = 'LA THERMALE';

7.38770714271048 47.5497446465569是端点

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

是否有另一种解决方案可以合并线串而无需排序?

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

最佳答案

尝试使用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)




因此,从此看来,排序或方向都不重要。

关于kml - Postgis合并和线串顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17944480/

10-09 12:49