Страница 1 из 1

Поиск объекта по введённому адресу

Добавлено: 16 окт 2009, 19:39
gisnoob
Доброго время суток ,
у меня есть таблица PostGis импортированная из shp файла , c улицами домами городами ...
Вопрос следующего плана: надо организовать поиск объекта по введённому адресу. Меня интеесует алгоритм нахождения этого объекта , ничего конкретного в инете не нашёл (вероятно не там искал).
Я предполагаю что алгоритм будет следующий:
Допустим если ввели улицу + дом , то надо искать наименьшее расстояние м-у объектами с названием этой улицы и номера дома , и город будет найден тоже из условия ближайшего рассположеия к улице.

Натолкните на правильный путь, заранее спасибо

Re: Поиск объекта по введённому адресу

Добавлено: 24 окт 2009, 16:14
Magicus
У меня тоже такая проблема пока не знаю, как ее решить. А по поводу предложенному вами алгоритма я тоже думал но там есть небольшая проблема, если человек введет название улицы и номер дома который не существует на этой улице то он может просто найти дом на соседней улице.

Re: Поиск объекта по введённому адресу

Добавлено: 24 окт 2009, 17:50
Denis Rykov
Magicus писал(а):У меня тоже такая проблема пока не знаю, как ее решить. А по поводу предложенному вами алгоритма я тоже думал но там есть небольшая проблема, если человек введет название улицы и номер дома который не существует на этой улице то он может просто найти дом на соседней улице.
Если для каждого геометрического объекта есть поле "Улица" и "Номер дома", то введя необходимые данные и сформировав нужный SQL-запрос, вы получите множество объектов с указанными параметрами (возможно, пустое). Если же в базе дома представлены только своими номерами, а улицы названиями, тогда можно выполнить поиск всех домов, пересекающихся с буферной зоной выбранной улицы (какой именно буфер выбрать, решать вам).

Код: Выделить всё

SELECT * FROM Street, Houses WHERE Street.name='Пушкина' and Houses.number=55 and ST_Intersects(ST_Buffer(Street.geom,10),Houses.geom)
Если же вы хотите искать, используя условие минимальности расстояния (замечу, что в таком случае часть информации может потеряться, так как дома с одинаковыми улицами и номерами могут присутствовать в разных городах), то запрос будет выглядеть как-то так:

Код: Выделить всё

SELECT MIN(ST_Distance(Houses.geom,Street.geom)) AS minimum INTO TEMPORARY temptable FROM Houses, Street;
SELECT * FROM Street, Houses,temptable WHERE Street.name='Пушкина' and Houses.number=55 and ST_Distance(Street.geom,Houses.geom)=minimum

Re: Поиск объекта по введённому адресу

Добавлено: 21 апр 2010, 09:06
oxch
Я бы посоветовал обратить внимание на возможности полнотекстового поиска в базе данных. С версии 8.3 эти функции интегрированы в PostgreSQL.

На сайте русской документации в статье http://postgresql.ru.net/docs/fullsearch.html описано как можно организовать этот поиск.

А дальше по результату поиска можно получить объект на карте и, соответственно, все его атрибуты.

По крайней мере, именно так я реализовывал поиск для себя. Для особо пытливых можно порекомендовать сделать поиск с учетом корреляции слов, чтобы искать даже в случае ошибки в строке поиска, ибо полнотекстовый поиск ищет только полное совпадение слов.