Ko:간단한 3D 건물

From OpenStreetMap Wiki
Jump to navigation Jump to search

이 문서는 건물의 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 관계를 설정하면, 건물 일부는 전부 Role part 라는 역할로 관계 구성요소에 추가해야 합니다. 건물 외곽은 Role 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 Gabled.png Roof Flat.png Roof Hipped.png Roof Pyramidal.png Roof Skillion.png Roof Half Hipped.png Roof Hip and Gable.png Roof Butterfly.png
roof:shape gabled flat hipped pyramidal skillion half-hipped hipped-and-gabled butterfly
형태 Roof Round.png Roof Gambrel.png Roof Mansard.png Roof Dome.png Roof Onion.png Roof Sawtooth.png
roof:shape round gambrel mansard dome onion sawtooth
형태 Roof Cone.png Roof Crosspitched.png Roof Side Hipped.png Roof Side Half Hipped.png Roof Gabled Height Moved.png
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년 OSMBuildings2.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=* - 건물에 창문이 달렸는지를 나타내는 태그

각주

  1. 다만 F4 Map에서는 취급한다고 합니다. 출처: Non-building:part parts of buildings are not rendered #3, Streets GL GitHub, StrandedKitty comment, 3 May 2023
  2. blog.mapbox.com