Domanda

Ho preso un database dei codici postali e delle loro lingue / latitudini, ecc. da questo Questa pagina . Ha i seguenti campi:

  

ZIP, LATITUDE, LONGITUDE, CITY, STATE, COUNTY, ZIP_CLASS

I dati erano in un file di testo ma li ho inseriti in una tabella MySQL. La mia domanda ora è: come posso utilizzare i campi sopra per calcolare la distanza tra due codici postali che un utente può inserire sul sito Web? Il codice di lavoro in PHP sarà apprezzato

È stato utile?

Soluzione

Puoi anche provare a colpire un servizio web per calcolare la distanza. Lascia che qualcun altro faccia il lavoro pesante.

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

Altri suggerimenti

Questa è la risposta di Mike con alcune annotazioni per i numeri magici . Sembrava funzionare bene per me per alcuni dati di 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.
}

Può essere fatto solo con la matematica ...

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;
}

Dai un'occhiata alla formula Haversine per calcolare grandi distanze circolari tra due punti. Alcuni altri esempi sono disponibili qui

Formula Haversine:

  • R = raggio della terra (raggio medio = 6.371 km)
  • & # 916; lat = lat2 & # 8722; LAT1
  • & # 916; long = long2 & # 8722; long1
  • a = sin & # 178; (& # 916; lat / 2) + cos (lat1) .cos (lat2) .sin & # 178; (& # 916; long / 2)
  • c = 2.atan2 (& # 8730; a, & # 8730; (1 & # 8722; a))
  • d = R.c

(Nota che gli angoli devono essere in radianti per passare alle funzioni di attivazione).

Nella tua tabella zip devi prendere le coordinate (lat, long) per i due punti per i quali vuoi ottenere la distanza.

È quindi possibile calcolare la distanza direttamente in SQL o con PHP. Entrambi i metodi sono descritti in questo post:

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

Il calcolo nell'esempio si basa sulla formula già discussa in questo thread. Fornisce il raggio per la terra in miglia e chilometri, quindi ti permetterà di ottenere la distanza tra due punti in entrambe le unità.

Il link sopra è fantastico perché il metodo di calcolo non include alcun numero magico, ma solo il raggio della terra!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top