Question

J'ai récupéré une base de données des codes postaux et de leurs langues / latitudes, etc. Cette page . Il comporte les champs suivants:

  

ZIP, LATITUDE, LONGITUDE, VILLE, ÉTAT, COMTÉ, ZIP_CLASS

Les données étaient dans un fichier texte mais je les ai insérées dans une table MySQL. Ma question est la suivante: comment puis-je utiliser les champs ci-dessus pour calculer la distance entre deux codes postaux qu'un utilisateur peut entrer sur le site Web? Le code de travail en PHP sera apprécié

Était-ce utile?

La solution

Vous pouvez également essayer de frapper un service Web pour calculer la distance. Laissez quelqu'un d'autre faire le gros du travail.

https://www.zipcodeapi.com/API#distance

Autres conseils

C’est la réponse de Mike avec quelques annotations pour les nombres magiques . Cela semblait fonctionner correctement pour certaines données de test :

function calc_distance($point1, $point2)
{
    $radius      = 3958;      // Earth's radius (miles)
    $deg_per_rad = 57.29578;  // Number of degrees/radian (for conversion)

    $distance = ($radius * pi() * sqrt(
                ($point1['lat'] - $point2['lat'])
                * ($point1['lat'] - $point2['lat'])
                + cos($point1['lat'] / $deg_per_rad)  // Convert these to
                * cos($point2['lat'] / $deg_per_rad)  // radians for cos()
                * ($point1['long'] - $point2['long'])
                * ($point1['long'] - $point2['long'])
        ) / 180);

    return $distance;  // Returned using the units used for $radius.
}

Cela peut être fait avec juste des maths ...

function calc_distance($point1, $point2)
{
    $distance = (3958 * 3.1415926 * sqrt(
            ($point1['lat'] - $point2['lat'])
            * ($point1['lat'] - $point2['lat'])
            + cos($point1['lat'] / 57.29578)
            * cos($point2['lat'] / 57.29578)
            * ($point1['long'] - $point2['long'])
            * ($point1['long'] - $point2['long'])
        ) / 180);

    return $distance;
}

Découvrez la la formule Haversine pour calculer les grandes distances circulaires entre deux points. Vous pouvez trouver quelques exemples supplémentaires ici

.

Formule Haversine:

  • R = rayon de la terre (rayon moyen = 6 371 km)
  • & # 916; lat = lat2 & # 8722; lat1
  • & # 916; long = long2 & # 8722; long1
  • a = sin & # 178; (& lat; 2/9) + cos (lat1) .cos (lat2) .sin & # 178; (& long; 2)
  • c = 2.atan2 (& # 8730; a, & # 8730; (1 & # 8722; a))
  • d = R.c

(Notez que les angles doivent être exprimés en radians pour pouvoir passer aux fonctions trigonométriques).

Dans votre table zip, vous devez saisir les coordonnées (lat, long) des deux points pour lesquels vous souhaitez obtenir la distance.

Vous pouvez ensuite calculer la distance directement dans le code SQL ou avec PHP. Les deux méthodes sont décrites dans cet article:

http : //dev.strategystar.net/2011/10/mysql-php-get-distance-between-two-coordinates-in-miles-kilometers/

Le calcul dans l'exemple est basé sur la formule déjà discutée dans ce fil. Il fournit le rayon de la terre en milles et en kilomètres pour vous permettre d’obtenir la distance entre deux points des deux unités.

Le lien ci-dessus est formidable car la méthode de calcul n'inclut aucun nombre magique, mais uniquement le rayon de la terre!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top