【发布时间】:2021-10-29 21:35:09
【问题描述】:
A 正在使用 PostGIS (OSM),但我没有解决方案如何获取两点(A 点和 B 点)之间位置(纬度和经度)的点。我知道 ST_Distance 函数,但是这个函数不返回带有位置的点,这个函数只计算点之间的距离。如何获得位置积分?
【问题讨论】:
标签: java sql postgresql postgis openstreetmap
A 正在使用 PostGIS (OSM),但我没有解决方案如何获取两点(A 点和 B 点)之间位置(纬度和经度)的点。我知道 ST_Distance 函数,但是这个函数不返回带有位置的点,这个函数只计算点之间的距离。如何获得位置积分?
【问题讨论】:
标签: java sql postgresql postgis openstreetmap
假设您要检索的点是道路上的位置(线串),您可以在两个点之间分割线串,然后选择重叠或靠近它的点。
考虑这些点和线串,分别存储在表points和line中:
您可以使用函数ST_LineLocatePoint 来获取在线中给定点的确切位置,并且使用这些位置,您可以使用ST_LineSubstring 将线串切割 成一个子集。使用此子集,您可以检查哪些点相交或靠近它。以下示例检索沿线位于 POINT(-4.71 54.12) 和 POINT(-4.53 54.21) 之间的点 - 第二个和上一个最后一个点:
SELECT points.geom
FROM line
JOIN points ON
ST_Intersects(
points.geom,
ST_LineSubstring(
line.geom,
ST_LineLocatePoint(line.geom,'SRID=4326;POINT(-4.71 54.12)'::geometry),
ST_LineLocatePoint(line.geom,'SRID=4326;POINT(-4.53 54.21)'::geometry)))
【讨论】:
ST_Transform