使用gps坐标查找到下一个顶点的距离

时间:2017-01-14 12:02:09

标签: java postgresql pgrouting

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

enter image description here

有3个公共汽车停止,并且每个公共汽车站lat lon也在路线表中存储为LineString。 还有一个表有停工名称和lat lon详细信息。

stoppage_details表

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

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

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

1 个答案:

答案 0 :(得分:0)

  1. 如果p1到p8是srid中的一个线串几何:4326(长/纬),那么你可以用st_length(line :: geography)得到它的长度(米)。

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