嗨,我的 gps 应用程序中的朋友们,我确实将地理点转换为像素。我有两个地理点,所以我将这两个点都转换为像素现在我对这两个像素点取不同,我想将此差异转换为公里
问问题
2394 次
1 回答
3
我不建议使用视图像素进行距离计算。如果你有地理点,你应该使用那些。这一切都归结为一些大地测量计算。准确性取决于您如何模拟地球。您想要的是使用大地大圆线来执行距离计算。
如果将地球建模为球体(使用余弦定律):
double earthAverageRadius = 6378137; //Average mean in meters when modeling the world as a sphere
double angle = Math.acos(Math.sin(point1.x) * Math.sin(point2.x)
+ Math.cos(point1.x) * Math.cos(point2.x) * Math.cos(point1.y- point2.y));
double distance = angle * pi * earthAverageRadius; // distance in metres
我还建议研究Haversine 公式,它在数值上更稳定。使用 hasrsine 公式,在前面的代码中计算的角度将是:
double a = Math.pow(Math.sin((point2.x-point1.x)/2.0), 2.0)
+ Math.cos(point1.x) * Math.cos(point2.x) * Math.pow(Math.sin((point2.y-point1.y)/2.0), 2.0);
double angle = 2 * Math.asin(Math.min(1.0, Math.sqrt(a)));
如果您想要提高精度(对于远距离),您应该考虑将地球建模为一个椭球体,尽管这方面的计算要困难得多。
编辑:另请注意,仅当您以弧度给出经度和纬度时,上述内容才成立。所以你也必须先进行转换。
于 2011-04-09T06:55:14.207 回答