Почтовый индекс вычисления близости в PHP - PullRequest
2 голосов
/ 18 декабря 2011

Я видел все виды решений типа «поиск магазина» в Интернете для поиска, например, магазинов в пределах заданного радиуса определенного почтового индекса, и у них есть необычные карты, которые отображают ближайшие магазины и т. Д. Многие используют Карты Google или другие базы данных, но многие также полагаются на точные преобразования широты и долготы и т. Д. Но это все излишне для моего проекта.

В моем случае я просто обрабатываю заказы на бэкэнде (используя PHP), и у меня уже есть список всех почтовых индексов всех складов моих поставщиков.

Я просто хочу, чтобы мой клиент предоставил свой почтовый индекс, и за один звонок я хотел бы получить обратно отсортированный список складов, ближайших к моему клиенту. Почтовые индексы достаточно хороши - я не хочу беспокоиться о широте и долготе.

Есть идеи?

1 Ответ

5 голосов
/ 18 декабря 2011

Вам необходимо скачать База данных ZIP-кодов популярных данных .

. С этим вы можете использовать следующее для вычисления расстояния.

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

Выше был украден из Ответ Адама Беллера в Расчет расстояния между почтовыми индексами в PHP .После выполнения этого вычисления вы можете просто отсортировать результаты.

...