Кажется тема снова заглохла. Где же все мапперы, которые рисуют building:part? Неужели их устраивает нынешняя ситуация, полная
неоднозначностей?
В общем, скажу так. Многим не вполне ясно, почему тема тегирования разноэтажных зданий всплывает вновь и вновь. Проблема
заключается в том, что правила зачастую придумывают люди, которые не занимаются практикой. И когда дело доходит до дела, выясняется, что чтобы сделать что-то простое, надо совершать множество неочевидных, спорных действий.
Чтобы было понятно: начнём с азов.
Возьмём самое обычное многоэтажное жилое здание. Что представляет его форма? Параллелепипед, т.е. коробку. Крыша его или плоская,
или четырёхскатная, или двухскатная. Прочие варианты встречаются редко. На крыше обычно стоят коробки поменьше - технические
надстройки. Если крыша неплоская, они обычно скрываются под ней (если высокие - могут частично вылезать). Если же плоская - всё на
виду.
На этажность здания эти коробки, так и быть, не влияют (чердаки за этаж не считаются). Поэтому поговорим пока про высоту (height), хотя с этажностью у разноэтажных зданий возникают точно такие же проблемы.
Итак, при учёте общей высоты, надо считать все капитальные части здания. Включая лифтовые надстройки (на спутнике видны как
квадратики над каждой парадной), выходы вентиляции (длинные узкие стены на крышах хрущёвок), и ограждения крыши (снаружи часто
выглядят как продолжение стен; могут быть от полуметра до пары метров высотой; могут быть как с торцов, так и по всему периметру
крыши).
В большинстве случаев, общая высота здания с учётом всех этих надстроек, на 2-3 метра больше, чем уровень крыши. Хотя иногда бывают
и многоэтажные надстройки. Но возьмём самый простой вариант. Пусть надстройка одна, мы её отметили. Её высота - 32, уровень крыши -
29. Мы выставили height=32 на квадратике надстройки. Что будем отмечать на контуре здания? 29? Но это внесение ложных данных, ведь
общая высота здания включает высоту надстройки и равна 32. 32? Но если мы так сделаем, ни один рендер не узнает, что высота крыши -
29, и нарисует просто коробку высотой в 32 метра без детализации.
Проблема ясна? Надеюсь, да. Теперь, что можно сделать? Будем реалистами и не станем рассматривать варианты, требующие коренной
переделки схемы тегирования. Например, вариант с введением нового отношения всё равно никто не будет поддерживать.
Тогда я вижу всего два выхода.
Первый не требует никаких нововведений. Просто нужно создать два объекта на контуре здания. Первый объект - “здание” с высотой 32
метра. Второй объект - “часть здания” высотой 29 метров. По крайней мере один из этих объектов придётся сделать мультиполигоном, и
повесить на контур здания как на единственный outer. Иного выхода нет. В итоге всё рисуется, все довольны. Но… хорошо ли это? Нет. Такой подход абсолютно неинтуитивен.
Теперь второй. Придумываем отдельные теги для обозначения высоты и этажности на частях зданий.
Тогда на контуре здания можно будет совмещать теги для здания и теги для “базовой части” без всяких надстроек и пристроек. Если на
контуре не будет тегов для “части”, тогда объём здания рисуется на основе тегов высоты и этажности здания в целом, исключая те области,
где указаны building:part со своими параметрами.
Плюсы этого подхода:
- Не нужно думать, что делать с совмещением двух объектов на одном контуре. Не нужно плодить мультиполигоны или изощряться,
создавая полигон “здания без надстроек” (увы, бывает и такая порнография).
- Сейчас невозможно отличить этажность здания, от этажности частей. При сборе статистики по зданиям это является сложностью - тег
building:levels приходится рассматривать каждый раз в контексте прочих тегов (building:part, building:parts и т.д.). С вводом новых тегов эта
проблема тоже исчезает.
Главный минус - придётся всё это обсуждать, проводить через стадию пропозала, а потом пинать владельцев рендереров, чтобы те настроили новый приоритет тегов.
И ещё немного на тему высоты.
edward17 предложил для здания использовать теги building:levels и height, а для частей - building:part:levels и building:part:height.
Я же предлагаю для здания использовать building:levels и building:height, для частей - levels и height.
Объясню, почему так. Во-первых, это короче и проще запомнить.
Во-вторых, многие считают, что высота здания первична по отношению к высоте его частей, поэтому широко распространённый тег height
должен продолжать относиться к зданию. Но ведь это не так!
Высота “всего здания” на самом деле - крайне эфемерная и спорная вещь. Антенны, колпаки и плиты воздуховодов, дымовые трубы, шпили, кресты и статуи, съёмные ограждения крыш, самовольно надстроеннные мансарды-“курятники” и т.д. - учитываются ли они при подсчёте высоты? На эту темы ведутся вечные споры. Если кто-то решил позагорать и вынес на абсолютно ровную крышу кресло - увеличится ли высота здания на высоту этого кресла?
Очевидно, “высота всего здания” часто не может быть указана, либо является спорной. А вот высота его отдельных частей, прежде всего фасада, может быть установлена даже по спутниковому снимку. Именно эта высота нас чаще всего и интересует. Когда мы,
например, сравниваем дома на улице по высоте, мы сравниваем их по высоте фасада, а не по высоте антенн или плит воздуховодов,
которые обычно и вовсе не видны.
К тому же фасад - более долговечная вещь, чем разное вспомогательное хозяйство на крыше. Поэтому я предлагаю для указания высоты
частей здания, прежде всего частей, представлюящих собой те самые параллелепипеды, использовать тег height. Для указания высоты
крыши, как единой формы с определённым roof:shape, без учёта всяческих надстроек - roof:height. Для здания же в целом - building:height.
Соответственно, созвучно выбираются и теги для этажности - для здания сохраняется широко распространённый building:levels, для частей
вводится новый levels (не путать с level, тегом для указания расположения организации внутри здания).
Для указания минимального этажа и высоты используются min_level и min_height. Особо уточню, что в этом варианте min_level и min_height
не требуются на надстройках, более того, там они будут ошибкой. Только если под частью здания действительно ничего нет (лоджия,
подворотня), используются эти теги.