2008-11-30 5 views
7

В настоящее время большинство ресторанов и других предприятий имеют функциональность «Find Locations» на своих сайтах, в которой перечислены ближайшие местоположения для заданного адреса/почтового индекса. Как это реализовано? Согласование zipcode с БД - простой, но простой способ сделать, но может не всегда работать, например, может быть ветка ближе к данному местоположению, но может быть в другом почтовом индексе. Один из подходов, который приходит мне на ум, состоит в том, чтобы преобразовать данный почтовый код/​​адрес в координаты карты и перечислить любые ветви, попадающие в заранее определенный радиус. Я приветствую ваши мысли о том, как это было бы реализовано. Если возможно предоставить более подробные сведения о реализации, такие как любые используемые веб-сервисы и т. Д.,Как работает «Найти самые близкие местоположения»?

ответ

6

много геопространственных структуры помогут вам с этим. В геопространственном мире zip-код - это всего лишь «многоугольник», который является просто областью на карте, которая определяет четкие границы (а не многоугольник в математическом смысле). Например, в пространственном пространстве SQL 2008 вы можете создать новый многоугольник на основе исходного полигона. Таким образом, вы можете динамически создавать многоугольник, который является вашим почтовым индексом, расширенным на определенном расстоянии в каждой точке. Он учитывает фанк-форму почтового индекса. С адресом, Это легко, потому что вы просто создаете многоугольник, который представляет собой круг вокруг одной точки. Затем вы можете делать запросы, которые дают вам все точки в новом многоугольнике, созданные вами любым методом.

Многие из этих сайтов в основном просто делают это. Они дают вам все точки в пятимильном расширенном полигоне, а затем, возможно, 10-мильный расширенный многоугольник и т. Д. И т. Д. На самом деле они не вычисляют расстояние. Большинство вещей в Интернете не являются сложными.

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

0

Как и вы сказали. Преобразуйте адрес/ZIP в 2D-координату мира и сравните его с другими известными местоположениями. Выберите ближайший. :) Я думаю, что некоторые DB (Oracle, MSSQL 2008) даже предлагают некоторые функции, которые могут помочь, но я их никогда не использовал.

0

Я думаю, что это довольно универсально. Они берут адрес или zipcode и превращают его в «координату карты» (отличается в зависимости от реализации, возможно, lat/long), а затем используя «координаты карты» вещей в базе данных, легко вычислить расстояние.

Обратите внимание, что некоторые плохие реализации преобразуют zipcode в координату, представляющую центр области zipcode, что иногда дает плохие результаты.

0

Ваши мысли о том, как это сделать, как я, вероятно, сделаю это. Вы можете геокодировать co-oridinated для zip, а затем выполнять вычисления на основе этого. Я знаю, что SQL Server 2008 имеет некоторые специальные новые функции, которые помогают выполнять запросы на основе этих геокодированных координат lon/lat.

4

Доступна стандартная база данных Zipode/location. Here is one version in Access format, который включает в себя lat/long zipcode, а также другую информацию. Затем вы можете использовать расширения PostgreSQL GIS для выполнения поиска в местах, например.

(при условии, конечно, что вы извлечь доступ к базе данных и вставить в более дружественную базу данных, как PostgreSQL)

1

Во-первых, вы геокодируете адрес, переводя его в (обычно) широту и долготу. Затем вы делаете запрос ближайшего соседа в своей базе данных для интересующих вас объектов.

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

0

Имеются фактические геометрические алгоритмы и/или структуры данных, которые поддерживают более низкие запросы O (...) ближайшего местоположения по данным о точках, линиях и/или регионах.

См this book в качестве примера информации о некоторых из них, как: диаграмм Вороного, quadtrees и т.д.

Однако я думаю, что другие ответы здесь прямо в большинстве случаев, которые вы найдете в программном обеспечении сегодня:

  1. геокод (одна точка) область поиска
  2. ограничивающего запроса коробки, чтобы получить первоначальный стадион
  3. в памяти сортировки/выбора
0

У меня была таблица, в которой я собирал таблицу базы данных каждые 6 месяцев, содержал 3 столбца, я использовал ее для нескольких клиентов в Австралии, содержал около 40 тыс. Строк, очень легкий для запуска запроса. это довольно быстро, если просто хочет получить что-то от земли для клиента

  1. Почтового индекса от
  2. Почтового индекса Для
  3. Расстояния

    ВЫБРАТЬ store_id, Store_AccountName, Store_PostalCode, Store_Address, Store_Suburb, Store_Phone, Store_State, Code_Distance FROM Store, (SELECT Code_To как Code_To, Code_Distance FROM Code WHERE Code_From = @PostalCode UNION ALL SELECT Code_From As Code_To, Code_Distance FROM Code WHERE Код_To = @PostalCode UNION AL L ВЫБРАТЬ @PostalCode Как Code_To, 0 Как Code_Distance) в качестве кода WHERE Store_PostalCode = Code_To И Code_Distance < = @Distance ORDER BY Code_Distance

Там может быть много оптимизации, которые вы могли бы сделать, чтобы ускорить этот запрос !.

 Смежные вопросы

  • Нет связанных вопросов^_^