我有一个位置(纬度和经度),我想找到下一个位置(纬度和经度),该位置距我的位置(纬度和经度)180 度(南)1 公里。你能给我算法或函数吗?
最佳答案
从 Rosetta code 开始Java 实现:
public static double haversine(double lat1, double lon1, double lat2, double lon2) {
double dLat = Math.toRadians(lat2 - lat1);
double dLon = Math.toRadians(lon2 - lon1);
lat1 = Math.toRadians(lat1);
lat2 = Math.toRadians(lat2);
double a = Math.pow(Math.sin(dLat / 2),2) + Math.pow(Math.sin(dLon / 2),2) * Math.cos(lat1) * Math.cos(lat2);
double c = 2 * Math.asin(Math.sqrt(a));
return R * c;
}
如果您知道lon1 == lon2
,那么很多代码就会直接消失,因为dLon == 0
:
public static double haversine(double lat1, double lat2) {
double dLat = Math.toRadians(lat2 - lat1);
return R * dLat;
}
(这应该类似于长度 = 半径 * 以弧度表示的角度
公式)
因此,如果您知道 R = 6372.8
,并且您想要的结果是 1
,那么很容易得出 dLat
的值:
dLat = 1.0 / 6372.8;
换句话说,只需从当前纬度中减去 1.0/6372.8
(并记住小心处理小于 180 - 1.0/6372.8
的纬度点)。
关于java - 查找距离我的位置 180 度(南)1 公里的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37348207/