Всем привет!
Занимаюсь разработкой картографического сервиса.
Перед сервисом стоит ряд задач:
- показывать на карте Страны/Области/Города/Районы
- в виде вложенного дерева Страны/Области/Города/Районы
- получать адрес в виде списка из тегов страна+область+город+район по точке, имея lon, lat и обратно
С помощью osm2pgsql сконвертировал pbf файлы в postgis таблицы. Успешно решаю поставленные задачи с помощью мультиполигонов. Стала задача уточнить схему адреса с помощью улиц: Страны/Области/Города/Районы/Улица/Площади/Переулки, etc.
Начались проблемы:
- дорога (road) - это набор ломаных линий, не (мульти)полигон
- ближайшие к дороге точки (как и полигоны зданий) могут иметь tags->‘addr:street’ отличный от имени дороги
- часть зданий обозначены точками, а часть полигонами
- не все здания вдоль дороги имеют то же название улицы, что и улица дороги
- разброс зданий с одним и тем же названием улицы по разные стороны от дороги может быть существенным, поэтому нельзя просто построить мульти-полигон, базируясь на мульти-линии дороги, расширив линию с помощью ST_Buffer
- одно и то же здание может принадлежать разным улицам и быть ближе только к одной из соседних/пересекающихся/параллельных дорог либо на одинаковом расстоянии от них
В целом ясно, что улица и дорога - не одно и то же. Сервис должен работать в масштабах мировой карты. Традиции пометки зданий полигонами или точками отличается от страны к стране.