Трёхмерные здания в Mapnik

ОК, я не буду. В последнее время я такие мультиполигоны больше не делаю. Всё больше обхожусь обычными полигонами, насколько позволяет необходимость бороться с наложениями линий. Так что много котят уже спасено :slight_smile:

А вот здесь? http://latlon.org/buildings?zoom=17&lat=63.7938&lon=74.48844&layers=BT
У меня только гаражи и заборы имеют высоту.

itoworld показывает, что в этом городе использован тег building:level (79 раз), тогда как рендерится building:levels.

спасибо

Исходя из моего понимания, это bulding:parts=horizontal, т. к. соответствующие куски получаются посредством разрезания дома горизонтальными надрезами.

Те же два горизонтальных “надреза” (для отделения кусков с этажами с 4 по 5-ый) - building:parts=horizontal

Я полагаю, что следует исходить из того, ради чего затевалась простановка building:parts - демонстрация ПО, что оно способно внятно нарисовать данное здание (если ПО способно внятно отрисовать building:parts=mixed, то ему этот тег не даёт ничего нового, но и не мешает). Если мы видим building:parts=vertical на building=yes, то считаем все building:parts=yes, расположенные внутри полигона building=yes, частью этого здания, из которых можно составить всё сооружение, приставляя новые части сбоку. С одной стороны, огорчительно превращать здание с building:parts=vertical в building:parts=mixed из-за мелкой детали, с другой - говорить building:parts=vertical при наличии building:part=yes, которая превращает здание в building:parts=mixed, тоже не очень хорошо. Отсюда предложение - обозначать мелкие детали не building:part=yes, а building:part=<незначительная деталь> (нужно подумать над тегом). Тогда можно будет сказать разработчикам ПО “при отрисовке building:parts=vertical” работайте с деталями здания, кроме building:part=<незначительная деталь>, все прочие куски (building:part) получены вертикальными разрезами. Вы как-то написали мне, что при общем подсчёте этажности не считаются чердаки, лифтовые надстройки, декоративные башенки и выходы с лестниц на крышу. С этим вполне можно согласиться, но, как мне кажется, при условии, что эти самые чердаки, лифтовые надстройки и прочие мелкие элементы будут обозначаться не building:part=yes, а иначе - building:part=<незначительная деталь>. Ибо если я рассматриваю здание и вижу, что на полигоне building=yes нет building:levels, то должен получить для него building:levels как максимальное значение building:levels на кусках building:part=yes, составляющих это здание, а height как максимальное здание height. Нужно согласовать список “незначительных” деталей и их обозначение и внести это в описание тега.

Вариант обозначения “незначительной детали” - building:part=small.

P. S. Danidin9, Вы, насколько я понимаю, ошибочно проставляете building:parts=horisontal вместо building:parts=horizontal.
P. P. S. Заметил, что попадаются дома, где на нижнюю часть здания на линию проставлены адрес, building=yes и количество этажей нижней части здания, а сверху на неё поставлены куски с min_level, т. е. не выполняется условие “на здании building=yes указываются максимальное число этажей и максимальная высота” - приходится переносить адрес на полигон, охватывающий здание, и проставлять на него building:levels.

Dimamik:
Прежде всего спасибо, что заметили ошибку с названием. Это я, видимо, после борьбы с consrtructivizm и прочими -измами не доверяю букве з :slight_smile: Уже пошёл исправлять.
По поводу building:parts=horizontal : согласен, раз только горизонтальные “срезы”, пусть будет horizontal везде, вне зависимости от их конфигурации срезов.
По поводу маленьких частей - тоже проскакивала такая мысль отмечать их особым способом. Но второстепенные части бывают разными (крылечки, арки, крыши, балконы, надстройки разного рода), это тоже как-то стоит отмечать. И логичнее всего обозначать как раз в теге building:part. Так что нужен либо набор исключений, либо набор названий “основных частей”. Либо какой-то другой способ отфтльтровывания таких частей. Возможно, просто по наличию у building:part building:min_level/min_height.

Komяpa
А дождемся ли, чтобы вот здесь дома перерендились (с 11 марта так)?
http://latlon.org/buildings?zoom=16&lat=59.9966&lon=30.37904&layers=BT
Некоторые дома в том же районе (тех же рук дело :slight_smile: ) не желают рендерится, причем, они явно “зависли”,
а нарисованные рядом вновь - нормально рендерятся.

===
И дополнительно отмечу, что дом, стоящий ЗА трубой (man_made=chimney) всегда рисуется ПОВЕРХ трубы, т.е. похоже, сначала рендерятся трубы, а потом уже поверх - дома. (пример есть по той же ссылке)
Не знаю, как там на самом деле устроено, но на первый взгляд казалось бы, что трубы должны рисоваться в одной очереди с building, в той же последовательности.

AlexTheTux: Komяpa ответил мне в личной переписке, дословно:

min_level и min_height не подходит, т. к. может иметься многоэтажный дом с аркой на уровне нижних этажей.

Мне кажется, что можно сделать так, что, с одной стороны, будет понятно, поддержки какого минимального набора исключений следует требовать от программного обеспечения, с другой - можно будет свободно расширять классификацию “незначительных деталей”. Если незначительные детали обозначать по схеме building:part=тег_для_незначительной_детали+незначительная_деталь=тип_незначительной детали, можно будет сказать “отрисовывайте всё, кроме building:part=тег_для_незначительной_детали” и обозначать тег_для_незначительной_детали=балкон/антенна/маленький_выступ и т. д.

Например, building:part=small_part+small_part=balcony.

Не придумывайте очередной велосипед, building:part - это и есть та, незначительная деталь, которая при 2D рендеринге или конвертировании в навигаторы просто отбрасывается.

Не говорите, плиз, за все навигаторы и все конвертеры. В вашем конвертере - пусть отбрасывается, на здоровье. А если кого не устроят убогие прямоугольники псевдо-3D, иногда полностью не соответствующие узнаваемой форме зданий - те могут захотеть таки полнее использовать возможности, предоставляемые некоторыми навигаторами.

Как нарисовать конусное здание, где основание 20 метров, а крыша 15?

height=20 + building:roof:shape=conical + building:roof:height=15 (можно также использовать building:roof:angle, равный arctg(высота конуса/радиус конуса) ).
http://wiki.openstreetmap.org/wiki/Proposed_features/Building_attributes

www.osm-3d.org
Я полтора года в проекте, а не знал о существовании такого красивого 3D визуализатора ОСМа.

jpg upload

Здорово! Жаль только, что зеленые насаждения остаются плоскими

Очень странно отрендерились здания, покрывшись взявшимися из ниоткуда ломаными.
http://latlon.org/buildings?zoom=18&lat=60.7064&lon=28.75148&layers=BT

Pavel47, нельзя ли на картинке пояснить, в чём проблема? Я вижу здания, рядом с которыми есть заборы/стены. О каких ломаных идёт речь?

В половине квартала 3D-здания разошлись с 2D-контурами. Такая проблема наблюдается еще на нескольких участках.

Если сравнить слой космоснимки и слой Mapnik, видно, что они не совпадают. Слой космоснимки и трёхмерные здания рисуются по старым данным, которые существовали в базе когда-то давно, слой Mapnik - по текущим данным. Если включить показ трёхмерных зданий и слой Mapnik там, где здания двигались/перерисовывались, будут получаться такие расхождения, как видны у Вас.

А можно ли (и нужно ли?) исправлять это?