Pl:Simple 3D buildings
Ten artykuł opisuje schemat oznaczania podstawowych atrybutów 3D budynków.
![]() |
To jest podstawowy schemat tagowania budynków 3D. Więc jest ograniczony i nie każdą geometrię / szczegół można opisać w ten sposób. Możesz użyć rozszerzenia (takiego jak Kendzi3d) i próbować, lub poczekać na następną wersję złożonego modelowania. |
Następujące metody oznaczania są rezultatem 2nd 3D Workshop Garching, gdzie większość programistów 3D zgodziła się wspierać ujednolicony podzbiór tagów w swoich programach. Zasadniczo opisujemy objętość budynku za pomocą dwóch typów obszarów. Kontury budynku przedstawiające ogólną powierzchnię kompleksu budynków oraz części budynku, do opisania jego elementów o różnej wysokości lub innych atrybutów.
Mapowanie
Obrys budynku
Obrys budynku jest reprezentowany jako obszar oznaczony building=*. Jest to obszar objęty przez jakąkolwiek część budynku. Inne znaczniki, które odnoszą się do całego budynku (np. adres, jeśli dotyczy) muszą być także umieszczane na tym obrysie budynku. Jeden budynek powinien mieć tylko jeden building=* obrys, kilka building=* nie może być zbitych w jedną bryłę.
Elementy budynku
Jeśli niektóre elementy istniejącego budynku mają różne atrybuty (np. wysokość), mogą one być modelowane jako dodatkowe obszary, oznaczone building:part=yes lub building:part=<type of building:part>.
Zauważmy, że jeśli budynek ma co najmniej jeden obszar oznakowany jako building:part
, obrys budynku nie jest już więcej brany pod uwagę do renderowania jego objętości, chyba że jest on również oznaczony jako część budynku.
Istnieją trzy sposoby, aby wykorzystać obszar building=* do renderowania w 3D, w tym przypadku:
- Pokrywamy cały kontur budynku poszczególnymi tagami
building:part
. Obszary te mogą zachodzić na siebie lub mogą być niepołączone, co zależy od konkretnego budynku.
Unikajmy stosowaniabuilding:part
z nakładającymi się elementami 3D, jeśli to możliwe, zwłaszcza jeśli całość będzie miał wspólną elewację. - Używamy
building:part
tylko do tych części, które różnią się od całego budynku.
Ta sprawa wymaga zastosowania relacji building gdzie obrys building=* ma rolę outline, a poszczególne części budynkubuilding:part
rolę part. - Podziel budynek na poziome części (piętra ułożone jedno na drugim) i dodaj do każdej części znaczniki building:levels=*, building:min_level=*, height=*, min_height=*.
Relacja building
Relacja oznaczona tagiem type=building grupuje razem obrys budynku oraz wszystkie jego części building:part
. Zaleca się stosować relację, jeśli istnieje co najmniej jedna część building:part
. W przeciwnym razie aplikacja zacznie z powrotem wyszukiwać części budynku tylko w obrysie budynku.
Zobacz także Relations/Proposed/Buildings i ProposedRoofLines#Building_Relation.
Tagi obrysu budynku i jego części
Następujące znaczniki mogą być użyte do obrysu budynku i jego elementów.
Wysokość budynku
Oznaczenie | Komentarz |
---|---|
height=* | Odległość między najniższym możliwym położeniem ściany budynku na poziomie ziemi a górną, najwyższą częścią dachu budynku, bez anten, iglic i innych urządzeń zamontowane na dachu. |
min_height=* | Wysokość między poziomem terenu mierzona w tym samym punkcie co height a dolną płaszczyzną struktury budynku zaczynającej się powyżej poziomu terenu. Należy zauważyć, że gdy stosuje się min_height, wysokością jest nadal odległość od podłoża do góry struktury. Tak więc np. most o wysokości 3 metrów, gdzie dolna część mostu jest usytuowana 10 metrów nad poziomem ziemi, powinien być opisany jako min_height = 10 i height = 13. |
building:levels=* | Liczba pięter powyżej poziomu ziemi (bez poziomów w dachu), pozwalająca przedstawić strukturę budynku w prosty sposób.
Jeśli oznaczamy nowe budynki, podajmy zawsze wysokość budynku. |
building:min_level=* | Poziomy pominięte w części budynku, analogiczne do min_height. |
Kształt dachu
roof:shape=<kształt dachu>
Kształt dachu większości budynków można scharakteryzować, używając katalogu znanych rodzajów dachów.
Dodatkowe kształty dachów mogą być przedstawione później (obecnie brak jeszcze pełnej implementacji) używając zaawansowanych technik jak:
- ręcznego modelowania (np. ProposedRoofLines lub
- rozszerzonego katalogu dachów User:Marek kleciak/Roof table).
W przypadku dachów z kalenicą przyjmujemy, że grzbiet dachu jest równoległy do dłuższego boku budynku. Jeśli jednak tak nie jest, należy wtedy taki dach oznakować szczególnie jako roof:orientation=along (wzdłuż)/ across (w poprzek).
Tag | Komentarz |
---|---|
roof:orientation=along/across | W przypadku dachów z grzbietem kierunek grzbietu przyjmuje się jako równoległy do dłuższego boku budynku. Ale może być jednoznacznie oznaczony tym tagiem. |
roof:height=* | Wysokość dachu w metrach, która jest częścią height=* budynku. |
roof:angle=* | Alternatywny tag dla roof:height=*, wysokość dachu może być opisana w dokładniejszy sposób poprzez podanie wartości nachylenia boków (w stopniach). |
roof:levels=* | Liczba pięter w dachu, które nie są wliczone w tagu building:levels=*. |
roof:direction=* | Kierunek od części wyższej budynku do niższej jak widok poniżej. Wartości zgodnie z direction=* |
Tag roof:direction=* (wartość w stopniach) jest renderowany przez stronę F4 maps dla dachu typu skillion.
Definicja kąta:
Uwaga: Niektóre dachy (np. budynków kwadratowych), nie mogą być dokładnie modelowane według prostych technik opisanych na tej stronie.
Znacznika roof:height=* używamy, aby podać wysokość dachu w metrach, zaś do podania nachylenia głównej płaszczyzny dachu mierzonej w stopniach używamy roof:angle=*.
Znacznik roof:levels=* określa liczbę pięter w obrębie dachu, które nie są obecnie brane pod uwagę w building:levels=*.
Powierzchnia budynku
Key | Comment |
---|---|
building:colour=* | Kolor elewacji budynku. |
roof:colour=* | Kolor dachu budynku. |
building:material=* | Materiał użyty do pokrycia elewacji budynku. |
roof:material=* | Materiał użyty do pokrycia dachu. |
Przykłady obszarów
Żeby ułatwić społeczności mapujących zrozumienie, co da się osiągnąć stosując powyższy schemat, zaczęliśmy dodawanie wykonanych zgodnie z nim przykładów. Patrz niżej:
Location | OpenStreetMap | OSM2World | OSMBuildings | F4 Map | OpenScienceMap | OSM go | Mapbox GL | Tangram | Blicky |
---|---|---|---|---|---|---|---|---|---|
![]() |
![]() |
N/A | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
N/A | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
N/A | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
N/A | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
N/A | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
N/A | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
N/A | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
N/A | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() with type=building relation |
![]() |
N/A | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
N/A | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
N/A | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
N/A | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
N/A | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
N/A | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
N/A | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
N/A | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
N/A | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() | |
![]() |
![]() |
N/A | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Przykłady obiektów
Terminologia
Diagram który może pomóc zrozumieć pewne architektoniczne warunki.
Narzędzia
Następujące narzędzia 3D wykorzystują nowy schemat:
- OSM2World (częściowe wsparcie, obecnie wykorzystuje pozostałe funkcji dla wydania 0.2.0)
- Kendzi3d wspierane
- OSM-3D (częściowe wsparcie, zobacz OSM-3D#Buildings)
- Nutiteq Android 3D mapping SDK [1] (większość kształtów dachy wspomane)
- WikiMiniAtlas (częściowe wsparcie, tylko dach pyramidal)
- OSMBuildings (częściowe wsparcie)
- F4 Map – zobacz http://demo.f4map.com/#
- OpenScienceMap – http://opensciencemap.org/map/ Interpretuje obecnie tylko tagi wysokości / min_wysokości. obszary
building_part
są odejmowane od powierzchni budynków. - Hellomap3d Android 3D mapping SDK . Obsługuje tylko parametr wysokości (na razie) wielokątów 3D.
- OSG-Maps (częściowe wsparcie)