J'ai cette fonction PHP, mais elle semble donner des résultats erronés. Est-ce que quelqu'un a une idée de ce qui ne va pas avec (en particulier la formule)?Formule de destination géographique
/**
* 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)
)
);
}
Pouvez-vous détailler à quoi ressemblent les "mauvais résultats"? Je ne pense pas qu'il y ait trop de gens prêts à installer cela, obtenir des coordonnées réelles, et élaborer une description de l'erreur. –
Cherchez-vous http://stackoverflow.com/questions/2548943/gps-format-in-php/2548996#2548996? Je ne peux pas dire parce que le code ci-dessus a échoué la règle des années 30. – Gordon
Quand je lance ceci avec les coordonnées de new york (40.7142691, -74.0059729), et différentes distances et orientations, je finis par obtenir le même résultat à chaque fois. 0 °, 10 km -> 0,12643539666731, -74,0059729 0 °, 100 km -> 0,12643539666731, -74,0059729 0 °, 100 km -> 0,12643539666731, -74,0059729 90 deg, 10 km -> 0,12643539666731, -74,0059729 90 degrés, 100km -> 0.12643539666731, -74.0059729 90 deg, 100km -> 0.12643539666731, -74.0059729 Cela semble tout à fait incorrect :) –