在PostGIS中如何获取两点(A点和B点)之间的点(经纬度)?

2022-04-09 00:00:00 postgresql postgis sql openstreetmap java

A我正在使用PostGIS(OSM),我没有一个解决方案来获取位置在两个点(点A和点B)之间的点(纬度和经度)。我知道ST_Distance函数,但是这个函数不返回带位置的点,这个函数只计算点之间的距离。如何通过位置获得积分?


解决方案

假设您要检索的点是道路上的位置(线串),您可以在这两个点之间拆分线串,然后选择与其重叠或接近的点。

考虑分别存储在表pointsline中的这些点和线串:

您可以使用函数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)))

演示:db<>fiddle

相关文章