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

Могу сказать то, что говорил год назад (и повторил недавно ). Схема с кирпичами должна быть совместима со схемой без кирпичей.
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 вешать на что-то нейтральное.

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

Я всегда делал так, чтобы building:part были внутри building. Если делать проверку на нахождение внутри, то касание ничего не сломает.

Предложение: если рядом с этим куском есть другие, расположенные сбоку - пишем building:parts:vertical=yes, если рядом с этим куском есть другие, расположенные сверху или снизу - пишем building:parts:horizontal=yes. Так или иначе даём информацию, что building состоит из building:parts. Пояснение для запоминания: building:parts:vertical - значит, здание порезано по вертикали, building:parts:horizontal - здание порезано по горизонтали. В каких-то случаях может быть нарезка и по горизонтали, и по вертикали. Тег, позволяющий отличить нарезку по вертикали от иной, даст возможность работать тем рендерерам, которые понимают вертикальную нарезку, тег, позволяющий отличить нарезку по горизонтали от иной, даст возможность работать тем рендерерам, которые понимают горизонтальную нарезку. Т. к. эти теги дополнительные, то не будут мешать (их добавление ничего не меняет для того ПО, которое не умеет с таким работать).

Есть такое :frowning:

Пожалуйста, схема, учитывающая последние изменения в мапниковском рендере: http://fotki.yandex.ru/users/danidin/view/456985/?page=0 :3

Хорошая картинка, надо бы ее в вику засунуть.

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

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

Ещё, если “под рендеринг”, то я рекомендовал бы резать здания по горизонтали - тогда на них не будет видно стыков. Вертикальные стыки я с такой лёгкостью пока не придумал, как убрать :3

Я думаю ничего хорошего, особенно если включен режим полупрозрачных зданий с окнами. Это можно попробовать. Хотя, скорее всего, это не так важно, потому что поддежка “частей зданий” так или иначе требует (или может требовать) некоторых изменений .

Намного важнее, **чтобы “части зданий для рендеринга” не путались со “зданиями” **. Здания же, очевидно, пересекаться друг с другом не могут. Ни в 3д (что очевидно), ни даже в 2д, за исключением редчайшего случая, когда один дом нависает над другим.

Вроде бы предложенная схема (на картинке) этому условию удовлетворяет.

У меня ровно наоборот. С тех пор как у меня нет обводки на зданиях, они неплохо стыкуются как в плоском, так и в объемном режиме.

Про рендеринг этажности скажите что-нибудь! Реально сделать горизонтальные линии по количеству этажей, распределённые в зависимости от высоты здания? Чтобы на стоящих рядом жилых и промышленных девятиэтажках было видно что они девятиэтажки, несмотря на разницу в высоте в два раза.

building=* же по фундаменту обводится, а не по проекции, не? Так что вообще никогда не пересекаются.

Вообще-то должны именно по проекции

я думаю 60% зданий обведены по крыше :smiley: