Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查经纬度是否位于两个坐标系之间的一条线上_Java_Android_Google Maps_Geospatial_Geo - Fatal编程技术网

Java 检查经纬度是否位于两个坐标系之间的一条线上

Java 检查经纬度是否位于两个坐标系之间的一条线上,java,android,google-maps,geospatial,geo,Java,Android,Google Maps,Geospatial,Geo,我有三个坐标和它们的纬度和经度。如果从a到B画一条线,我想检查第三个点是否正好在从a到B画的线上 或者我们可以将这个问题重新表述为:连接三个坐标应该给我一条直线,而不是三角形 我只想在服务器上进行此计算。您可以使用此代码 public static boolean onLine(LatLng A, LatLng B, LatLng C) { double m1 = (C.latitude - A.latitude)/(C.longitude - A.longitude); dou

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

或者我们可以将这个问题重新表述为:连接三个坐标应该给我一条直线,而不是三角形

我只想在服务器上进行此计算。

您可以使用此代码

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;
}

定义“直线”。(提示:地球不是平的…)如果你愿意牺牲一些精度或者坐标之间的距离不是那么大,我想你可以使用简单的三角形几何。也就是说,使用{AB,AC,BC}之间的长度(即米)来计算由三个点构成的三角形的高度。高度越低,点就越适合A和B所形成的线段。另一个可能更简单的想法是:isOntheLine=(dist(A,B)~=dist(A,C)+dist(C,B)),再次使用A~表示你不能期望它是精确的。相反,在距离计算等过程中,由于投影而产生的误差范围是可以接受的。当你靠近极点或者a和B彼此距离很远时,这将不会很好地工作!地球是圆的!我同意。然而,如果要求检查坐标是否位于直线上,则可以合理地假设坐标彼此接近。如果不是,直线是没有意义的。我正在用Swift尝试这个逻辑。但是,它不起作用。每次它都返回false。我还需要检查我的坐标是否在直线上