Ko:간단한 3D 건물
이 문서는 건물의 3D 속성을 나타내기 위한 기본 태그 사용법을 설명합니다.
아래에 설명되어 있는 기본 규정은 2012년 독일 뮌헨에서 열린 제2차 3D 워크숍 연구의 합의안입니다. 이는 곧 대부분의 3D 개발자들이 각자의 프로그램 내에서 아래 태그의 통일된 서브셋을 지원하기로 뜻을 함께한 것입니다.
매핑 방법
기본적으로 건물의 부피를 다룰 때에는 그 영역을 두 가지 유형 가운데 하나로 설정하게 됩니다. 첫째는 건물의 기반 영역을 '건물 외곽'으로 규정하는 방법, 둘째는 건물의 각 일부분을 '건물 일부'로 따로따로 규정하는 방법입니다. 후자는 특히 높이나 수치가 다른 형태를 지닐 때에 활용할 수 있습니다.
건물 외곽
건물의 외곽 (Building outline)이라 함은 건물이 지면에 닿아있는 전체 영역을 뜻합니다. 대부분의 경우 이 윤곽선이 곧 건물의 공간 차지 범위로도 인식됩니다. 닫힌 길이나 다중 다각형에 building=* 태그를 부여한 것이 건물 외곽선에 해당되며, 건물의 속성 (예:주소, 명칭, 높이, 운영 등)은 반드시 건물 외곽선의 영역에 태그해야 합니다.
건물 외곽은 2D 렌더링 소프트웨어와 그 외 3D 모델링에 관심이 없는 데이터 사용자에게 하위호환되는 정보라 할 수 있습니다. 3D 렌더링 환경에서도 기본적으로 건물 외곽선을 따라 렌더링하지만, building:part=* 태그가 붙어 있을 경우 건물 외곽은 취급하지 않게 됩니다.[1]
건물 일부
건물 일부 (Building:parts)는 전체 건물 내에서 높이, 색상 등의 속성이 다른 어느 일부분을 가리키는 것으로, 건물 외곽 내에 영역을 그어 building:part=* 태그를 붙이면 구현할 수 있습니다. building:part=* 태그에 들어갈 값은 yes으로 해놓는 것이 보통이지만, building=*의 태그값을 넣더라도 상관은 없습니다.
건물 일부 태그를 활용하게 된다면, 전체 건물 외곽은 각각의 높이와 속성이 태그된 여러 개의 building:part=* 영역으로 채워지게 됩니다. 건물 일부는 해당 건물의 실제 형태에 따라 서로 겹치거나 분리하여도 됩니다. 주의할 점은 2D 시점 상의 영역은 겹쳐도 괜찮고 또 겹쳐야만 하는 상황이 종종 생기지만, 3D 시점 상의 객체는 겹치는 것을 자제해야 한다는 것입니다. 특히 렌더링 결과물에서 같은 면에 해당된다면 한 개 이상의 3D 객체로 처리하는 것은 지양해야 합니다.
building:part=* 태그 영역에 부여할 수 있는 건물 속성 태그는 후술할 문단을 참조해 주세요. 단 building:part=* 태그 영역의 속성 태그는 3D 렌더링 전용으로 쓰는 것이 많기 때문에, 2D 렌더링만 하시는 분들께서는 이들 속성 태그들은 신경쓰지 않으셔도 됩니다.
건물 일부가 여러 개 겹쳐 있을 때 선택하기 까다로운 경우가 있습니다. JOSM에서 Alt 키를 누른 상태에서 영역을 클릭하면 해당 자리에 중첩된 영역들을 돌아가며 택할 수 있어 편리합니다.[2]
건물 관계
건물 관계 (Building relations)는 말 그대로 건물의 관계를 설정하는 것으로, 건물의 일부가 건물 외곽을 벗어나는 형태 (지면과 맞닿는 범위를 넘어서는 상부 구조물 등)거나, 한 건물에 속한 일부가 굉장히 많은 복잡한 구조를 띄고 있을 때, type=building 관계를 써서 건물 외곽과 건물 일부의 전원을 한 데 묶을 수 있습니다. 그런 경우가 아니라면, 예컨대 우측 상단 그림의 예시처럼 건물 외곽에 건물 일부가 전부 들어가 있는 경우라면 type=building 관계를 사용해야 할 필요는 없습니다.
건물에 type=building 관계를 설정하면, 건물 일부는 전부 part 라는 역할로 관계 구성요소에 추가해야 합니다. 건물 외곽은 outline 이라는 역할로 추가해야 합니다. type=building 관계를 한번 설정한 이상, 건물 일부는 건물 외곽 내에서 내부, 외부, 교차, 접촉 등 그 어떤 방식으로든 위치시킬 수 있습니다.
type=building 관계를 따로 설정하지 않으면, 응용프로그램은 건물 외곽 내에 위치한 건물 일부를, 해당 건물의 일부로서 자체 인식하도록 되어 있습니다. 이말은 곧 건물 외곽 바깥에 위치한 건물 일부는 해당 건물의 일부로서 인식하지 못할 수도 있다는 이야기입니다.
3D 속성 태그
다음은 3D 속성을 나타내기 위한 태그로, 건물 윤곽선과 건물 일부 모두에서 사용할 수 있습니다.
높이와 층수
키 | 설명 |
---|---|
height=* | 건물 내에서 지면과 닿는 가장 낮은 층에서부터 건물 지붕 꼭대기 (단, 안테나, 첨탑, 기타 지붕에 설치된 장비는 제외)까지의 높이를 적습니다. |
min_height=* | 건물의 구조물이 지면에서 떠있는 경우, 그 구조물이 시작되는 높이를 적습니다. min_height 태그를 사용하더라도 height 태그는 여전히 지상에서부터 구조물 꼭대기까지의 높이로 적어야 한다는 점에 유의해 주세요. 예컨대 지면에서 10m 높이에 설치된 구름다리가 있고 그 구름다리의 높이가 3m라면, min_height=10, height=13 로 입력해야 합니다. |
building:levels=* | 건물의 지상 층수를 적습니다. 지붕층은 제외합니다. 이를 통해 건물의 텍스처를 층수에 맞춰 깔끔하게 정리해 줍니다.
새 건물을 생성하실 때에는 height 태그부터 입력해 주는 것이 좋습니다. building:levels=* 는 height 태그에 덧붙이는 식으로 사용해 보세요! |
building:min_level=* | min_height 태그와 마찬가지로 건물 일부분이 지면에 떠 있을 경우, 그 만큼의 층수를 건너뛰게 해 주는 태그입니다. |
지붕
지붕의 외형
건물의 지붕 형태는 roof:shape=* 키에 태그값을 입력하여 간단히 나타낼 수 있습니다. 그 유형은 아래와 같습니다.
형태 | ||||||||
---|---|---|---|---|---|---|---|---|
roof:shape | gabled | flat | hipped | pyramidal | skillion | half-hipped | hipped-and-gabled | butterfly |
형태 | ||||||
---|---|---|---|---|---|---|
roof:shape | round | gambrel | mansard | dome | onion | sawtooth |
형태 | |||||
---|---|---|---|---|---|
roof:shape | cone | crosspitched | side_hipped | side_half-hipped | gabled_height_moved |
그외에 자주 쓰이는 태그값
Value | 설명 |
---|---|
many | 한 건물에 여러 유형의 지붕이 올려져 있는 경우에 사용합니다. 지붕 모양이 다른 일부분을 각각 분리하여 building:part=*를 태그한 뒤 roof:shape 값을 따로따로 입력하는 경우에 해당됩니다. roof:shape=many 문서에서 자세한 내역을 확인할 수 있습니다. |
지붕 관련 태그
키 | 설명 |
---|---|
roof:orientation=along/across | 지붕의 용골 (지붕면이 만나는 중심축) 방향을 설정합니다. 보통은 건물의 긴 면을 평행하게 따르는 경우가 많지만 (roof:orientation=along), 그렇지 않은 경우도 있기에 이 태그로 설정합니다. |
roof:height=* | 지붕의 높이를 설정합니다. 참고로 건물의 꼭대기 높이를 설정하는 height=* 태그에서 roof:height=* 태그를 빼면 본 건물 (정면)의 높이가 됩니다. |
roof:angle=* | 지붕의 경사면 각도. roof:height=*를 대체하는 것으로 측면의 기울기값을 입력하여 높이를 대략적으로 표시할 수 있습니다. |
roof:levels=* | 지붕 내 층수. building:levels=*에서 사용할 수 없는 지붕층수 값은 이 태그로 쓰면 됩니다. |
roof:direction=* | 지붕의 후면에서 정면으로 이어지는 방향. 다시 말해 지붕의 주 면이 바라보는 방향을 말합니다. |
roof:material=* | 지붕의 최외층에 쓰인 재질. roof:colour=*과 함께 쓰면 유용합니다. |
roof:colour=* | 지붕의 (주요) 색상. roof:material=*과 함께 쓰면 유용합니다. |
표면 색상과 재질
키 | 설명 |
---|---|
building:colour=* | 건물 면의 색상. 입력값은 colour=* 문서를 참고해 주세요. |
roof:colour=* | 건물 지붕의 색상. 입력값은 colour=* 문서를 참고해 주세요. |
building:material=* | 건물 면의 외장재. |
roof:material=* | 건물 지붕의 외장재. |
3D 예제
특정 도시를 중심으로 한 대규모 3D 매핑을 보시려면 3D Demo Areas를 참조해 주세요.
개별 건물을 중심으로 한 3D 매핑을 보시려면 3D Building Examples를 참조해 주세요.
지원하는 소프트웨어
- 주요 문서: 3D development
현재 다양한 지도 서비스와 툴이 상술한 3D 건물 기본 규정을 지원하고 있습니다. OSM의 3D 건물 렌더링을 처음으로 구현한 사례로는 2009년 OSM-3D.org, 2011년 OSM2World와 JOSM 플러그인 Kendzi3D, 2012년 Nutiteq Android 3D Mapping SDK (현 Carto Mobile SDK)와 WikiMiniAtlas가 있었습니다. 2012년 OSMBuildings이 2.5D 시점을 지원한 데 이어 2015년 3D 시점을 구현하였으며, 2013년에는 웹 브라우저 기반의 렌더러 F4 Map이 출시되어 3D 건물 기본 규정을 완전히 지원하게 되었습니다.
편집 툴
소프트웨어 이름 | 지원 환경 | 규정 지원 | 저작권 | 참고 |
---|---|---|---|---|
Kendzi3d | 윈도우, 맥, 리눅스 | 예 | BSD | JOSM용 플러그인 |
SketchOSM | 윈도우 | 일부 지원 | Proprietary | SketchUp용 베타 플러그인, 2020년 7월 지원 중단 |
지도 서비스
서비스 이름 | 지원 환경 | 규정 지원 | 저작권 | 참고 |
---|---|---|---|---|
Streets GL | Web | 예 | MIT | |
OSM2World | Windows, Linux, Macintosh | 일부 지원 | LGPL | Currently implementing the remaining features for the 0.2.0 release - slippymap (Germany only) |
OSMBuildings | Web | 일부 지원 | BSD | |
F4 Map | Web | 예 | 독점 | Demo Web Map with rendering and scene support |
OSM go | Web | 일부 지원 | GPL | Only pyramidal and dome (yet, flat is default) |
Mapbox Static API | Web | 일부 지원 | BSD | Requires a free Mapbox Studio account. |
OpenScienceMap | Web | 일부 지원 | LGPL | Interprets only height/min_height tags client-side. The S3DB Layer uses vtm meshes generated on the server (using plpgsql with PostGIS and SFCGAL). Web map |
CartoType Maps App | Windows, Linux, Macintosh | 일부 지원 | 독점 /
이용제한 없음 |
A free demonstration application for the proprietary CartoType library. The CartoType GL version implements most roof shapes. Includes a style sheet editor. |
OSM-3D.org | Web | 일부 지원 | 현재 자바스크립트 옛 버전 (1.6 이하) 유저를 제외하면 사용 불가. WebGL 기반 버전이 개발 중에 있음. | |
OSG-Maps | Android | 일부 지원 | 독점 | |
osmapa.pl Mapnik stylesheet | Web | 일부 지원 | 대부분의 지붕을 2.5D 시점으로 제공 | |
WikiMiniAtlas | Web | 일부 지원 | GPL | 피라미드형 지붕만 지원 |
VR Map | Web | 일부 지원 | MPL | 건물 높이와 색상만 지원 |
Cesium OSM Buildings | Web | 매달 업데이트 |
지도 프레임워크
- 주요 문서: Frameworks
Software name | Platform | Language | Schema support | License | Notes |
---|---|---|---|---|---|
Carto Mobile SDK | Android, iOS, Windows Phone | Java, Objective-C++, Swift, C# | 일부 지원 | BSD | most roof shapes supported; see Carto's documentation |
CartoType for Android | Android | Java | 일부 지원 | Proprietary | Most roof shapes supported.Styles can be controlled using CartoType's XML style sheets. Uses OpenGL ES graphics acceleration. Viewing angle, height, field of view, etc., can be modified. |
CartoType for iOS | iOS | Objective C, Swift | |||
CartoType for C++ | Windows, Linux, OS X (Macintosh) | C++ | |||
CartoType for .NET | Windows | C#, VB.NET and other .NET languages | |||
CartoType for Qt | Qt on Windows, Mac (OS X) and Linux | C++ | |||
Mapbox GL JS | Web | JavaScript | 일부 지원 | BSD | Options for customizing 3D building display are included in the Mapbox Style Specification. (See Mapbox's blog post announcing GL JS support.) |
Mapbox Android SDK | Android | Java | |||
Mapbox iOS SDK | iOS | Objective-C, Swift, Interface Builder | |||
Mapbox macOS SDK | macOS | Objective-C, Swift, Interface Builder, AppleScript | |||
Mapbox Qt SDK | Qt | C++, QML | |||
Mapbox Unity SDK | Cross-platform | C# | Apache | ||
node-mapbox-gl-native | Node.js | JavaScript | BSD | ||
osm2x3d | Web | 일부 지원 | ? | see also [1] and [2] | |
OSMBuildings | Web | JavaScript | 일부 지원 | BSD | 2.5D and 3D versions available |
Tangram | Web | JavaScript | 일부 지원 | MIT | Mapzen renders 3D buildings in Tangram and other products |
Tangram ES | Android, iOS, Linux, macOS | C++ | |||
VTM | Android, iOS, Web | Java | 일부 지원 | LGPL | Part of the mapsforge project. |
디자인 툴
Software name | Platform | Schema support | License | Description |
---|---|---|---|---|
blender-osm | Windows, macOS, Linux | 일부 지원 | GPL | One click download and import of OpenStreetMap and terrain. Can import more than 100,000 buildings. A large number of roof shapes is supported: flat, gabled, hipped (for a quadrangle outline only), mono-pitched, half-hipped, round, pyramidal, gambrel, dome, onion and saltbox. |
Mapbox Studio | Web | 일부 지원 | Proprietary | Includes a Mapbox GL style editor that supports building (part) heights. |
Maputnik | Web | 일부 지원 | MIT | A Mapbox GL style editor that supports building (part) heights. |
Tangram Play | Web | 일부 지원 | MIT | A Tangram scene editor that supports extruded buildings with heights based on OSM data. |
용어
영어에서 쓰이는 지붕 관련 용어를 나타낸 자료입니다.
관련 제안
- F3DB (3D 건물 전면지원 방안 / 현재 폐기됨)
더 보기
- windows=* - 건물에 창문이 달렸는지를 나타내는 태그
각주
- ↑ 다만 F4 Map에서는 취급한다고 합니다. 출처: Non-building:part parts of buildings are not rendered #3, Streets GL GitHub, StrandedKitty comment, 3 May 2023
- ↑ blog.mapbox.com