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

Поиск страны, которой принадлежит город

Добавлено: 25 окт 2010, 15:43
Arnor
Есть задача, найти область и страну которой принадлежит город.

Используя функцию ST_CONTAINS ищу полигоны с admin_level = 2 (страна) и admin_level = 4 (область) которым принадлежит город. Недавно сгенерировал базу для Европы и Азии (файлы взял на cloudmade). Не получается определить принадлежность российского города стране Российская федерация, также похожие проблемы наблюдаются и в некоторых других странах, а в некоторых все нормально. Возможно есть еще какой-то способ поиска.

Re: Поиск страны, которой принадлежит город

Добавлено: 25 окт 2010, 15:47
KolesovDmitry
1) Покажите, как выглядит ваш запрос.
2) Вы проверяли геометрию на корректность?

Re: Поиск страны, которой принадлежит город

Добавлено: 25 окт 2010, 16:05
Arnor
010100002031BF0D000BF3DCC317F34F41CB0B93CC21A55C41 - way города Москвы.

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

Для области
SELECT * FROM planet_osm_polygon WHERE ST_CONTAINS(way, '010100002031BF0D000BF3DCC317F34F41CB0B93CC21A55C41') and admin_level = '4'

Для страны
SELECT * FROM planet_osm_polygon WHERE ST_CONTAINS(way, '010100002031BF0D000BF3DCC317F34F41CB0B93CC21A55C41') and admin_level = '2'
Геометрии генерировал с помощью утилиты osm2postgis. Скорее всего она должна быть верной.

Re: Поиск страны, которой принадлежит город

Добавлено: 25 окт 2010, 18:38
Denis Rykov
Вы не пробовали проверять геометрии на валидность? Приведите пример запроса, который по вашему предположению возвращает некорректный результат.

Re: Поиск страны, которой принадлежит город

Добавлено: 26 окт 2010, 14:39
Arnor
Обнаружил, что при генерации базы данных с помощью утилиты osm2pgsql у всех геометрий полигонов тип ST_polygon, Что натолкнуло меня на мысль что если у страны тип MUltipolygon, то оно берет первый полигон из мультиполигона. Это подтвердилось тем, что геометрий российской федерации полностью совпадает с геометрией сахалинской области (остров). Утилитой osm2pgsql генерировал со стандартными параметрами в слим режиме. Может кто знает, почему так могло случиться?