MySQL PHP почтовый индекс сравнения конкретно расстояние - PullRequest
0 голосов
/ 28 февраля 2010

Я пытаюсь выяснить, что было бы наиболее эффективным (в отношении времени загрузки) для сравнения расстояния между одним почтовым индексом (который предоставляет пользователь) и целой кучей других почтовых индексов (приблизительно 200 почтовых индексов). кодов прямо сейчас, но с течением времени его можно увеличить). Мне не нужно ничего точного только в парке мячей.

Я скачал CSV-файл с почтовым индексом для всех штатов США, и у меня есть функция, которая производит расстояние между двумя почтовыми индексами (в радианах, я считаю.) Мне не нужно отображать расстояние, которое мне просто нужно отсортировать 200 почтовых индексов, ближайший из которых является первым из результатов.

Я загрузил CSV-файл в таблицу MySQL. Я думал, что смогу перебрать все 200 почтовых индексов и обновить поле для каждого, содержащего расстояние. Затем, используя ORDER BY, сортируйте их от ближайшего к дальней.

Кто-нибудь знает более эффективный способ сделать это? Этот способ потребует обновления всей БД почтовых индексов при каждом выполнении поискового запроса. Имея только 200 почтовых индексов, это не имеет большого значения сейчас, но я думаю, что это замедлит время загрузки при сборке БД. Спасибо за любой совет, его очень ценят!

1 Ответ

2 голосов
/ 28 февраля 2010

В JavaScript:

var R = 6371; // km
var dLat = (lat2-lat1).toRad();
var dLon = (lon2-lon1).toRad(); 
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) * 
        Math.sin(dLon/2) * Math.sin(dLon/2); 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
var d = R * c;

где d = расстояние между двумя точками

Это формула Haversine .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...