gpt4 book ai didi

java - 如何找到一些 GPS 点的中点/坐标?

转载 作者:搜寻专家 更新时间:2023-11-01 02:29:04 27 4
gpt4 key购买 nike

在我的应用程序中,我需要找到一些(3 个或更多)GPS 点的中点。

我已经找到两点之间的距离,如下所示

public class DistanceOfGeoPoints {
public static long distanceinKMeters(double dblLat, double dblNewLat, double dblLong, double dblNewLong)
{
try
{
//double dblDistance = 180 / (dblPI * Math.Acos(Math.Sin(dblLat) * Math.Sin(dblNewLat) + Math.Cos(dblLat) * Math.Cos(dblNewLat) * Math.Cos(dblLong - dblNewLong)));

double dblDegree2Radius = Math.PI / 180;
double dbllongdiff = (dblNewLong - dblLong) * dblDegree2Radius;
double dbllatdiff = (dblNewLat - dblLat) * dblDegree2Radius;
double a = Math.pow(Math.sin(dbllatdiff / 2.0), 2) + Math.cos(dblNewLat * dblDegree2Radius) * Math.cos(dblLat * dblDegree2Radius) * Math.pow(Math.sin(dbllongdiff / 2.0), 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
double dblDistance = 6367 * c; //Earth Radius * value (result in KM)

// return dblDistance;
long intdistance = (Math.round(dblDistance * 1000));

return intdistance;
}
catch (Exception ex)
{
return 0;
}
}
}

现在我想要N个GPS点的中点

请帮帮我。

最佳答案

欧几里德距离中两点的中点就是x和y坐标的平均值。如果我们只是平均点 A 和 B 的纬度和经度,这会在 A 和 B 之间给出一个点,但它不需要等距。

您可能想要的是将球面坐标转换为欧氏坐标,通过平均 x 和 y 找到中点,然后转换回纬度、经度。

如果我们使用超过 2 个点来执行此操作,我们需要澄清“中点”的含义。

如果我们想在欧氏几何中找到 N 个点的中点,我们只需对所有 x 值和所有 y 值求平均值。这给了我们一个合理的“中间点”,但这个平均点通常与所有三个点的距离不等。给定三个点,我们可以计算出与这三个点等距的唯一点;此点是由三个点定义的三角形的外接中心。但是由于三个点定义一个圆,这个过程不能推广到 n 个点。给定 4 个或更多点,可能没有与所有 4 个点等距的点。无论我们使用欧库里德距离还是球面几何距离,都是如此。

在下图中,我们可以看到外接圆心点正好距离A、B、C点5个单位。然而这个点感觉上并不是真正的“中间”。另一方面,由平均值定义的中点看起来确实在中间,即使它更接近 A 而不是 B 或 C。

Midpoint of three points

对于由 (lattitude, longitude) 定义的 n 个点,最好的方法可能是将所有这些点都转换为欧氏点,计算平均值,然后转换回 (lattitude,longitude.)可以在此处找到执行此转换的一些代码:Processing Forum还有一个很好的wikipedia page解释你需要理解的背景数学。

关于java - 如何找到一些 GPS 点的中点/坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13973485/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com