Фильтрация по почтовому индексу или другим стратегиям получения данных на основе местоположения.

StackOverflow https://stackoverflow.com/questions/12823

  •  08-06-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

Другие советы

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

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

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

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

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

отказ от ответственности:Я работаю на деКарту

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top