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()将以拓扑结构的方式将其转换为单个线串(即从一个端点到下一个起始点排序). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |