加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 15:55:14 所属栏目:百科 来源:网络整理
导读:让我举一个例子来解释这个问题.我有一个城市的一部分的OSM文件,比如美国加利福尼亚州的圣克拉拉,我加载到Postgres PostGIS.我正在尝试创建OSM文件中所有道路的数据库及其GPS坐标.让我们考虑一个名为“中央高速公路”的示例道路.我的疑问是 SELECT NAME,OSM_I
让我举一个例子来解释这个问题.我有一个城市的一部分的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()将以拓扑结构的方式将其转换为单个线串(即从一个端点到下一个起始点排序).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读