Нормализация данных (пилотный проект — Спб и ЛО)

Надо сказать, это далеко не самый худший вариант.
natural=wood - лес,
landuse=forest - искусственные лесопосадки.
Что здесь нелогичного?
И какая предлагается альтернатива?

Обнаружил в Питере у многих building=yes наличие addr:street без addr:housenumber. Думаю, такую комбинацию тоже следует считать ошибкой.

andriano, такое реально бывает: дом приписан улице, но без номера (б/н)

http://forum.openstreetmap.org/viewtopic.php?pid=146740#p146740

Можно пример?

Можно пример из КЛАДРа?

а откуда в кладре номера домов???

Там есть диапазоны номеров, но их актуальность и аккуратность их заполнения – неизвестны.

По Питеру есть уже адресный валидатор от liosh-а :slight_smile: http://gis-lab.info/data/mp/addr/?base=rgis
Так что это проблема под контролем :slight_smile:

я ставлю addr:street без housenumber, когда знаю, что дом прописан по улице, но в номере не уверен. Это не ошибка. Так же, как building:levels без building=* — не ошибка.

С шестого уровня:

andriano, ты сам кладр посмотри, а не его описание :slight_smile:

Первые две итерации завершены. По нескольким регионам (Ленинградская, Московская, Новосибирская, Владимирская области, Краснодарский край) был составлен словарь тегов. 236 ключей и 927 значений довольно неплохо описывают реальность. Непонятными оказываются порядка 0.5% данных что для начала неплохо.

Хотел проверить - а как мой словарь работает на “буржуйских” данных. Но оказалось что их файлы .osm гораздо больше наших (даже файл Финляндии в 2 раза больше Москвы и Московской области) и вычислительные ресурсы оказались узким горлышком. Поэтому пришлось полностью переделать базу данных с точки зрения оптимизации. База данных из красивой и понятной превратилась в оптимизированную, в которой не особо то и разберёшься. Но в результате она стала меньше где-то на 30% да и скорость обработки выросла пропорционально. Для обработки стран средней величины уже должно хватить. Впрочем, для обработки крупных стран придётся делать ещё одну оптимизацию. Но там уже будет статистическая оптимизация, с преобразованием данных (идеология в духе алгоритма Хаффмана) и это уже будет перед промэксплуатацией, т.к. база будет что чёрт ногу сломит.

А сейчас работаю над сочетанием тегов. Задача полностью не разрешима в рамках идеологии OSM, но до некоторого практического уровня валидатор довести можно. Например, регулярно в данных находятся сочетания типа highway=* и building=yes и т.п.

Я в таких случаях ставлю “addr:housenumber=00” , очень удобно.
а) теги собраны правильно
б) наглядно на карте сразу видно что номер дома неизвестен (неточен) и проезжая мимо можно глянуть
в) опять же на карте видно, что это именно дом, а не скажем служебное здание или еще что-либо

Спасибо.
Вот здесь http://forum.openstreetmap.org/viewtopic.php?id=11467 я как раз столкнулся с тем, что существование записей такого вида входит в конфликт с концепцией, принятой для упаковки данных.
И придерживаюсь мнения, что в данном случаен имеет место умышленное искажение информации. Хотя для кого-то, это, возможно, и удобно.
На мой взгляд, отсутствие информации значительно лучше, чем искаженная информация. Из каких благих целей бы эта информация не искажалась.

А можно ознакомиться с этим списком?
И еще, из 236 ключей и 927 значений можно составить 218772 комбинаций. Каким образом определяется, какие из этих комбинаций допустимы, а какие - нет?
И каким образом обрабатывается ситуация, когда для определенного ключа допустимы произвольные значения?

Когда работа будет завершена то я размещу подробный отчёт, думаю что на вики. Пока всё сыровато чтобы выкладывать, так как все будут видеть кучу мелких погрешностей и делать неверный вывод - “сколько там косяков, наверное вся работа кривая”. А вот этого бы не хотелось.

По поводу комбинаций тегов. Полное решение задачи может и возможно теоретически, но по-крайней мере крайне сложно практически. Даже если предположить, что удастся всё подробно расписать относительно одного объекта, то придётся разбираться с комбинацией объектов. Взять тот же building=yes. Ничто не мешает навесить на контур здания shop=* или amenity=*. И каждый дополнительный тег может привнести свои собственные комбинации. В реальных данных на контур building=yes, например, ещё накладываются man_made, landuse, highway. Где проходит грань между допустимыми и недопустимыми комбинациями тегов, особенно если учесть что “any tag you like”? В файле Владимирской области, например, 17 зданий, они же landuse, 4 здания highway, 5 населённых пунктов помечены тегом layer, 105 веев имеют только тег addr:housenumber и ничего более (нет addr:street) и т.п. Вообще комбинации порой весьма причудливы :slight_smile:

Я придерживаюсь единственного рационального (с моей точки зрения) подхода - строю частотные таблицы и далее, сопоставляю сочетания с документацией. Если потенциально сочетание возможно (с моей точки зрения), то сочетание пропускается, если нет - то отбраковывается. Валидатор получается довольно грубым, но во многом это в силу свободности семантики языка OSM и трактовки правил. Нужно не забывать что и русском языке складывая валидные слова языка можно получить бессмыслицу, “мама ныла раму”. Но с другой стороны парадоксальные сочетания слов иногда имеют смысл, скажем, “папа глушил водку” :slight_smile:

Работа потихоньку идёт. Каждая следующая итерация это всё больший уровень абстракции и резко возрастающий объём исключений и нелогичностей. Но лёгкой прогулки и не ожидалось.

Хотя валидатор будет запускаться только по СПб и ЛО, он обкатывается и на других странах. Недавно прогонял Бельгию. Хотя в планах нет глобальной экспансии, но разрабатывая сложную вещь нужно в архитектуру решения закладывать масштабируемость. Вдруг окажется полезным?

Но к сожалению, есть одно но. Я уезжаю в командировку и отпуск и где-то на 1.5 месяца выпадаю из нормального ритма жизни. В частности, доступ к ОСМ да и компьютеру вообще будет ограничен. Так что в ближайшее время новостей не будет. Когда все поездки закончатся, надеюсь опубликовать результаты исследования.

На затравку несколько ошибок из пробного прогона валидатора:

xybot прибил “amenity=” http://www.openstreetmap.org/browse/node/1153440818/history http://www.openstreetmap.org/browse/node/1156696653/history и получилась точка с name и без каких-либо ещё тегов.
Зданий Пулковской обсерватории, покрытое кустарником - http://www.openstreetmap.org/browse/way/27379602
Кинотеатр, он же - заброшенная деревня - http://www.openstreetmap.org/browse/way/62365485
Детский сад, он же шоссе - http://www.openstreetmap.org/browse/way/40433125
Здание = дорога - http://www.openstreetmap.org/browse/way/86601892
Дорога=озеро - http://www.openstreetmap.org/browse/way/60503929
Линия электропередач, она же дорога - http://www.openstreetmap.org/browse/way/80765386
Промзона, имеющая адрес, она же лес - http://www.openstreetmap.org/browse/way/54117446
motorcar=Северная ТЭЦ - http://www.openstreetmap.org/browse/way/33227541
Остров, висящий над землёй - http://www.openstreetmap.org/browse/way/30430221
Забор (не дорога) с ограничение скорости - http://www.openstreetmap.org/browse/node/1192706200
Всё в одном - лес, парк, лесопосадки - http://www.openstreetmap.org/browse/way/45419917

И т.п.
Возможно - не всё ошибки, но сочетания непривычные :slight_smile:

Может быть, здесь ошибки нет. Это ворота, а не забор; и если на воротах стоит знак ограничения скорости, то тэг maxspeed поставлен правильно. Его надо бы ставить на дорогу, но здесь дорогу пока не нарисовали.

Да, там именно так, как сказал Surly.
Кстати, за этими воротами находится навес для транспорта - крыша на бетонных столбах. Может кто-нибудь посоветует, как отмечать такие сооружения поизящнее? Пока обозначил просто как covered=yes.