微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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()将以拓扑结构的方式将其转换为单个线串(即从一个端点到下一个起始点排序).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐