我想把谷歌地图像素转换成千米



朋友们,在我的gps应用程序中,我确实将地理点转换为像素。我有两个地理点所以我把这两个点都转换成像素点现在我取这两个像素点的不同点我想把这个差值转换成千米

我不建议使用视图像素来进行距离计算。如果你有地理点,你应该使用它们。这一切都归结为一些大地测量计算。其准确性取决于你如何对地球建模。你想要的是使用大地测量大圆线来执行距离计算。

如果你把地球建模成一个球体(使用余弦定律):

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公式,在前面的代码中计算的角度将是:

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

如果你想提高精度(对于远距离),你应该考虑把地球建模成一个椭球体,尽管这样的计算相当困难。

编辑:还需要注意的是,只有在以弧度为单位给出经度和纬度时,上述情况才成立。所以你也需要先进行转换

最新更新