Pregunta

Tomé una base de datos de los códigos postales y sus langitudes / latitudes, etc. de esto Esta página . Tiene los siguientes campos:

  

ZIP, LATITUD, LONGITUD, CIUDAD, ESTADO, CONDADO, ZIP_CLASS

Los datos estaban en un archivo de texto pero los inserté en una tabla MySQL. Mi pregunta ahora es, ¿cómo puedo utilizar los campos anteriores para calcular la distancia entre dos códigos postales que un usuario puede ingresar en el sitio web? Se apreciará el código de trabajo en PHP

¿Fue útil?

Solución

También puede intentar presionar un servicio web para calcular la distancia. Deje que alguien más haga el trabajo pesado.

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

Otros consejos

Esta es la respuesta de Mike con algunas anotaciones para los números mágicos . Me pareció que funcionaba bien para algunos datos de prueba :

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

Se puede hacer solo con matemáticas ...

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

Consulte la fórmula de Haversine para calcular grandes distancias circulares entre dos puntos. Se pueden encontrar algunas muestras más aquí

Fórmula de Haversine:

  • R = radio de la tierra (radio medio = 6,371 km)
  • ?lat = lat2- lat1
  • ?long = long2- long1
  • a = sin² (?lat / 2) + cos (lat1) .cos (lat2) .sin² (?long / 2)
  • c = 2.atan2 (va, v (1 - a))
  • d = R.c

(Tenga en cuenta que los ángulos deben estar en radianes para pasar a las funciones trigonométricas).

En su tabla zip necesita tomar las coordenadas (lat, largo) de los dos puntos para los que desea obtener la distancia.

Puede calcular la distancia directamente en el SQL o con PHP. Ambos métodos se describen en esta publicación:

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

El cálculo en el ejemplo se basa en la fórmula ya discutida en este hilo. Proporciona el radio de la Tierra en millas y kilómetros, por lo que le permitirá obtener la distancia entre dos puntos en ambas unidades.

El enlace de arriba es excelente porque el método de cálculo no incluye ningún número mágico, ¡solo el radio de la tierra!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top