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

А, ну тогда я неправильно понял. Если в этом месте двухэтажный проём в трёхэтажном здании, то всё сделано верно. В принципе, можно было бы сделать building по всему контуру без тега высоты + надстройка как сейчас + building:part как сейчас building с этажностью. Тогда бы и в месте проёма было здание.
Но не знаю, насколько это необходимо. Я всякие балконы не включаю в основное здание, т.к. навигации они не мешают.

Ну, глосм не мапник… я имел в виду стандартный рендерер.

Там всё относительно верно, кроме того, что на основании опять стоит height основания а не всей башни. Опять кто-то поменял…
Эх, тег building:part:height так и просится, но никто его не рендерит :frowning:

А почему без первого этажа? Имеется в виду данное здание или здание вообще?

я имею в виду то что рендится будет только первый этаж (всего здания), а при переделке в 3d будет полноценное здание с надстройками и пристройками, и навигатору понятнее будет…
а те блоки которые будут без первого этажа получается должны плотно прилегать к основному зданию (на примере останкинской башни)

Хочу поднять один давно забытый вопрос из этой ветки.
2010-12-21 :

В итоге, ни levels=* ни building:part:levels не рендерятся. И поэтому никто их не отмечает, а вместо этого везде используется building:levels.
Это очень плохо по двум причинам.

  1. building:levels на building:part портит статистику зданий с разной этажностью. Невозможно не заглядывая в описание объектов определить, что перед нами, например, 5 десятиэтажных зданий или пять одноэтажных надстроек на девятиэтажном здании.
  2. если часть здания совпадает по контуру с самим зданием (обычно это нижняя часть), то проставление на неё building:levels для здания приводит к неправильному отображению в 3D. Если же на неё проставлять этажность только для данной части здания, то имеем фэйк - неверное значение этажности для
    здания в целом. Иногда можно избавиться от этого противоречия, “разрезая” здание на building:part только по вертикали. Но иногда это невозможно в принципе, как в случае с Останкинской телебашней.

Поэтому предлагаю разобраться с тегами высоты и этажности для building:part, а именно отделить их от тегов для building.
Вот два варианта:

  1. building:levels и building:height для building;
    building:part:levels; building:part:min_level; building:part:height; building:part:min_height для building:part
  2. building:levels и building:height для building;
    levels; min_level; height и min_height для building:part
    Второй вариант кажется более предпочтительным, т.к. во-первых короче, во-вторых height уже активно используется и рендерится.
    Остаётся только попросить авторов рендеров поддерживать теги levels и min_level. При этом если на одном контуре окажутся одновременно building:levels и levels,
    то отображаться должен второй, т.к. это более высокий уровень детализации.

Для статистики:
building:part на данный момент использован 4785 раз, в т.ч. на отношениях 501 раз, в т.ч
СПб - 2494 раза (52%); Москва - 160; Екб - 142; Киров - 130

building:min_level - 3389 раз (предлагаю полностью избавиться от этого тега и заменить на min_level. Сейчас 50% применяется совместно с тегом building=* и 50% c building:part=)
building:part:levels - 14 раз
building:part:min_level - 0 раз
levels - 13911 раз (распространён в Европе, прежде всего Германии, 96% применяется совместно с тегом building=
)
min_level - 15 раз

building:part:height - 14 раз
building:part:min_height - 0 раз
height - 676880 раз (92% применяется совместно с тегом building=, 6% - man_made=)
min_height - 1324 раз (37% применяется совместно с тегом building=* и 63% c building:part=*)

Я готов придерживаться любой де-факто принятой схеме рисования многообъёмных зданий. Сейчас рисую новые районы которые в значительной степени сложнообъёмные. Типичный дом где первый уровень огромен и занят встроенным паркингом, магазинами а само здание состоит из нескольких частей весьма разной этажности (только что рисовал здание где в башне 25 этажей, в основной массе - 8 этажей). Эта информация существенна для ориентирования.

Komяpa, как я понимаю, это к Вам.
Вот в этом месте здания отрисованы несколько месяцев назад, но так и не отрендерились в псевдо-3d:
http://latlon.org/buildings?zoom=16&lat=60.02718&lon=30.21864&layers=BT
Можно ли что-нибудь сделать?

Ещё один вопрос. Есть идея тега, предотвращающего показ этажности у здания, на котором он стоит. Рендереры делятся на те, что поддерживают building:part, и не поддерживают. Имеем проблему: можно отмечать building:levels на основном полигоне здания, и тогда вся прорисовка building:part насмарку, либо не отмечать, и тогда в рендерах типа ситигида вообще ничего не рисуется.
Такой тег мог бы частично решить проблему.
В самОм Латлоне есть опция, рисующая здания с дефолтной высотой на полигонах residential=urban и rural.
Здесь тоже имеет смысл отключать этажность у building, имеющих building:part, иначе происходит задвоение: http://latlon.org/buildings?zoom=17&lat=60.05989&lon=30.30967&layers=BT
Насколько такой тег, будь он создан и поддерживался, усложнил бы расчёты (как я понимаю это не критично - потребовалась ещё одна проверка на каждом здании)? Как Вы вообще относитесь к такой идее? Вариант тега: complex_building=yes

Спасибо!

Лучше уж building:parts=yes ?

Возможно. Но building:part могут быть и в виде башенок, пентхаусов и прочей ерунды, не отменяющей этажность на основном здании. Так что, имхо, такой вариант может сбить кого-то с толка.
Вообще, я указал вариант почти от балды, здесь действительно стоит хорошо всё обсудить, чтобы вышло на перспективу, а не очередная временная “заглушка”.

Фанатею от псевдо3Д. Голосую за идею уточняющего тега, что здание состоит из нескольких билдинг:партов, хоть это и костыль, может быть.

building:shape=cubes

building:part итак уже костыль можно конечно еще одним подпереть, для симметрии :slight_smile: Только потом будем обсуждать что делать с рендерами поддерживающими building:part но не поддерживающими новый тег.

А я всё жду когда этажность будет показываться горизонтальными полосками :slight_smile:

Могу сказать то, что говорил год назад (и повторил недавно ). Схема с кирпичами должна быть совместима со схемой без кирпичей.
building:levels и building:height на полигоне building=yes должны обозначать этажность всего здания.

Ну вот для обеспечения этой совместимости и обсуждается тег - уточнять форму по кусочкам или нет. Если рендер кусочки понимает, этот тег подскажет ему - является ли основной контур кусочком или нет (должен ли участвовать в отрисовке кусочками). Если рендер отрисовку кусочками не понимает - игнорит обсуждаемый тег.

Если лепить костыли - то уж до последнего :slight_smile:

В рендеринг добавлено дополнительное условие:

Если полигон building пересекается с полигоном building:part, то полигон building не экструдируется.

В таком случае можно нарисовать всё здание билдингом и проставить ему какую-zkir-захочет высоту для экструдирования в примитивных рендерерах навигаторов, а собственно более подробные объёмные призмы рисовать building:part.

А если на основной, чтоб не дублировать его, повесить помимо building=yes еще и building:part=yes заэкструдится?

Да

Тоже хорошее решение. Только теперь надо что-то делать с левитирующими кусками зданий: http://latlon.org/buildings?zoom=17&lat=60.03411&lon=30.33529&layers=B :smiley:
Вообще, там можно

  • записать building:part дополнительно к building на основную часть
  • распиливать здание только по вертикали
  • продублировать основную часть мультиполигоном с одним outer (совпадающим полигоном - ошибка) и повесить на него building:part
    Что именно выбрать - будем смотреть по ситуации.

И, кстати, не только пересекаться, но и касаться. Может быть случай, что building:part соседнего дома, стоящего встык, приведёт к тому что здание не отрендерится. Будьте бдительны !

Речь о доме 11 к1? Это похоже на какую-то проблемы отрисовки: при небольшом масштабе рисуется нормально, при крупном нижняя часть здания пропадает. Но вообще было бы проще, если бы здания старались резать по вертикали, а не по горизонтали.


Предлагается тег consists_of_parts=yes, показывающий, что здание, отмеченное тегом building=yes, состоит из кусков, отмеченных тегом building:part=yes - в этом случае рисовать по контуру building=yes не следует. Ставить тег следует на линию (или полигон), на которой стоит building=yes.

Давайте же уже придуем хоть что-то работающее (с примерами) а то список домов сложной конфигурации у меня стал что-то очень большим :slight_smile: Уж больно любят современные архитекторы что-то переменно-этажное … ну и здания на мощном стилобате (1-й этаж магазин) весьма распространены всегда были.

Тег consists_of_parts=yes как-то не звучит. Нет привязки к зданию. Уж лучше building:parts:vertical=yes
Ну и помнить что не все рендереры знают о таком теге, т.е. building=yes вешать на что-то нейтральное.

Может попробовать на примерах (картинках)? А то чего-то в споре упустим?