You are not logged in.
- Topics: Active | Unanswered
Announcement
Please create new topics on the new site at community.openstreetmap.org. We expect the migration of data will take a few weeks, you can follow its progress here.***
#1 2016-04-03 11:47:34
- Map Nrg
- Member
- Registered: 2016-04-03
- Posts: 17
perfect_OSM - простенький парсер для OSM XML
Добрый день!
Чтобы получше разобраться с моделью данных OSM написал простенький парсер на Python.
В результате нашел некоторые случаи, которые, судя по Вики, являются ошибками.
Исходный код:
https://github.com/n0s0r0g/perfect_OSM
Результат по регионам РФ:
http://justworks.ru/perfect_osm/2016_04_02.zip
Структура архива:
{дата}/{регион}/{категории}
Ошибки:
errors/useless_node/ - точка без тегов, не входящая в линию или отношение.
errors/useless_way/ - линия без тегов, не входящая в отношение.
errors/highway/crossing/not_on_road - точка highway=crossing не включена в автомобильную дорогу.
Бывает, что highway=crossing включена в railway. Как я понимаю, для этого случая правильный тег: railway=crossing?
errors/traffic_calming/not_on_road - точка traffic_calming=* не включена в автомобильную дорогу.
Замечания:
warnings/highway/trunk_link - highway=trunk_link без указания oneway=*
TODO (что полезного можно улучшить/дополнить):
todo/highway/trunk/no_maxspeed - для highway=trunk не задан тег maxspeed=*
todo/highway/trunk/no_lanes - для highway=trunk не задан тег lanes=*
todo/highway/trunk/no_lit - для highway=trunk не задан тег lit=*
todo/highway/track/no_surface - для highway=track не задан тег surface=*
todo/shop/no_opening_hours - для shop=* не задан тег opening_hours=*
Возможно, для кого-то окажется полезным.
Offline
#2 2016-04-04 10:26:41
- Map Nrg
- Member
- Registered: 2016-04-03
- Posts: 17
Re: perfect_OSM - простенький парсер для OSM XML
Добавил проверки:
errors/website/not_available - сайт, указанный в тегах website, contact:website, url, source_ref, недоступен.
Пример для Москвы: http://justworks.ru/perfect_osm/2016_04 … /items.txt
warnings/highway/undocumented_surface - для highway=* в теге surface=* указано значение, не задокументированное на странице http://wiki.openstreetmap.org/wiki/RU:Key:surface.
Пример для Москвы: http://justworks.ru/perfect_osm/2016_04 … e/ways.txt
todo/highway/complex_surface - для highway=* в теге surface=* указано значение, состоящее из нескольких задокументированных значений, разделенных через ";".
Пример для Москвы: http://justworks.ru/perfect_osm/2016_04 … e/ways.txt
Данные по регионам:
http://justworks.ru/perfect_osm/2016_04_03_website.zip (добавлен Крым и Севастополь).
Offline
#3 2016-04-04 19:48:07
- OverQuantum
- Member

- From: Zelenograd
- Registered: 2009-06-17
- Posts: 1,582
- Website
Re: perfect_OSM - простенький парсер для OSM XML
Интересная вещь.
Но использовать сложно, т.к. просто перечень объектов в OSM.
Нельзя ли как-нибудь координаты выгружать тоже? Для node - её, для way - "центра масс" или просто первой точки.
Это же OpenStreetMap. Он больше внутри, чем снаружи.
Offline
#4 2016-04-04 20:05:27
- d1g
- Member
- From: not using forum
- Registered: 2010-01-23
- Posts: 2,380
- Website
Re: perfect_OSM - простенький парсер для OSM XML
Молодец, но лучше напиши что-нибудь типа каталога тегов поверх overpass:
http://wiki.openstreetmap.org/wiki/Overpass_API
http://wiki.openstreetmap.org/wiki/Over … uage_Guide
http://wiki.openstreetmap.org/wiki/Over … verpass_QL
Грубо говоря, ты завелосипедил 1/30 функций overpass-а, я же тебе предлагаю для него фронт-энд написать.
http://wiki.openstreetmap.org/wiki/Overpass_turbo хорош, но для него нужно запросы писать самому, напиши веб-сайтик который сам правильные запросы и ссылки создаёт к Overpass.
Что-то типа http://wiki.openstreetmap.org/wiki/Taginfo, но поверх overpass
Offline
#5 2016-04-04 22:04:45
- Map Nrg
- Member
- Registered: 2016-04-03
- Posts: 17
Re: perfect_OSM - простенький парсер для OSM XML
OverQuantum
Да уж, результат получился не особенно наглядный. Поэкспериментирую, как можно показать ошибки маркерами поверх карты. Чем хороши ссылки на http://osm.org - для объекта сразу показываются теги; каким линиям точка принадлежит; каким отношениям принадлежит линия.
d1g
Главная цель этого скрипта - самому разобраться с моделью данных OSM, пощупать реальные данные (лучший способ разобраться - начать писать валидатор). Описывать логику на Python лично мне гораздо приятнее и полезнее, чем на Overpass (потому что я его не знаю). В общем, это стандартный путь - начать пилить свой велосипед, встать на все грабли, а потом перейти к стандартному решению (Overpass). Сайт/веб-сервис я делать не планирую (не интересно).
Offline
#6 2016-04-05 10:06:24
- Map Nrg
- Member
- Registered: 2016-04-03
- Posts: 17
Re: perfect_OSM - простенький парсер для OSM XML
OverQuantum
Попробовал 3 способа:
1. html файл с картой в Leaflet, ошибки отмечены как Marker; при клике выводится Popup("Открыть на OSM.org"; "Открыть в JOSM").
Недостатки:
а) При >1000 объектов браузер не открывается.
б) Для редактирования нужен переход в редактор.
2. Файл заметок JOSM. В целом, все хорошо.
Недостатки:
а) Кто-то по ошибке может нажать "Загрузить на сервер".
б) Нельзя нарисовать линии.
3. GPX файл:
- точки отмечены как waypoint с описанием
- линии отмечены: начало, конец - waypoint с описанием; точки посередине - track.
Мне этот способ показался самым удобным.
Примеры (GPX, Москва):
Бесполезные точки:
http://justworks.ru/perfect_osm/2016_04 … _nodes.gpx
Бесполезные линии:
http://justworks.ru/perfect_osm/2016_04 … s_ways.gpx
GPX файлы открываются в JOSM'е.
Offline
#7 2016-04-05 10:21:29
- RiG's
- Member
- Registered: 2015-08-03
- Posts: 101
Re: perfect_OSM - простенький парсер для OSM XML
Сделай первый способ, но чтобы загружались только объекты в видимом окне карты (BBOX)
Offline
#8 2016-04-05 10:24:20
- Zverik
- Moderator

- From: Tallinn
- Registered: 2010-10-14
- Posts: 5,699
- Website
Re: perfect_OSM - простенький парсер для OSM XML
https://github.com/Leaflet/Leaflet.markercluster — работает с миллионами точек.
Offline
#9 2016-04-05 12:13:12
- Map Nrg
- Member
- Registered: 2016-04-03
- Posts: 17
Re: perfect_OSM - простенький парсер для OSM XML
RiG's,
Примерно вот в таком виде подойдет?
Москва, бесполезные точки, пустые линии:
http://justworks.ru/perfect_osm/2016_04 … rkers.html
Zverik,
Спасибо, полезная штуковина.
Offline
#10 2016-04-05 13:41:13
- RiG's
- Member
- Registered: 2015-08-03
- Posts: 101
Re: perfect_OSM - простенький парсер для OSM XML
RiG's,
Примерно вот в таком виде подойдет?Москва, бесполезные точки, пустые линии:
http://justworks.ru/perfect_osm/2016_04 … rkers.htmlZverik,
Спасибо, полезная штуковина.
Подойдет, только загрузку в JOSM поправьте, посмотрите как у других валидаторов это реализовано
Offline
#11 2016-04-05 20:10:41
- OverQuantum
- Member

- From: Zelenograd
- Registered: 2009-06-17
- Posts: 1,582
- Website
Re: perfect_OSM - простенький парсер для OSM XML
OverQuantum
Чем хороши ссылки на http://osm.org - для объекта сразу показываются теги; каким линиям точка принадлежит; каким отношениям принадлежит линия.Попробовал 3 способа
Ну у меня интерес вида "увидеть все errors в Зеленограде" (или в другой зоне, существенно меньше целой области) и по возможности в JOSM-е.
Поэтому GPX или загружаемый в JOSM файл мне предпочтительнее.
Но и Leaflet подойдёт.
UPD: Немного поисправлял по GPX-у.
Если GPX, то надо 1 маркер на линию, а то кол-во надписей сбивает с толку - для замкнутых видно 1 надпись, а для незамкнутой - 2.
Last edited by OverQuantum (2016-04-05 20:48:14)
Это же OpenStreetMap. Он больше внутри, чем снаружи.
Offline
#12 2016-04-29 07:07:23
- Map Nrg
- Member
- Registered: 2016-04-03
- Posts: 17
Re: perfect_OSM - простенький парсер для OSM XML
Сделал очередной проход по всем регионам.
Бесполезные точки:
http://justworks.ru/perfect_osm/2016042 … ss/map.htm (37319 шт.)
Точки без тегов, не входящие в линии и отношения.
Бесполезные линии:
http://justworks.ru/perfect_osm/2016042 … ss/map.htm (18426 шт.)
Линии без тегов, не входящие в отношения.
Очень часто отображают реальную геометрию, но без тегов бесполезны (пример).
Дорожный объект не на дороге
http://justworks.ru/perfect_osm/2016042 … ay/map.htm
Указывает, когда highway=crossing, highway=traffic_signals, traffic_calming не находится на highway.
Для highway=crossing есть много случаев пересечения с railway=*, Wiki для этого предлагает railway=crossing.
Возможно ложное срабатывание, когда объект попадает в выгрузку, а дорога нет!
Некорректный тип объекта:
http://justworks.ru/perfect_osm/2016042 … pe/map.htm (13336 шт.)
Попытка сопоставить тип объекта для тега (или пары тег=значение), указанного в Wiki с реальными данными.
"Идеальные трассы":
http://justworks.ru/perfect_osm/2016042 … nk/map.htm
Указывает, где на highway=trunk не установлены теги lit, lanes и maxspeed, а для trunk_link - тег oneway.
Некорректный формат телефона
http://justworks.ru/perfect_osm/2016042 … at/map.htm
Формат телефона не соответствует указанному в Wiki (не знаю, насколько это важно на самом деле)
Первичные данные по всем регионам: http://justworks.ru/perfect_osm/20160428/data.zip (270 мб)
CSV файл с замечаниями по всем регионам: http://justworks.ru/perfect_osm/2016042 … es.csv.zip (19 мб)
Last edited by Map Nrg (2016-04-29 08:41:01)
Offline
#13 2016-04-29 07:17:20
- Map Nrg
- Member
- Registered: 2016-04-03
- Posts: 17
Re: perfect_OSM - простенький парсер для OSM XML
Отдельно сделал выгрузку по Зеленограду командами:
wget http://overpass-api.de/api/map?bbox=36.9724,55.9134,37.3837,56.0881 -O map.osm
python3 perfect_OSM.py map.osm issues
python3 csv2map.py issues/issues.csv mapАрхив: http://justworks.ru/perfect_osm/20160428/ZEL/data.zip
Карта: http://justworks.ru/perfect_osm/2016042 … ap/map.htm
При выгрузке область желательно выбрать больше, чем интересующая область - тогда все объекты попадут в .osm файл.
Offline
#14 2016-04-29 21:24:59
- OverQuantum
- Member

- From: Zelenograd
- Registered: 2009-06-17
- Posts: 1,582
- Website
Re: perfect_OSM - простенький парсер для OSM XML
Отдельно сделал выгрузку по Зеленограду командами
Супер! Спасибо.
Телефоны поисправлял и ещё немного.
Вижу несколько странных вещей
1) На building=apartments - выдаёт "Здание без адреса", хотя вроде бы полный комплект
Например: https://www.openstreetmap.org/way/36943476
Без addr:street, но building=yes такого нет
2) Что тут не так?
https://www.openstreetmap.org/way/165051502
"Некорректный тип элемента"
amenity=bicycle_parking на линии вроде бы допустим по вики
https://www.openstreetmap.org/node/1055522365
"Некорректный тип элемента"
landuse=industrial на точке вроде бы допустим по вики
Это же OpenStreetMap. Он больше внутри, чем снаружи.
Offline
#15 2016-04-29 21:51:46
- j-wills
- Member

- From: Russia, Moscow
- Registered: 2010-06-01
- Posts: 860
- Website
Re: perfect_OSM - простенький парсер для OSM XML
1) На building=apartments - выдаёт "Здание без адреса", хотя вроде бы полный комплект
Например: https://www.openstreetmap.org/way/36943476
Без addr:street, но building=yes такого нет
addr:place ?
Offline
#16 2016-04-29 21:59:33
- OverQuantum
- Member

- From: Zelenograd
- Registered: 2009-06-17
- Posts: 1,582
- Website
Re: perfect_OSM - простенький парсер для OSM XML
addr:place ?
Что "addr:place"? См. зеленоградскую схему адресации.
Вот на это здание нет сообщения "Здание без адреса": https://www.openstreetmap.org/way/36943479
Это же OpenStreetMap. Он больше внутри, чем снаружи.
Offline
#17 2016-04-29 22:04:50
- j-wills
- Member

- From: Russia, Moscow
- Registered: 2010-06-01
- Posts: 860
- Website
Re: perfect_OSM - простенький парсер для OSM XML
j-wills wrote:addr:place ?
Что "addr:place"? См. зеленоградскую схему адресации.
Вот на это здание нет сообщения "Здание без адреса": https://www.openstreetmap.org/way/36943479
Значит на apartments так реагирует
Last edited by j-wills (2016-04-29 22:07:48)
Offline
#18 2016-04-30 05:16:37
- Map Nrg
- Member
- Registered: 2016-04-03
- Posts: 17
Re: perfect_OSM - простенький парсер для OSM XML
1) На building=apartments - выдаёт "Здание без адреса", хотя вроде бы полный комплект
Например: https://www.openstreetmap.org/way/36943476
Без addr:street, но building=yes такого нет
Это баг. Сработало правило, что на building={apartments, residential} должны быть теги addr:housenumber, addr:street. Не учел зеленоградскую схему адресации. Упростил правило, теперь для building={apartments, residential} будет требовать только addr:housenumber. Исправил.
Offline
#19 2016-04-30 05:25:00
- Kartograf_udm
- Member
- Registered: 2014-04-10
- Posts: 107
Re: perfect_OSM - простенький парсер для OSM XML
Не учел зеленоградскую схему адресации.
Тут дело даже не в зеленоградской схеме, а в том, что во многих небольших населённых пунктах бывает так, что улиц вообще нет, а нумерация домов - сквозная, по населённому пункту.
Offline
#20 2016-04-30 05:26:27
- Map Nrg
- Member
- Registered: 2016-04-03
- Posts: 17
Re: perfect_OSM - простенький парсер для OSM XML
https://www.openstreetmap.org/way/165051502
"Некорректный тип элемента"
amenity=bicycle_parking на линии вроде бы допустим по вики
http://wiki.openstreetmap.org/wiki/RU:Key:amenity
1. Для ключа amenity разрешенные типы: точка, полигон, отношение. Линии нет.
2. Для amenity=bicycle_parking разрешенные типы: точка, полигон. Линии нет.
http://wiki.openstreetmap.org/wiki/RU:T … le_parking
Для amenity=bicycle_parking разрешены все типы: точка, линия, полигон, отношение.
Добавил линию как разрешенный тип для ключа amenity.
Offline
#21 2016-04-30 05:32:40
- Map Nrg
- Member
- Registered: 2016-04-03
- Posts: 17
Re: perfect_OSM - простенький парсер для OSM XML
https://www.openstreetmap.org/node/1055522365
"Некорректный тип элемента"
landuse=industrial на точке вроде бы допустим по вики
http://wiki.openstreetmap.org/wiki/RU:Key:landuse
1. Разрешенные типы для ключа landuse: полигон, (под вопросом) отношение. Точки нет.
2. landuse=industrial: точка, полигон.
http://wiki.openstreetmap.org/wiki/RU:T … industrial
landuse=industrial: точка, полигон, (под вопросом) отношение
Добавил точку как разрешенный тип для ключа landuse.
Offline
#22 2016-04-30 06:21:36
- Map Nrg
- Member
- Registered: 2016-04-03
- Posts: 17
Re: perfect_OSM - простенький парсер для OSM XML
Сделал повторно выгрузку для Зеленограда:
Карта: http://justworks.ru/perfect_osm/20160430/map/map.htm
Карта (убрал opening_hours, fixme, surface): http://justworks.ru/perfect_osm/2016043 … ap/map.htm
Исходные данные: http://justworks.ru/perfect_osm/20160430/issues.zip
Offline
#23 2016-04-30 18:40:55
- OverQuantum
- Member

- From: Zelenograd
- Registered: 2009-06-17
- Posts: 1,582
- Website
Re: perfect_OSM - простенький парсер для OSM XML
Сделал повторно выгрузку для Зеленограда
Поисправлял вёб-сайты.
Остальное не могу исправить.
Ещё комментарий - не парсятся множественные значения, например https://www.openstreetmap.org/node/2705402397
contact:website=http://zelao.mos.ru;http://www.zelao.ru/ - оба доступны
Это же OpenStreetMap. Он больше внутри, чем снаружи.
Offline
#24 2016-05-03 20:41:33
- Map Nrg
- Member
- Registered: 2016-04-03
- Posts: 17
Re: perfect_OSM - простенький парсер для OSM XML
OverQuantum
- Поправил проверку для номера телефона, нашлись еще проблемы.
- Добавил для номера телефона и сайта поддержку нескольких значений, разделенных ';' (http://wiki.openstreetmap.org/wiki/Semi … _separator). Иначе получается, что второй телефон переезжает в comment/... как, например, в этом случае:
https://www.openstreetmap.org/way/234796535/history
Offline
#25 2016-05-04 19:09:16
- Map Nrg
- Member
- Registered: 2016-04-03
- Posts: 17
Re: perfect_OSM - простенький парсер для OSM XML
Сделал проверку ref, int_ref у дорог класса highway=trunk на соответствие: http://wiki.openstreetmap.org/wiki/RU:K … uselang=ru
Карта: http://justworks.ru/perfect_osm/2016050 … ef/map.htm
Обнаружилось много идентификаторов вида ref="71-100К-12", хотя Wiki требует 2х значного кода региона перед буквой "К".
Это какое-то исключение?
Offline