Поиск по адресу в PostGis (дамп с osm)

Не знаете, где задать вопрос? Задавайте здесь.
Ответить
Аватара пользователя
t0pep0
Интересующийся
Сообщения: 15
Зарегистрирован: 25 апр 2014, 12:15
Репутация: 3
Откуда: Киров

Поиск по адресу в PostGis (дамп с osm)

Сообщение t0pep0 » 25 апр 2014, 12:48

Добрый день.
Имеется PostGis база, в которую импортирован дамп с osm.
Что бы выбрать все дома в городе я выполняю вот такой запрос:

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

SELECT
   a.*,
   b.name AS state 
FROM planet_osm_point AS a, 
  (SELECT name, way, place from planet_osm_point WHERE place='city' AND name='Москва') AS b 
WHERE a.building='house';
Тут возникает первый вопрос:
Отсутствие поля "addr:full" и вообще почти всех полей addr:*
Спойлер
osm_id | access | addr:housenumber | addr:interpolation | admin_level | aerialway | aeroway | amenity area | barrier | bicycle | bridge | boundary | building | capital | construction | cutting | disused | ele | embankment | foot | highway | historic | horse | junction | landuse | layer | leisure | lock | man_made | military | motorcar | name | natural | oneway | operator | poi | power | power_source | place | railway | ref | religion | route | service | shop | sport | tourism | tunnel | aterway | width | wood | z_order | way| state
Как мне тогда получить полный адрес?
Второй вопрос, как мне получить гео координаты?
Ну и третий вопрос: как искать по адресу? (текстовому его представлению)

Заранее спасибо
____________________
Ну или как мне просто получить адрес

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

=SELECT * FROM planet_osm_polygon WHERE building='house' LIMIT 1;

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

osm_id   | access | addr:housenumber | addr:interpolation | admin_level | aerialway | aeroway | amenity | area | barrier | bicycle | bridge | boundary | building | construction | cutting | disused | embankment | foot | highway | historic | horse | junction | landuse | layer | leisure | lock | man_made | military | motorcar | name | natural | oneway | operator | power | power_source | place | railway | ref | religion | route | service | shop | sport | tourism | tracktype | tunnel | waterway | width | wood | z_order | way_area |                                                                                                way                                                                                                 
-----------+--------+------------------+--------------------+-------------+-----------+---------+---------+------+---------+---------+--------+----------+----------+--------------+---------+---------+------------+------+---------+----------+-------+----------+---------+-------+---------+------+----------+----------+----------+------+---------+--------+----------+-------+--------------+-------+---------+-----+----------+-------+---------+------+-------+---------+-----------+--------+----------+-------+------+---------+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 233359452 |        |                  |                    |             |           |         |         |      |         |         |        |          | house    |              |         |         |            |      |         |          |       |          |         |       |         |      |          |          |          |      |         |        |          |       |              |       |         |     |          |       |         |      |       |         |           |        |          |       |      |       0 |  260.372 | 010300002031BF0D00010000000500000048E17AF4E1E45341295C8F82EC6A58410AD7A340E2E45341CDCCCC9CF06A58415C8FC235E6E453417B14AE17F06A5841295C8F32E6E453418FC2F548EC6A584148E17AF4E1E45341295C8F82EC6A5841
каркнул ворон nevermore

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Re: Поиск по адресу в PostGis (дамп с osm)

Сообщение KolesovDmitry » 25 апр 2014, 13:53

t0pep0 писал(а): Тут возникает первый вопрос:
Отсутствие поля "addr:full" и вообще почти всех полей addr:*
Как мне тогда получить полный адрес?
Второй вопрос, как мне получить гео координаты?
Ну и третий вопрос: как искать по адресу? (текстовому его представлению)
1) Да, есть такая засада. Поэтому на полный адрес можно выйти через пространственные запросы: посмотреть, в какие полигоны из таблицы административного деления попадет заданный дом и собрать все в одну кучу. Этот будет выглядеть как-то так:

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

select array_to_string(array_agg(admin.name), ' ') from
    (
    SELECT adm.name FROM boundary_polygon as adm, building_polygon as bp where bp.gid=1 and ST_Intersects(adm.geom, bp.geom) ORDER by adm.admin_lvl
    ) AS admin;
Этот запрос обрабатывает только административное вхождение. Если вам нужно найти ближайшую (приблизительно) улицу, то нужно запрашивать как-то так:

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

select street.name, street.gid from highway_line as street, building_polygon as house WHERE (not street.name is null) AND ST_DWithin(street.geom, house.geom, 0.01) AND  house.gid = 1;
2) С этим проще всего -- используйте функции ST_CENTROID, ST_X, ST_Y.

3) С этой частью наиболее сложно. Все будет зависеть от точности, которая вас устроит. Если вам достаточно попасть в город (а то и область), то одно дело, а если вам нужна точность порядка метров, то наверное, проще поискать готовые решения. Смотрите, например, Nominatim

Аватара пользователя
t0pep0
Интересующийся
Сообщения: 15
Зарегистрирован: 25 апр 2014, 12:15
Репутация: 3
Откуда: Киров

Re: Поиск по адресу в PostGis (дамп с osm)

Сообщение t0pep0 » 25 апр 2014, 14:03

Спасибо за ответ, однако, после импорта osm файла утилитой osm2pgsql получаются вот такие таблицы:

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

Select table_name FROM information_schema.tables WHERE table_schema = 'public';
     table_name     
--------------------
 spatial_ref_sys
 geometry_columns
 geography_columns
 planet_osm_line
 planet_osm_polygon
 planet_osm_roads
 planet_osm_point
Т.е. я, честно говоря, даже не вижу как адаптировать Ваши примеры, хотя общая суть ясна. Еще раз спасибо.
каркнул ворон nevermore

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Re: Поиск по адресу в PostGis (дамп с osm)

Сообщение KolesovDmitry » 26 апр 2014, 08:51

t0pep0 писал(а): после импорта osm файла утилитой osm2pgsql получаются вот такие таблицы:
<...>
Т.е. я, честно говоря, даже не вижу как адаптировать Ваши примеры, хотя общая суть ясна. Еще раз спасибо.
Понятно, дело в том, что я воспользовался для примера уже готовыми shp-файлами, и все названия таблиц были взяты оттуда.

Аватара пользователя
t0pep0
Интересующийся
Сообщения: 15
Зарегистрирован: 25 апр 2014, 12:15
Репутация: 3
Откуда: Киров

Re: Поиск по адресу в PostGis (дамп с osm)

Сообщение t0pep0 » 26 апр 2014, 11:32

Дмитрий, спасибо за помощь, однако в итоге моя задача была решена несколько по другому. Когда мое решение будет доделано - оно появиться на github.com/t0pep0 да и здесь отпишусь.
каркнул ворон nevermore

Ответить

Вернуться в «Я новичок!»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость