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

Ну вот с упомнянутым зданием МИРЭА проблема как раз не в том, что его нельзя само по себе отобразить в псевдо-3D (оно является объединением нескольких фигур, образованных простым движением основания вдоль перпендикулярной направляющей), а в том, что оно стоит не на горизонтальной поверхности. Таких зданий не много, но они есть.

Спасибо, верное замечание. И тогда ещё стоит упомянуть, что по крыше стилобатной части обычно возможна пешеходная (или даже авто) навигация, и в таком случае layer=1 относится и ко всем highway на такой крыше.

IMHO, вместо building:parts:vertical=yes и building:parts:horizontal=yes логичнее задавать building:parts=vertical и building:parts=horizontal

Ну да, это скорее исключения. Пока стоит отмечать этажи по максимуму, а подобные факты писать в note.
Вообще сейчас есть тег ele=*, может в будущем он будет использоваться чаще, если повысится точность навигаторов в измерении вертикальных координат.

А если здание собрано из множества “кирпичиков” и по вертикали, и по горизонтали?

building:parts=mixed :slight_smile:
Вот если бы там что-то отличное от yes ставилось - тогда другое дело.

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

ребята, одна прорсьба:

когда придумываете новые теги, задумывайтесь, какую задачу этим решаете.

Зачем вообще нужно давать кому-то знать, порезан дом горизонтально или вертикально?

Не возражаю:
building:parts=vertical, horizontal или mixed

Чтобы рендереры, которые умеют работать только с вертикально или только с горизонтально порезанными зданиями, знали, нужно ли им пытаться аккуратно отрисовать здание, составив его из кусочков.

Они его либо отрисуют аккуратно, либо отрисуют не так аккуратно в меру своих способностей. Зачем им знать подробности?

чтобы увидев building:parts=horizontal|mixed даже и не пытаться. анализировать геометрию/высоты совсем не улыбается.

Если рендерер не умеет резать по горизонтали, то он может даже не пытаться, увидев min_level. Если по вертикали, то может рисовать части так, как будто они не соприкасаются.

По min_level у одной части пропускать всё здание целиком плохо. Вот есть вот такое здание:

http://maps.yandex.ru/-/CFhEJI5T
http://www.openstreetmap.ru/#zoom=17&lat=59.850963&lon=30.40142&layer=Mapnik,Трёхмерные%20здания

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

Это условие на практике приводит к нехорошим последствиям. Положим, есть здание building=yes, соприкасающееся с несколькими другими building=yes. В какой-то момент я обнаруживаю, что у здания переменная этажность, добавляю внутрь полигоны building:part с разным числом этажей. Это одно здание прорисовывается, все остальные касающиеся building=yes из 3D пропадают.

Получается, что уточняя высоту одного здания, я могу “сбить” картинку для нескольких других. Либо я должен проверять все касания и добавлять building:part даже на те здания, которые состоят из одного параллелепипеда и которые делить никогда не придётся. building=yes и building=part на одном и том же полигоне выглядят странно (фактически - тегирование по рендерер).

Нужно постараться сделать так, чтобы не отрисовывались только те building=yes, внутри которых есть building:part. Текущая ситуация не вполне нормальна.


Если здание порезано по вертикали и имеется min_level, это, скорее всего, арка (min_level=1). Если её отрисовать как кусок здания, узнаваемость сильно не пострадает.

Что не так с этим зданием?
http://www.openstreetmap.org/browse/way/28501986/history

Этажность не рисуется :frowning:

Это из-за соседнего building:part

То есть это ошибка рисовалки? Или чего-то не хватает?

Выше про это упоминалось:

http://forum.openstreetmap.org/viewtopic.php?pid=217486#p217486

http://forum.openstreetmap.org/viewtopic.php?pid=217509#p217509

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

Ага. Положим, есть цепочка соприкасающихся домов. Делим один из них на части - все соседние перестали отображаться. Ставим building:part на эти соседние - перестают отображаться соседние к соседним и т. д. В результате может получиться, что из-за деления одного дома на пару частей понадобится ставить дополнительный тег на десяток-другой близлежащих домов. Не дело это.

И ещё: есть ощущение, что building:part=yes+building:height=… на latlon в настоящий момент не отображаются (отрисовываются только building:part=yes+height=…).

Честно мне вообще не улыбается рисовать 3D таким методами :slight_smile:

Сообщаю, что новая схема рендеринга поломалась. Т.е. building:levels снова ренедрится на зданиях с building:part