我有一张地图,其中我采用了西南和东北边界,并使用它来获取它们之间的位置。
由于日期行,有时边界不会像解释here那样出现。
所以我想到了:
将东北纬度与西南方向相比较, 如果它在右侧它的罚款,但如果它在左侧,我必须 做点什么。
所以要知道这一面,我计算了轴承(连接这些SW和NE点的直线与垂直线之间的角度)。因此,如果轴承介于0-90之间,或者不是。
但问题是:
这里的顶点符合lat和lng的东北地区 积极的:78.52379,158.70952
和
最低点符合拉特和伦敦的西南部资格 否定:-32.1087,-150.3139
地图仍试图以反方向连接点(可能是尝试最小距离)并将方位设为 342 ,我将其视为不合适的点并尝试反转其中的1个:(
看起来这是计算轴承的预期方法,如果有的话有办法解决/达到我想要的效果吗?
修改
function _getBearing($lat1, $lon1, $lat2, $lon2) {
//difference in longitudinal coordinates
$dLon = deg2rad($lon2) - deg2rad($lon1);
//difference in the phi of latitudinal coordinates
$dPhi = log(tan(deg2rad($lat2) / 2 + pi() / 4) / tan(deg2rad($lat1) / 2 + pi() / 4));
//we need to recalculate $dLon if it is greater than pi
if(abs($dLon) > pi()) {
if($dLon > 0) {
$dLon = (2 * pi() - $dLon) * -1;
}
else {
$dLon = 2 * pi() + $dLon;
}
}
//return the angle, normalized
return (rad2deg(atan2($dLon, $dPhi)) + 360) % 360;
}