在我的gps应用程序的朋友中,我确实将Geo点转换为像素。我有两个地理点,所以我将这两个点转换为像素现在我采取不同的这两个像素点,我想将这个差异转换为千米
答案 0 :(得分:3)
我不建议使用视图像素进行距离计算。如果你有地理位置,你应该使用它们。这一切都归结为一些大地测量计算。精确度取决于你如何模拟地球。您想要的是使用大地测量great circle lines来执行距离计算。
如果你将地球建模为球体(使用余弦定律):
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 formula,这在数值上更稳定。使用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)));
如果你想要提高准确度(对于大距离),你应该考虑将地球建模为椭圆体,尽管对此的计算要困难得多。
编辑:另请注意,只有以弧度为单位给出经度和纬度时,上述情况才有效。所以你也必须先进行转换。