Фильтр по почтовому индексу или другим стратегиям поиска данных на основе местоположения - PullRequest
4 голосов
/ 16 августа 2008

Мой маленький сайт должен объединять список элементов из таблицы, используя местоположение активного пользователя в качестве фильтра. Подумайте Craigslist , где вы ищете «dvd», но результаты получены не во всех БД, они отфильтрованы по выбранному вами местоположению. Мой вопрос имеет 2 уровня:

  1. Должен ли я пойти на a-la-craigslist и попросить пользователей использовать местоположение на уровне города? Моя проблема с этим заключается в том, что вам нужно составить то, что мне кажется жестко закодированным, вручную составленным списком мест.
  2. я должен пойти а-ля-zipCode. Идея состоит в том, чтобы просто попросить пользователя ввести свой почтовый индекс, а затем объединить все элементы, которые находятся на том же или на определенном расстоянии от его почтового индекса.

Кажется, я предпочитаю способ с почтовым индексом, так как это кажется более элегантным решением, но как на самом деле можно создать БД из всех почтовых индексов и реализовать функцию, которая с учетом почтового индекса 12345, получает все почтовые индексы на расстоянии 1 мили

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

Ответы [ 5 ]

5 голосов
/ 16 августа 2008

Получение базы данных с почтовым индексом не проблема. Вы можете попробовать это бесплатно: http://zips.sourceforge.net/

Хотя я не знаю, насколько это актуально, или вы можете использовать одного из многих провайдеров. У нас есть годовая подписка на ZipCodeDownload.com , и, возможно, за 100 долларов мы получаем ежемесячные обновления с последними данными почтового индекса в комплекте с широтой / долготой центроида почтового индекса.

Что касается запросов ко всем почтовым индексам в пределах определенного радиуса, вам понадобится пространственная библиотека некоторого вида. Если у вас есть таблица zip с латами / лонгами, вам понадобится механизм, ориентированный на базу данных. SQL Server 2008 имеет встроенную возможность, и есть библиотеки с открытым исходным кодом и коммерческие библиотеки , которые добавят такие возможности в SQL Server 2005. База данных с открытым исходным кодом PostgreSQL имеет проект PostGIS это добавляет эту возможность в эту базу данных. Это здесь: http://postgis.refractions.net/

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

Если вы хотите пойти другим путем, вы можете использовать пространственные инструменты с библиотекой отображений. Здесь также есть опции с открытым исходным кодом, такие как SharpMap и многие другие ( Google может помочь ), которые могут использовать бесплатные карты Тигра для Соединенных Штатов. в качестве источника данных. Однако этот маршрут несколько сложнее и, возможно, менее эффективен, если вам нужен только поиск по радиусу.

Наконец, вы можете заглянуть в веб-сервис. Это, как вы говорите, является общей потребностью, и я полагаю, что существует любое количество веб-сервисов, на которые вы можете подписаться, которые могут предоставить все почтовые индексы в заданном радиусе из предоставленного почтового индекса. Быстрый поиск Google обнаружил это: http://www.zip -codes.com / свободный почтовый код-tools.asp # радиус Но есть МНОГИХ ресурсов для поиска по этой теме.

0 голосов
/ 19 ноября 2008

Разве не было бы более эффективно просто определить, какие города находятся в радиусе 1 мили, и сохранить эту информацию в таблице? Тогда вам не нужно все время выполнять вычисления в базе данных.

0 голосов
/ 22 сентября 2008

Вы можете использовать PostGIS. Кроме того, я использовал библиотеки отображения deCarta. У них есть технология, которая позволяет геокейбить любой произвольный тип данных. Затем вы можете запросить их пространственно.

отказ от ответственности: я работаю на deCarta

0 голосов
/ 16 сентября 2008

Просто чтобы быть техническим ... PostGIS - это не проект сообщества Postgres ... это отдельный проект, который построен на основе Postgres. Если вам нужна помощь или поддержка PostGIS, вам нужно перейти в сообщество вместо Postgres.

0 голосов
/ 16 августа 2008

как же можно [...] реализовать функцию, которая дает почтовый индекс 12345, получает все почтовые индексы на расстоянии 1 миля?

Вот пример того, как это сделать:

http://www.codeproject.com/KB/cs/zipcodeutil.aspx

...