You are not logged in.

Announcement

*** NOTICE: forum.openstreetmap.org is being retired. Please request a category for your community in the new ones as soon as possible using this process, which will allow you to propose your community moderators.
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 — работает с миллионами точек.


ШТОСМ | josm.ru | обо мне | удалёнка зло

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

Map Nrg wrote:

RiG's,
Примерно вот в таком виде подойдет?

Москва, бесполезные точки, пустые линии:
http://justworks.ru/perfect_osm/2016_04 … rkers.html

Zverik,
Спасибо, полезная штуковина.

Подойдет, только загрузку в 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

Map Nrg wrote:

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

Map Nrg wrote:

Отдельно сделал выгрузку по Зеленограду командами

Супер! Спасибо.
Телефоны поисправлял и ещё немного.

Вижу несколько странных вещей

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

OverQuantum wrote:

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

j-wills wrote:

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

OverQuantum wrote:
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

Map Nrg wrote:

Не учел зеленоградскую схему адресации.

Тут дело даже не в зеленоградской схеме, а в том, что во многих небольших населённых пунктах бывает так, что улиц вообще нет, а нумерация домов - сквозная, по населённому пункту.

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

Map Nrg wrote:

Сделал повторно выгрузку для Зеленограда

Поисправлял вёб-сайты.
Остальное не могу исправить.

Ещё комментарий - не парсятся множественные значения, например 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

Карта: http://justworks.ru/perfect_osm/2016050 … ap/map.htm

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

Board footer

Powered by FluxBB