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

Есть чудесное здание для экспериментов, из области “что бывает”. http://osm.org/go/0t2Mek71T- МИРЭА (ТУ)

Стоит на склоне, потому цокольный этаж с одной стороны является первым от уровня грунта, с другой - уходит ниже уровня земли.
Корпуса Б,В,Г,Д соединены с корпусом “А” воздушными горизонтальными переходами, находящимися через этаж от цокольного (который лежит под ними). В корпусе А эти переходы приходят на этаж, считающийся вторым (не считая нулевой цокольный, который уже ушел под землю), но вход в корпус А (главный) находится на этом же “втором” этаже на уровне земли (улицы Коштоянца), при этом частично вися в воздухе на колоннах над внутренним проездом.

И ещё искать части здания в пределах одного с ним layer’а. Здесь в последнем примере семиэтажной части добавить layer=1.

пора прикрутить “настоящее” 3D… :slight_smile:

Еще бы 2D не разломать окончательно.

Псевдо 3-Д достаточно для большинства случаев. А настоящее 3-Д это всякие храмы и Сиднейские оперы. Но их гораздо меньше :slight_smile:

А где-нибудь написано, как следует делать?

Если рисовать building по проекции, то это будет странно выглядеть там, где часть здания нависает над дорогой.


Дополнение с учётом предлагаемых тегов, обозначающих принцип деления здания на части.

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


Как часто latlon.org обновляет данные?

Ну вот с упомнянутым зданием МИРЭА проблема как раз не в том, что его нельзя само по себе отобразить в псевдо-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: