Подтвердить что ты не робот

Расчет расстояния между почтовыми индексами в PHP

Я схватил базу данных почтовых индексов и их языков/широт и т.д. из этого Эта страница. Он имеет следующие поля:

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

Данные были в текстовом файле, но я вставил его в таблицу MySQL. Мой вопрос в том, как я могу использовать поля выше, чтобы рассчитать расстояние между двумя почтовыми индексами, которые пользователь может ввести на веб-сайт? Рабочий код в PHP будет оценен

4b9b3361

Ответ 1

Вы также можете попробовать попасть в веб-службу, чтобы вычислить расстояние. Пусть кто-то еще сделает тяжелый подъем.

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

Ответ 2

Это майк-ответ с некоторыми аннотациями для магических чисел. Мне показалось, что для меня несколько тестовых данных:

function calc_distance($point1, $point2)
{
    $radius      = 3958;      // Earth 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.
}

Ответ 3

Это можно сделать только с помощью математики...

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

Ответ 4

Ознакомьтесь с формулой здесь

Формула Гаверсина:

  • R = радиус земли (средний радиус = 6 371 км)
  • Δlat = lat2- lat1
  • Δlong = long2- long1
  • a = sin² (Δlat/2) + cos (lat1).cos(lat2).sin² (Δlong/2)
  • c = 2.atan2 (√a, √ (1-a))
  • d = R.c

(Обратите внимание, что углы должны быть в радианах для перехода к триггерным функциям).

Ответ 5

В вашей zip-таблице вам нужно захватить координаты (lat, long) для двух точек, для которых вы хотите получить расстояние.

Вы можете либо вычислить расстояние прямо в SQL, либо с помощью PHP. Оба метода описаны в этом сообщении:

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

Расчет в примере основан на формуле, уже обсуждавшейся в этом потоке. Он обеспечивает радиус земли в километрах и километрах, поэтому он позволит вам получить расстояние между двумя точками в обоих устройствах.

Ссылка выше отлично, потому что метод вычисления не включает никаких магических чисел, просто радиус земли!