-1

我正在使用 Java 和 Postgres 创建一个公交车到达预测系统。每辆公交车都有固定的路线,因此我们将整个行驶路线作为 LineString 存储在 postgres 中。

在此处输入图像描述

有 3 个公交车站,每个公交车站 lat lon 也作为 LineString 存储在路线表中。还有一张包含停工名称和经纬度详细信息的表格。

stoppage_details 表

Stoppage 1 -  lat1,lon1
Stoppage 2 -  lat2,lon2
Stoppage 3 -  lat3,lon3

我正在寻找 Postgres 函数来解决以下问题。

  1. 如何使用 LineString(起点 lat lon 和 End point lat lon)获得路线的总距离(660m)。
  2. 每条总线上都安装了 GPS 系统,每 30 秒发送一次数据。我正在使用 ST_ClosestPoint 函数从 LineString 中查找最近的顶点。如何使用 LineString 找到顶点与下一个和上一个停止点之间的距离。
  3. 或者有人可以建议任何其他方法来解决上述问题。
4

1 回答 1

0
  1. 如果 p1 到 p8 是 srid:4326 (long/lat) 中的线串几何,那么您可以使用 st_length(line::geography) 以米为单位获得长度。

  2. 有点复杂,但有多种方法。例如,您可以使用线性参考功能将您的 GPS 点投影到线串上,并获取沿线的百分比,其中 0 是起点,1.0 是终点。如果您获取每个停止点并以相同的方式获得其百分比(也许也将其存储在您的表格中),那么找到小于 GPS 百分比且大于 GPS 百分比的停止点将为您提供相邻的停止点。线性参考功能使您能够根据线串的开始和停止百分比提取子串,并且您可以根据 GPS 点前后的距离获取每个子串的长度。

于 2017-01-14T16:05:07.967 回答