2010-02-28 7 views
0

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

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

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

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

ответ

2

В 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 formula.