我有一个写有纬度和经度的SQLite表。当我尝试用它计算距离时,我得到了错误的答案。
char myc;
while ((myc = cin.get()) != '\n')
dosomething(myc);
}
预期输出为4800公里(圣彼得堡和莫斯科之间的距离)。 但是实际结果是9000公里。
我使用Android 9.0和Java 11
答案 0 :(得分:0)
正如让·克洛德(Jean-Claude)所指出的,来看看harvesine。
public double distance(double p1LatRad, double p1LongRad, double p2LatRad, double p2LongRad) {
double sinLatDiff = Math.sin((p1LatRad - p2LatRad) / 2.0);
double sinLongDiff = Math.sin((p1LongRad - p2LongRad) / 2.0);
double a = sinLatDiff * sinLatDiff + Math.cos(p1LatRad) * Math.cos(p2LatRad) * sinLongDiff * sinLongDiff;
return 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)) * 6_378_100;
}
此外,请勿实施自己的弧度转换。您可以使用内置的Math.toRadians和Math.toDegrees函数。