Валидатор водных объектов

Хочу представить вашему вниманию свою разработку - Валидатор водных объектов по данным Государственного водного реестра.
Находится он по адресу
http://vwo.osm.rambler.ru

Для сравнения отбираются отношения и линии с тегами natural=water, landuse=reservoir (водоемы); линии с тегами waterway=river, waterway=stream, waterway=canal (водные пути).

Первоначальное сопоставление данных происходит по тегу gvr:code=, затем по name=. Водные пути предварительно объединяются в цепочки: конечная точка линии водного пути должна являться начальной точкой следущей линии этого водного пути. При сопоставлении также учитывается, куда впадает данный водный путь. Например в базе ОСМ есть 2 реки с именем Ольховка, одна из них впадает в реку Коса, другая в реку Лупья. Если Коса и Лупья сопоставлены с водным реестром и в водном реестре содержится информация о том, что у Косы и Лупья есть притоки с именем Ольховка, обе реки Ольховка также будут успешно сопоставлены.

Зеленый цвет означает удачно сопоставленные объекты - с обоих сторон (в водном реестре и в OSM) есть только один объект с таким gvr:code (name) или их несколько, но помогло сопоставление по месту впадения.

Желтый цвет означает что однозначно сопоставить водный объект не удалось - в водном реестре и/или базе OSM есть несколько объектов с таким gvr:code (name) и по месту впадения реки однозначно определить ее не удалось (либо река никуда не впадает, а “висит” в воздухе). Нажав на ссылку !!!, можно увидеть список всех этих объектов.

Красный цвет означает ошибки топологии. Топология на данный момент проверяется для случая впадения одной реки в другую или водоем. Обязательным условием является наличие в базе водного реестра записи о том, куда впадает данная река (колонка “Впадает в” должна быть заполненной). Нажав на ссылку !!!, можно увидеть объяснение данной ошибки: куда должна впадать река по данным ГВР и куда она впадает по данным ОСМ.

Для устранения неоднозачности реки следует в первую очередь устранить неоднозначность реки или водоема, в которую/ый она впадает (рекурсивно для рек). Скорее всего, после этого неоднозначность устранится. Если это не помогает:

  1. Если у реки есть несколько притоков с одинаковым именем, однозначно нужно проставить тег gvr:code.
  2. Для рек, впадающих в моря/заливы, помогает только gvr:code.
  3. Если река “висит” в воздухе, надо продлить ее до впадения в другую реку, водоем либо соединения с самой собой.
  4. Если водный объект отсутствует в водном реестре, но есть другие объекты с таким же именем, на отсутствующий объект необходимо установить тег gvr:code=0. Объекты с таким тегом валидатор игнорирует и не пытается сопоставлять с водным реестром.

Линии водных путей (рек, ручьев, каналов) должны выстраиваться в цепочку, то есть конечная точка линии должна быть начальной для следующей линии. Допускается наличие проток (параллельных русел), но они должны быть нарисованы по определенным правилам. Вот примеры, как нужно и как не нужно рисовать:
Примеры
Разными цветами обозначены отдельные линии реки, стрелкой направление течения. Основной смысл в том, что:

  1. Если линия заходит в одну из веток в месте разветвления, она же (или линия продолжающая ее) должна выйти в месте слияния. Недопустимо, чтобы в месте слияния выходила ветка, начавшаяся в месте разветвления.
  2. Если в месте разветвления начинаются 2 новые линии, они (или линии, продолжающие их) должны закончиться в месте слияния. Недопустимо, чтобы одна из них пошла дальше.
    Внутри разветвления линия реки может дробиться на произвольное число линий, может быть одной линией, главное чтобы соблюдались эти 2 условия.
    В варианте 1 валидатор будет считать синюю линию основной, голубую - протокой. В варианте 2 основной линией может оказаться как зеленая, так и голубая линия, в зависимости от того, куда пойдет валидатор при построении цепочки.
    Также допускается наличие рукавов устья, то есть линий, начинающихся от основной лини реки и не впадающих обратно в эту реку.
    Как протоки, так и рукава могут начинаться/заканчиваться не на основной линии реки, а на другой/ом протоке/рукаве.

Если водный объект в валидаторе имеет наименование, отличающееся от общепринятого и дополнительное наименование тоже отличается от общепринятого, он не может быть распознан по имени (установка тега alt_name не поможет, он не обрабатывается валидатором). Можно проставить ему тег gvr:code, чтобы он опознался по коду. Но лучше исправить наименование в валидаторе, для этого нажмите на картинку в колонке “Заметили ошибку?” и укажите правильное, на ваш взгляд, наименование (существующее наименование при этом желательно перенести в дополнительное). Желательно привести ссылку, где можно убедиться в том, что указанное вами наименование верное.

Таким же образом (через “Заметили ошибку?”) можно отправить запрос на редактирование любых других данных водного объекта, например указать водный объект, в который он впадает или исправить сторону впадения и т.д. Основное требование - обоснование правильности ваших данных.
При отправке запроса на редактирование можно указать e-mail, на который после одобрения/отклонения придет сообщение с перечислением одобренных/отклоненных объектов.

Вопросы, пожелания, предложения по улучшению дизайна, функциональности, алгоритмов сравнения и проверки пишите в этой теме.

Scaurr0ck, отличный валидатор!
Вопрос - почему озеро Окункуль находится Номинатимом, а в валидаторе его нет? Потому что “Окункуль” в ГВР - альтернативное имя?
Пожелание - добавить координаты недостающих озер и водохранилищ из GNS. Имхо, гораздо быстрее бы дорисовались недостающие водоемы.
Полу-оффтоп: в связи с появлением ключа water=lake/reservoir/pond указывать статусную часть водоема (озеро/водохранилище/пруд) в подписи нет необходимости, статус однозначно следует из тега water. Может быть, есть смысл создать бота, который присвоит водоему тип? Потом можно будет и статусные части удалить.

Вроде как для минутной репликации не требуется какой-то особенный “доступ”.

/// Потом можно будет и статусные части удалить.

удалить не из ОСМ, надеюсь?

А можно ещё длину нарисованных рек писать? Чтобы сравнить с данными гвр.

И используется ли в проверке топология? То есть, проверка не только названия и кода гвр, но и того, в какую реку/озеро река втекает.

Ссылочку на JOSM было бы тоже неплохо добавить.

А откуда ж еще? “Озеро озеро Шарташ”, имхо, есть масло масляное.

Да, Окункуль не находится потому что поиск пока работает только по официальному имени.
Про GNS подскажите, как оттуда взять данные.
Бота я наверное пока не осилю, надо сначала довести этот проект до нужной кондиции. Некоторые статусные части (оз., озеро, пруд, водохранилище) я отбрасываю при сравнении, возможно ещё какие-то надо пишите, добавлю.

Щас в OSM с этим сплошной разнобой. Надо или удалять или добавлять тем, у кого нету.

Мой проект хостится на рамблеровском сервере
http://wiki.openstreetmap.org/wiki/RU:Сервера_OSM_в_Рамблере
там есть зеркало - база на PostgreSQL, плохо только что я про нее узнал поздно, а то бы сразу делал с использованием ее в качестве источника.

Есть такая задумка, но пока это не реализовано. При сравнивании в JOSMе кстати большие расхождения, как правило измеренная длина в JOSMе оказывается больше, иногда в разы.
Топология пока тоже не используется, это в ближайших планах.

Подскажите, где прочитать правила формирования ссылки на JOSM?

Думаю, Aleksandr Dezhin сможет подсказать, в его валидаторе реализовано.

http://wiki.openstreetmap.org/wiki/JOSM/Plugins/RemoteControl
Например, загрузить и показать вей - http://127.0.0.1:8111/import?url=http://www.openstreetmap.org/api/0.6/way/<way_id>/full

В ГВР наверянка много ошибок, поэтому изза расхождений не стоит особо париться. Но зато будет лишний повод проверить данные.

уж лучше добавлять, чем удалять
отсечь лишнее всегда можно в процессе постобработки

Надеюсь правильно вкурил тему и для р.Истра добавил тег gvr:code. Вот правка: http://www.openstreetmap.org/browse/changeset/8292261 Правильно?

Ну в общем правильно, только добавлять gvr:code надо для всех линий реки. И еще, валидатор не понимает разветвлений, для него водоток должен быть цепочкой: каждая следующая линия начинается в точке, где заканчивается предыдущая.

Добавил ссылки для JOSM.

а что означают выделенные желтым “предупреждения”?
напишите мини-фак, пожалуйста…

Немного поменял текст шапки таблицы и добавил инфу в стартовое сообщение.