Zip коды и расстояние между ними

Sirius

PHP+MySQL=LOVE
Zip коды и расстояние между ними

Классный дизайн :)

Клиент хочет сабж. Я видел такое где-то на сайте поиска людей, типа введите Ваш код и найти людей на расстоянии N километров (учитывая информацию zip кодов).

Если кто-то знает где найти такую базу - буду ОЧЕНЬ признателен.
 

deek

Новичок
готовой не знаю, но так как тесно связан с электронной картографией, могу подсказать, как составить.

нужно две соствляющие:
1) Общероссийский налоговый классификатор адресов
(соответствие индексов городам)
2) ГИС всей страны, с мелкими населенными пунктами.
(координаты городов)

1) лежит тут: http://kladr.nalogy.ru/
2) варианты: а) купить, б) ломать электронные атласы

думаю, как это объединить, объяснять не надо.

$400, обращайся =)
 

Sirius

PHP+MySQL=LOVE
Мне нужно для всего мира :)

Честно говоря не представляю до конца принцип работы скрипта.

Или просто два зипа и расстояние между ними, но так таблица будет Агромаднейшей.

Или зип и широта, долгота, но тогда осложнится выборка. Интересно - как это сделано у других?
 

deek

Новичок
принцип работы прост.

Вариант 1:

t_cities
----------------
id
title
x
y

t_zipcodes
----------------
zipcode
city_id

Нужно получить широту/долготу каждой точки.
SELECT tc.x, tc.y FROM t_cities AS tc LEFT JOIN t_zipcodes AS tz ON tc.id=tz.city_id WHERE tz.zipcode = "111222" OR tz.zipcode

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

Вариант 2:

t_areas
----------------
id
title
centroid_x
centroid_y

t_zipcodes
----------------
zipcode
area_id

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

еще можно извратиться, и хранить диапазоны индексов для территории. но это уже посложнее, так как индексы "на местности" распределены неравномерно.
 
Сверху