我需要在Google地图应用程序中将一个标记从一个点移动到另一个点。但是,我在使用LatLng坐标时遇到了麻烦,特别是因为精度错误。
我尝试了基本的2d运动,但似乎它不是地球坐标的正确方法
double dx = target.longitude - position.longitude;
double dy = target.latitude - position.latitude;
//Auxiliar.distance returns the distance in meters between two coordinates
double lenght = Auxiliar.distance(target, position);
dx *= SPEED/lenght;
dy *= SPEED/lenght;
position = new LatLng(position.latitude + dy,
position.longitude + dx);
我在尝试减去坐标时也遇到精度错误,因为它们是双倍的,所以我尝试使用BigDecimal,但仍然没有成功。
是否有算法在地球坐标系中进行直线运动?
这是我的距离函数的代码
public static double distance(LatLng point1, LatLng point2)
{
double earthRadius = 6371 ;
double dLat = Math.toRadians(point2.latitude-point1.latitude);
double dLng = Math.toRadians(point2.longitude-point1.longitude);
double sindLat = Math.sin(dLat / 2);
double sindLng = Math.sin(dLng / 2);
double a = Math.pow(sindLat, 2) + Math.pow(sindLng, 2)
* Math.cos(Math.toRadians(point1.latitude)) * Math.cos(Math.toRadians(point2.latitude));
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
double dist = earthRadius * c;
return dist*1000;
}