Pergunta

Peguei um banco de dados dos códigos postais e seus langitudes / latitudes, etc a partir desta Esta página . Tem os seguintes campos:

ZIP, latitude, longitude, cidade, estado, município, ZIP_CLASS

Os dados estava em um arquivo de texto, mas eu inseri-lo em uma tabela MySQL. Minha pergunta agora é: como posso utilizar os campos acima para calcular a distância entre dois zip códigos que um usuário pode entrar no site? código de trabalho em PHP será apreciado

Foi útil?

Solução

Você também pode tentar bater um serviço web para calc a distância. Deixar alguém fazer o trabalho pesado.

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

Outras dicas

Esta é a resposta de Mike com algumas anotações para o números mágicos . Ele parecia funcionar bem para mim para alguns dados de teste :

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

Isso pode ser feito com apenas matemática ...

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

Confira o Haversine fórmula de cálculo grandes distâncias de círculo entre dois pontos. Alguns mais amostras pode ser encontrada href="http://www.movable-type.co.uk/scripts/latlong.html" aqui

fórmula Haversine:

  • R = raio da Terra (raio médio = 6,371 km)
  • ? MTA = lat2- lat1
  • ?long = long2- long1
  • a sin² = (? MTA / 2) + cos (lat1) .cos (Lat2) .sin² (?long / 2)
  • c = 2.atan2 (va, v (1-a))
  • d = R. C

(Note-se que os ângulos precisam estar em radianos para passar para funções trigonométricas).

Em sua mesa zip você precisa pegar as coordenadas (lat, long) para os dois pontos para o qual você deseja obter a distância.

Você pode então calcular o direito distância no SQL ou com PHP. Ambos os métodos são descritos neste post:

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

O cálculo no exemplo baseia-se na fórmula já discutido neste segmento. Ele fornece o raio para a terra em ambas as milhas e quilômetros por isso lhe permitirá obter a distância entre dois pontos em ambas as unidades.

O link acima é grande, porque o método de cálculo não inclui quaisquer números mágicos, apenas o raio da Terra!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top