postgresql – 使用PostGIS在不同的行中组合两个线串

让我举一个例子来解释这个问题.我有一个城市的一部分的OSM文件,比如美国加利福尼亚州的圣克拉拉,我加载到Postgres PostGIS.我正在尝试创建OSM文件中所有道路的数据库及其GPS坐标.让我们考虑一个名为“中央高速公路”的示例道路.我的疑问是

SELECT NAME,OSM_ID,AS_TEXT(ST_TRANSFORM(WAY,4326)) AS whole_road FROM planet_osm_roads WHERE NAME = 'CENTRAL EXPRESSWAY'

然而,这给了我不同的行,这些行对应于同一道路(中央高速公路)的不同路段,其中GPS坐标被存储为每行的线串.例如,如果获得类似的东西

Central Expressway |  id_1 | LInesTRING(x_1 y_1,x_2 y_2,x_3 y_3)


Central Expressway |  id_2 | LInesTRING(x_4 y_4,x_5 y_5)

我理解数据是如何存储在OSM文件中的.我的问题是我如何将不同的线串连接成一个,即类似的东西

Central Expressway |  id_new | LInesTRING(x_1 y_1,x_3 y_3,x_4 y_4,x_5 y_5)

提前致谢

解决方法

在OSM中,与几乎所有GIS系统一样,由于拓扑原因,长道路存储为多个线串.如果要获取单个道路的所有坐标,则应首先连接几何图形,然后再转换为WKT格式:

SELECT name,As_Text(
               ST_LineMerge(
                 ST_Collect(
                   ST_Transform(way,4326)
                 )
               )
             ) AS whole_road
FROM planet_osm_roads
WHERE name = 'CENTRAL EXPRESSWAY'
GROUP BY name;

ST_Collect()将组成Central Expressway的所有线串分组为单个多线串,然后ST_LineMerge()将以拓扑结构的方式将其转换为单个线串(即从一个端点到下一个起始点排序).

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...