1
我有这个PHP函数,但它似乎给出了错误的结果。有没有人知道它有什么问题(尤其是公式)?地理目的地公式
/**
* Finds a destination given a starting location, bearing and distance.
*
* @param array $startingCoordinates The starting coordinates, as non-directional floats in an array with lat and lon keys.
* @param float $bearing The initial bearing in degrees.
* @param float $distance The distance to travel in km.
*
* @return array The desitination coordinates, as non-directional floats in an array with lat and lon keys.
*/
public static function findDestination(array $startingCoordinates, $bearing, $distance) {
$startingCoordinates['lat'] = (float)$startingCoordinates['lat'];
$startingCoordinates['lon'] = (float)$startingCoordinates['lon'];
$angularDistance = $distance/Maps_EARTH_RADIUS;
$lat = asin(
sin($startingCoordinates['lat']) * cos($angularDistance) +
cos($startingCoordinates['lat']) * sin($angularDistance) * cos($bearing)
);
return array(
'lat' => $lat,
'lon' => $startingCoordinates['lon'] + atan2(
sin($bearing) * sin($angularDistance) * cos($startingCoordinates['lat']),
cos($angularDistance) - sin($startingCoordinates['lat']) * sin($lat)
)
);
}
你能详细说明“错误的结果”是什么样的吗?我不认为有太多的人愿意安装它,获得一些实际的坐标,并计算错误描述。 – 2010-04-23 17:21:57
你是否在寻找http://stackoverflow.com/questions/2548943/gps-format-in-php/2548996#2548996?不能告诉上述代码失败了30年代的规则。 – Gordon 2010-04-23 17:24:24
当我用纽约的坐标(40.7142691,-74.0059729)以及不同的距离和方向来运行时,我最终每次都得到相同的结果。 0度,10公里 - > 0.12643539666731,-74.0059729 0度,100公里 - > 0.12643539666731,-74.0059729 0度,100公里 - > 0.12643539666731,-74.0059729 90度,10公里 - > 0.12643539666731,-74.0059729 90度, 100km - > 0.12643539666731,-74.0059729 90度,100km - > 0.12643539666731,-74.0059729 似乎很不正确:) – 2010-04-24 11:12:15