Ну а вдруг он хочет сделать, допустим свой конвертор osm2mp (с блекджеком и шлюхами с поддержкой мультиязычных названий в адресах и автоматическим приписыванием addr:district и addr:suburb к посёлкам и улицам).
Caused by: org.postgresql.util.PSQLException: ОШИБКА: INSERT или UPDATE в таблице "current_way_nodes" нарушает ограничение внешнего ключа "current_way_nodes_node_id_fkey"
Подробности: Ключ (node_id)=(168711) отсутствует в таблице "current_nodes".
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at org.openstreetmap.osmosis.xml.v0_6.XmlReader.run(XmlReader.java:111)
at java.lang.Thread.run(Unknown Source)
Как быть в этом случае? Очень уж не хочется планету всю импортировать.
Нет, это правильный вопрос. Если, конечно, хотеть помочь по настоящему.
Если есть гараздо более лёгкие пути решить похожие задачи, то вполне логично узнать не подойдёт ли один из них. Может человек просто не знает про эти пути.
Проще всего вначале импортировать всё в базу PostgreSQL + PostGIS средствами osm2pgsql, а потом парой несложных и быстрых запросов через фенкции PostGIS вытащить данные с нужными объектами, описаниями и координатами в плоскую таблицу, которую уже впоследствии выгрузить и использовать в mySQL. Вливать всё в mysql не имеет смысла, поскольку хранить и обрабатывать в нём геопростанственные данные в виде геометрий объектов крайне не удобно и не эффективно.
Да, нужны все данные. Делаю сайт по недвижимости. Необходима возможность выбора здания (город → улица → дом).
Всех адресов я естественно не знаю. Решил вытащить из osm.
Можно было конечно и в PostgreSQL выгрузить данные. Но с MySQL знаком лучше. В случае с PostgreSQL, то нужно потратить время на ознакомление, установку, выбор клиента базы данных и т.д.
Зачем? Если можно выгрузить в mysql.
“Вливать всё в mysql не имеет смысла, поскольку хранить и обрабатывать в нём геопростанственные данные в виде геометрий объектов крайне не удобно и не эффективно.” - это нужно сделать одни раз. Нужные данные будут храниться в другом формате/таблицах.
Потом планирую добавлять нужные адреса руками, через сайт. Когда пользователи пожалуются, что не могут найти адрес на сайте.
Постоянно обновлять данные в базе по-моему лишняя работа.
Если я правильно понимаю эту строчку в вики “MySql does not have geographic extensions. Requires database server to be installed, with associated administrative overhead”, только координаты нодов там?
Если это нужно сделать один раз, тем более проще это один раз сделать в PostgreSQL/PostGIS, чем пытаться заставить выжать из mysql то, чего он в принципе не может.
Вообще-то ничего особого изучать не нужно. Базу PostGIS можно взять готовую на gis-lab. Использовать psql в любом скриптовом языке не сложнее, чем mysql. Могу даже пример подбросить: выгружает список всех адресов внутри заданой границы (в примере - Мурманск) в csv: http://osm.sbin.ru/tmp/pgaddr.zip