检查纬度经度是不是位于两个坐标之间的线上

Posted

技术标签:

【中文标题】检查纬度经度是不是位于两个坐标之间的线上【英文标题】:check if a latitude longitude lies on a line between two cordinates检查纬度经度是否位于两个坐标之间的线上 【发布时间】:2016-01-22 21:26:28 【问题描述】:

我有 3 个坐标及其纬度和经度。如果从 A 到 B 画一条线,我想检查第三个点是否正好在从 A 和 B 画的线上。

或者我们可以将这个问题改写为:连接三个坐标应该给我一条直线而不是三角形。

我只想在服务器上做这个计算。

【问题讨论】:

定义“直线”。 (提示:地球不是平的……) 如果你愿意牺牲一些精度或者坐标之间的距离不是那么大,我想你可以使用简单的三角几何。也就是说,使用 AB,AC,BC 之间的长度(即以米为单位)来找到由三个点组成的三角形的高度。高度越低,点“适合”到 A 和 B 的线段上就越好。 另一个,可能更简单的想法: isOntheLine = (dist(A,B) ~= dist(A,C)+dist(C,B)) ,再次使用 ~ 来表示你不能期望它是准确的。而是由于在距离计算等期间的投影而具有可接受的误差范围。 【参考方案1】:

您可以使用此代码

public static boolean onLine(LatLng A, LatLng B, LatLng C) 
    double m1 = (C.latitude - A.latitude)/(C.longitude - A.longitude);
    double m2 = (C.latitude - B.latitude)/(C.longitude - B.longitude);
    return m1 == m2;

【讨论】:

当您靠近两极或 A 和 B 相距很远时,这将无法正常工作!地球是圆的! 我同意。但是,如果要求检查坐标是否在一条直线上,则可以合理地假设坐标彼此接近。如果不是,直线没有意义。 我正在 Swift 中尝试这个逻辑。但是,它不起作用。每次它返回false。我还需要检查我的坐标是否在直线上

以上是关于检查纬度经度是不是位于两个坐标之间的线上的主要内容,如果未能解决你的问题,请参考以下文章

计算两个纬度和经度坐标之间的距离

C# 在 Linq 查询 WHERE 语句中返回两个纬度/经度坐标之间的计算距离

给定纬度/经度,说明坐标是不是在美国大陆内

如何计算两对坐标(纬度/经度)之间的距离

在两个纬度和经度之间绘制折线

一组经度/纬度点之间的最大距离