我有一个位置(纬度和长度),我想找到下一个位置(纬度和长度),距离我的位置(纬度和长度)180度(南边)1公里。你能给我和算法或函数吗?
答案 0 :(得分:0)
从Java中的Rosetta code实现开始:
lon1 == lon2
如果你知道dLon == 0
,那么很多代码就会消失,因为public static double haversine(double lat1, double lat2) {
double dLat = Math.toRadians(lat2 - lat1);
return R * dLat;
}
:
length = Radius * angle in radians
(应该熟悉R = 6372.8
公式)
因此,如果你知道1
,并且你想要的结果是dLat
,那么很容易想出dLat = 1.0 / 6372.8;
的值:
1.0 / 6372.8
换句话说,只需从当前纬度中减去180 - 1.0 / 6372.8
(并记住小心处理小于handleSubmit(e) {
if (e) {
e.preventDefault();
}
var value = this.refs.num.value;
console.log(value);
}
render() {
console.log(this.refs.num ? this.refs.num.value : '');
return (
<form>
<input ref="num" type="hidden" name="amount" value="99" />
<a onClick={this.handleSubmit.bind(this)}>submit</a>
</form>
);
}
的纬度点)。
答案 1 :(得分:0)
要获得简单的解决方案,请查看SimpleLatLng库及其travel()方法:
/**
* <p>
* Calculate the end point of traveling along a great-circle path from a
* given starting point with a given intitial bearing for a known distance.
* </p>
*
* @param start
* the starting point.
* @param initialBearing
* the initial bearing.
* @param distance
* the distance to travel.
* @param unit
* the unit in which distance is measured.
* @return the end point.
*/
public static LatLng travel(LatLng start, double initialBearing, double distance,
LengthUnit unit) {
double bR = Math.toRadians(initialBearing);
double lat1R = Math.toRadians(start.getLatitude());
double lon1R = Math.toRadians(start.getLongitude());
double dR = distance / LatLngConfig.getEarthRadius(unit);
double a = Math.sin(dR) * Math.cos(lat1R);
double lat2 = Math.asin(Math.sin(lat1R) * Math.cos(dR) + a * Math.cos(bR));
double lon2 = lon1R
+ Math.atan2(Math.sin(bR) * a, Math.cos(dR) - Math.sin(lat1R) * Math.sin(lat2));
return new LatLng(Math.toDegrees(lat2), Math.toDegrees(lon2));
}
您只需给它起点,方向,距离和单位,即可获得计算出的位置。您需要获取完整的库,因为此方法使用库声明的某些类。它也有一些其他有用的计算。
可在Apache 2.0 License下找到。
答案 2 :(得分:0)
向南移动,也是由于North,使计算变得简单,因为它避免使用经度。 See
1公里等于0.0088339度。
所以在北半球从位置纬度减去0.0088339并保持经度不变。 对于Southern Hemisphere,请添加0.0088339。