这是通过谷歌地图(SphericalUtil.java)
// from SphericalUtil.java
// compile 'com.google.maps.android:android-maps-utils:0.4.4'
public static LatLng computeOffset(LatLng from, double distance, double heading) {
distance /= 6371009.0D; //earth_radius = 6371009 # in meters
heading = Math.toRadians(heading);
double fromLat = Math.toRadians(from.latitude);
double fromLng = Math.toRadians(from.longitude);
double cosDistance = Math.cos(distance);
double sinDistance = Math.sin(distance);
double sinFromLat = Math.sin(fromLat);
double cosFromLat = Math.cos(fromLat);
double sinLat = cosDistance * sinFromLat + sinDistance * cosFromLat * Math.cos(heading);
double dLng = Math.atan2(sinDistance * cosFromLat * Math.sin(heading), cosDistance - sinFromLat * sinLat);
return new LatLng(Math.toDegrees(Math.asin(sinLat)), Math.toDegrees(fromLng + dLng));
}
使用它使用的代码,你只需要进入centerLatLng,以米为单位的距离,从centerLatLng度航向。
您可以将公式更改为您喜欢的语言。
看起来像一个很好的方法。对于知道我试图使用UTM为[纬度,经度]反之亦然计算方法同样的事情,以便找到合适的坐标和纬度,经度期间的计算。我认为这种方法也与你的方法相同,但只有公式是不同的,但我已经读过UTM公式可以完全以厘米为单位转换位置......顺带一提,非常感谢您的回复! – 2011-12-21 14:19:15
UTM已经通过将地球划分成大量的区域来解释地球表面的局部变形,每个区域都有自己的基准面。这就是为什么它比为所有地球使用单个投影的WGS更精确。如果您需要工具来转换为笛卡尔坐标 - 计算您的积分并转换回Lat/Long而不必担心数学问题,请查看GDAL/OGR(特别是OSR - 这是空间参考API) – MappaGnosis 2011-12-21 14:33:15