Java 无法使用纬度和经度计算距离
我有一个写有纬度和经度的SQLite表。当我试图用它来计算距离时,我得到了错误的答案 平民的ArrayList 获得积分{ ArrayList 位置=刚出现的ArrayList; 数据操作db=t他的可读取数据库; 光标cursor=db.rawQuery从中选择纬度、经度+表\u名称\u位置,无效的; 我Fcursor.getCount>0{ 虽然cursor.moveToNext{ 双重的纬度=cursor.getDoublecursor.getColumnIndex拉特; 双重的经度=cursor.getDoublecursor.getColumnIndex朗吉; 位置、纬度; 位置。经度; } } 光标。关闭; R埃图恩地方 } 私有的双重的距离双重的lat1,双重的lon1,双重的lat2,双重的lon2{双重的θ=lon1-lon2; 双重的距离=数学sindeg2radlat1 * 数学sindeg2radlat2 + 数学cosdeg2radlat1 * 数学cosdeg2radlat2 * 数学cosdeg2radtheta; 距离=数学acosdist;dist=rad2degdist; 距离=距离*60* 1.1515; R埃图恩区; } 私有的双重的脱胶剂双重的deg{r埃图恩度数*数学π/180; } 私有的双重的rad2deg双重的拉德{R埃图恩拉德*180/ 数学圆周率; } 预计输出距离圣彼得堡和莫斯科4800公里。 但实际结果是9000公里Java 无法使用纬度和经度计算距离,java,Java,我有一个写有纬度和经度的SQLite表。当我试图用它来计算距离时,我得到了错误的答案 平民的ArrayList 获得积分{ ArrayList 位置=刚出现的ArrayList; 数据操作db=t他的可读取数据库; 光标cursor=db.rawQuery从中选择纬度、经度+表\u名称\u位置,无效的; 我Fcursor.getCount>0{ 虽然cursor.moveToNext{ 双重的纬度=cursor.getDoublecurs
我使用Android 9.0和Java 11,正如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函数。公式存在问题。请参见此处:可能还有此处: