3D 지도에서 선, 다각형, 모델 또는 마커와 같은 지형지물의 고도를 지정할 때 장면 내에서 그리고 장면의 렌더링이 해당 지형지물과 상호작용하는 방식에서 지형지물의 배치에 영향을 줄 수 있는 여러 요인이 있습니다. 이 문서에서는 3D 지도에서 'AltitudeMode' 를 사용하는 방법과 지형지물의 고도를 관리하는 방법을 설명합니다.
다음은 여러 지형지물 유형에서 AltitudeMode 를 사용하는 방법입니다.
마커: Marker3DElement, Marker3DInteractiveElement
위치와 돌출에 고도를 지정합니다.
모델: Model3DElement, Model3DInteractiveElement
모델의 앵커 포인트에 고도를 지정합니다. 이 고도는 장면에서 올바르게 배치하기 위해 모델의 방향과 함께 사용해야 합니다.
다중선: Polyline3DElement, Polyline3DInteractiveElement
다중선을 따라 위치 포인트에 고도가 적용되는 방식을 지정합니다.
다각형: Polygon3DElement, Polygon3DInteractiveElement
다각형을 따라 위치 포인트에 고도가 적용되는 방식을 지정합니다.
3D 환경에서 고도를 사용하는 방법
3D 장면 내에 포인트를 배치할 때 최종 위치는 캡처된 3D 건물 또는 나무와 같은 객체의 존재에 영향을 받습니다. 두 가지 핵심 개념을 이해하는 것이 중요합니다.
- 디지털 지형 모델 (DTM): '지표면' 고도를 나타냅니다. 건물, 나무 또는 기타 구조물이 없는 지면의 자연스러운 모양이라고 생각하면 됩니다. 모든 영역은 지구의 고도 (EGM96)의 기초를 형성하는 DTM을 기반으로 합니다.
- 디지털 표면 모델 (DSM): 건물, 나무 및 기타 구조물을 포함한 "표면" 고도를 나타냅니다. 지형지물이 캡처된 영역 (특히 건물이 뷰를 지배하는 도시 환경)에서는 보이는 표면이 기본 지형보다 높게 표시됩니다.
DTM과 DSM의 차이는 다양한 고도 모드가 이러한 디지털 고도 모델 (DEM)과 상호작용하는 방식을 이해하는 데 매우 중요합니다. 지형지물의 배치가 표면 모델에 의해 가려지거나 영향을 받을 수 있기 때문입니다. 아래 다이어그램에서 차이점을 확인할 수 있습니다.

지형지물에 고도 데이터가 없는 경우
고도 측정값이 없는 데이터가 있거나 경로 또는 장소 서비스와 같은 다른 Google 서비스의 데이터를 사용하는 경우 반환된 지오메트리에 고도가 제공되지 않는 경우가 많습니다. 이러한 경우 장면에서 지형지물을 배치하려면 AltitudeMode를 신중하게 선택해야 합니다.
- 지면에 고정: 지형지물이 지형에 자동으로 맞춰지는 가장 간단한 접근 방식입니다. 이 모드는 DTM 모델을 사용합니다.
- 임의 고도 + 상대 모드 지정: 선택한 고도를 할당한 다음 RELATIVE_TO_GROUND (DTM 모델을 기준으로 지형지물을 배치함) 또는 RELATIVE_TO_MESH (DSM 모델 위에 지형지물을 부동시킴)를 사용할 수 있습니다.
- 다른 서비스를 사용하여 고도 가져오기: 지형지물의 위치에서 정확한 DTM 고도를 가져오려면 Google Maps Platform 고도 API와 같은 서비스를 사용하면 됩니다. 선 또는 다각형인 경우 선 또는 다각형을 구성하는 각 포인트에 대해 이 작업을 실행해야 합니다.
AltitudeMode 옵션의 의미와 사용 시점
지형지물을 정의할 때 지정할 수 있는 AltitudeMode 옵션은 4가지입니다.
ABSOLUTE
해발 10,000피트의 특정 고도에서 비행하는 비행기를 상상해 보세요. 산 위를 비행하든 계곡 위를 비행하든 높이는 고정되어 있습니다.
사용 방법: 객체 고도는 평균 해수면 (EGM96을 사용하여 계산됨)을 기준으로 표현됩니다. 지형지물의 고도 좌표는 평균 해수면 위의 정확한 고도로 해석됩니다.
사용 시점: 비행 경로, 정확한 깊이의 수중 객체 또는 고정 포인트 과학 기기와 같이 정확한 고도가 알려진 지형지물에 사용합니다.
CLAMP_TO_GROUND
언덕에 피크닉 담요를 직접 놓는다고 생각해 보세요. 언덕이 얼마나 가파르거나 평평하든 담요는 항상 보이는 표면에 평평하게 놓입니다.
사용 방법: 객체 고도는 지면에 직접 배치된 것으로 표현됩니다. 제공된 고도 값과 관계없이 지형을 따라 지면 수준에 유지됩니다. 지형지물의 고도 좌표는 무시되고 지형 표면 (DTM)에 직접 투영됩니다.
사용 시점: 도로, 울타리, 산책로, 부동산 경계 또는 건물 기초와 같이 항상 지형에 맞춰야 하는 지형지물에 사용합니다.
RELATIVE_TO_GROUND
자연 지면 고도 (DTM) 위 100미터에 머무는 열기구를 상상해 보세요. 지면이 올라가면 열기구도 함께 올라가 '지표면'에서 100미터 간격을 유지합니다.
사용 방법: 객체 고도는 지면 표면 (DTM)을 기준으로 표현됩니다. 지형지물의 고도 좌표는 수평 위치에서 지형 고도의 오프셋으로 해석됩니다.
사용 시점: 통신 타워 또는 농촌 지역의 가공선과 같이 자연 지형 위에서 일관된 높이를 유지해야 하는 객체에 사용합니다.
RELATIVE_TO_MESH
이 모드는 드론이 지면, 건물 지붕 또는 나무 꼭대기 등 비행하는 대상 위 에서 고정된 높이로 비행하는 것과 같습니다. 가장 높은 보이는 표면 (DSM)에 맞춰집니다.
사용 방법: 객체 고도는 지면+건물+수면 (DSM)의 가장 높은 지점을 기준으로 표현됩니다. 지형지물의 고도 좌표는 DSM 고도의 오프셋으로 해석됩니다.
사용 시점: 지붕의 마커 또는 보이는 장면에 동적으로 맞춰지는 지형지물에 유용한, 물리적으로 존재하는 모든 것 (DTM, 건물, 물) 위에서 특정 높이로 부동해야 하는 객체에 사용합니다.
자세한 내용은 AltitudeMode 상수 문서를 참고하세요.
시각적 예시 및 실제 적용
이러한 예에서는 특정 위치인 스톤헨지를 사용하여 다양한 AltitudeMode 옵션이 지형지물 배치에 미치는 영향을 보여줍니다. 이러한 예에서는 먼저 마커를 배치한 다음 몇 가지 다른 고려사항이 있는 선과 영역을 다룹니다.
마커 배치
다음과 같이 배치된 핀 마커를 생각해 보세요.
const markerLocation = { lat: 51.1789, lng: -1.8262, altitude: 102.23 };
아래 장면에서 흰색 핀으로 확인할 수 있습니다.

이제 아래 이미지를 살펴보세요. 다양한 고도 모드를 사용하여 배치된 다양한 색상의 핀이 표시됩니다.

다양한 AltitudeMode가 고도의 오름차순으로 마커의 배치에 미치는 영향을 살펴보겠습니다.
CLAMP_TO_GROUND (보라색 핀)
이 핀은 고도 값을 무시하고 가장 가까운 지면 고도에 연결됩니다. 흰색 핀 바로 아래에서 지형에 '고정'되는 것을 확인할 수 있습니다.
기술적으로 이 모드는 실제 고도를 무시하고 핀을 가장 가까운 DTM 높이에 고정합니다.
ABSOLUTE (흰색 핀)
이 핀은 정확한 고도 값 (102.23m)을 사용하여 해발 고도 (EGM96)에서 해당 높이에 마커를 배치합니다. 제공된 고도에 따라 스톤헨지 돌 중 하나 위에 표시됩니다.
기술적으로 이 모드는 실제 제공된 고도 값을 사용하여 해발 고도에서 지정된 높이에 핀을 배치합니다. 이 예에서는 스톤헨지의 위치이지만 돌 중 하나 위에 있습니다.
RELATIVE_TO_GROUND (주황색 핀)
이 핀은 지면 (DTM)을 기준으로 하고 해당 지면 수준 위 102.23m에 배치되어 헨지의 돌 아래에 있는 자연 지면 위에 부동하는 것처럼 보입니다.
기술적으로 이 모드는 지면의 실제 DTM 수준을 기준으로 설정한 다음 그 위에 핀을 102.23m에 배치합니다.
RELATIVE_TO_MESH (파란색 핀)
이 핀은 보이는 표면 (DSM)을 기준으로 하고 해당 표면 위 102.23m에 배치됩니다. 이 모드는 측정에 돌의 높이를 포함하여 주황색 핀보다 약간 높게 정렬합니다.
기술적으로 이 모드는 메시 (DSM)를 기준으로 사용하고 그 위에 지정된 고도에 위치를 배치합니다. DSM은 서 있는 돌의 맨 위에 있으므로 이 핀은 상대적 높이를 결정할 때 이 추가 높이를 측정에 포함하여 RELATIVE_TO_GROUND 핀보다 약간 높게 정렬합니다.
선 및 영역 배치
선과 영역의 경우 지형지물 내 포인트의 고도 (지정 여부와 관계없이)와 사용 중인 AltitudeMode 가 모두 중요합니다. 다음과 같이 지정된 고도로 스톤헨지를 따라 선을 살펴보겠습니다.
const lineCoords = [
{ lat: 51.1786, lng : -1.8266, altitude: 101.36 },
{ lat: 51.1787, lng : -1.8264, altitude: 101.18 },
{ lat: 51.178778, lng : -1.826354, altitude: 104.89 },
{ lat: 51.178815, lng : -1.826275, altitude: 107.55 },
{ lat: 51.178923, lng : -1.825980, altitude: 105.53 },
{ lat: 51.1791, lng : -1.8258, altitude: 100.29 },
{ lat: 51.1792, lng : -1.8257, altitude: 100.29 }
];
아래 이미지에서 이 선은 절대 위치 지정을 사용하여 흰색으로 표시됩니다.

아래 이미지에는 다양한 고도 모드를 사용하는 선이 다시 표시됩니다. 가장 낮은 것부터 가장 높은 것까지 하나씩 살펴보겠습니다.

CLAMP_TO_GROUND (보라색 선)
이 선은 각 포인트에 대해 지정된 고도를 무시하고 대신 기본 지면 (DTM) 위에 선을 직접 '덮습니다'. 지형을 따르며 위에 있는 건물이나 돌과 같은 지형지물의 존재를 무시합니다.
기술적으로 이 모드는 실제 고도 값을 무시하고 기본 지형을 따라 DTM 위에 선을 덮으며 그 위에 있는 지형지물의 메시를 무시합니다.
ABSOLUTE (흰색 선)
이 선은 각 포인트에 대해 정확한 고도를 사용하므로 선이 일부 돌 위로 지나갑니다. 각 포인트 사이에 직선으로 연결되어 있으므로 포인트가 충분히 자주 발생하지 않으면 객체를 통과하는 것처럼 보일 수 있습니다.
기술적으로 이 모드는 각 포인트에 대해 지정된 고도를 따르고 직선으로 연결합니다. 즉, 고도 값이 지정하는 경우 메시 (예: 돌)를 통과할 수 있습니다. 이 시나리오는 뒷부분에서 다룹니다.
RELATIVE_TO_GROUND (주황색 선)
이 선은 자연 지면 (DTM)을 기준으로 사용하고 각 포인트를 해당 지면 수준 위 지정된 고도에 배치합니다.
기술적으로 이 모드는 DTM을 기준으로 사용하고 그에 상대적인 나열된 고도에 선 위치를 배치합니다.
RELATIVE_TO_MESH (파란색 선)
이 선은 건물과 돌을 포함한 보이는 표면을 기준으로 사용합니다. 그런 다음 각 포인트를 해당 메시 위 지정된 고도에 배치하여 보이는 풍경과 관련하여 선의 모양을 효과적으로 복제합니다.
기술적으로 이 모드는 메시 (DSM)를 기준으로 사용하고 그 위에 지정된 고도에 위치를 배치합니다. 지면의 다양한 지형지물을 고려할 때 선이 메시를 변경할 수 있습니다.
를 설정하세요.선에 고도가 지정되지 않은 경우
이제 동일한 선 좌표를 고려하되 고도는 지정하지 않습니다.
const lineCoords = [
{ lat: 51.1786, lng : -1.8266 },
{ lat: 51.1787, lng : -1.8264 },
{ lat: 51.178778, lng : -1.826354 },
{ lat: 51.178815, lng : -1.826275 },
{ lat: 51.178923, lng : -1.825980 },
{ lat: 51.1791, lng : -1.8258 },
{ lat: 51.1792, lng : -1.8257 }
];
이 시나리오에서는 고도가 제공되지 않으므로 선이 비슷한 위치에 표시되는 경우가 많습니다. 흰색, 주황색, 보라색 선은 모두 기본적으로 비슷한 지면 수준 위치 지정을 사용하므로 단일 선 (일반적으로 마지막에 그려지는 주황색)으로 병합될 수 있습니다. 아래에서 확인할 수 있습니다.

파란색 선 (RELATIVE_TO_MESH)은 다시 메시 (DSM)를 기준으로 사용합니다. 고도가 지정되지 않았으므로 메시 위에 포인트를 직접 오버레이합니다. 선을 메시 위에 놓는 것이 아니라 메시의 지정된 포인트를 직선으로 연결한다는 점에 유의해야 합니다. 일부 예에서는 허용 가능한 것처럼 보일 수 있지만 다른 지형지물로 덮여 있으면 가시성 문제가 발생할 수 있습니다. 이 문제는 다음 섹션에서 다룹니다.
메시와 선의 상호작용. 이제 다른 다중선을 살펴보겠습니다. 이 이미지는 동일한 영역에 있지만 지면 범위가 더 넓습니다 (또는 DTM 위에 있는 DSM에 관한 세부정보가 더 많음).
const lineCoords = [
{ lat: 51.188404, lng: -1.779059, altitude: 70.69 },
{ lat: 51.187955, lng: -1.780143, altitude: 77.25 },
{ lat: 51.187658, lng: -1.781552, altitude: 68.97 },
{ lat: 51.187376, lng: -1.782447, altitude: 99.02 },
{ lat: 51.186912, lng: -1.783692, altitude: 104.35 },
{ lat: 51.185855, lng: -1.788368, altitude: 86.91 },
];
이전과 동일한 메서드 (및 색상)를 사용하여 표현을 보면 다음과 같은 뷰가 표시됩니다.

보라색은 CLAMP_TO_GROUND이며 지면을 따라가는 것을 확인할 수 있습니다. 흰색은 ABSOLUTE이며 공간에 절대적으로 배치된 포인트를 직선으로 연결하는 것을 확인할 수 있습니다. 주황색과 파란색은 SURFACE (DTM) 또는 MESH (DSM)에 관한 상대적 버전이므로 아래 지형지물의 높이로 인해 파란색 선의 모양이 약간 다릅니다.
다시 선 생성의 특성상 포인트가 직선으로 연결되어 있으므로 선이 메시를 통과한다는 점에 유의할 수 있습니다. 이 시나리오에서는 선을 보는 데 문제가 발생할 수 있으므로 drawsOccludedSegments 를 true 로 설정하여 다음 이미지에서 자세히 설명된 대로 선이 나무를 통해 보이도록 할 수 있습니다. 메시를 통과하는 선을 계속 볼 수 있습니다.

공간에서의 위치 지정의 특성상 포인트가 메시 내에 있을 수 있으며 포인트를 연결하는 선도 메시 내에 있을 수 있으므로 시각적 아티팩트가 발생할 수 있습니다. 아래 섹션에서는 가능한 경우 이러한 아티팩트를 개선하는 방법을 확인할 수 있습니다.
선과 지형 간의 상호작용 문제 해결
다른 예에서는 동일한 영역에서 특정 고도 모드를 사용할 때 주의해야 하는 다른 아티팩트를 확인할 수 있습니다.
여기에는 메시에서 위에 추가 세부정보가 제한된 DTM 수준에 주로 있는 비교적 평평한 영역이 있습니다. 이 시나리오는 지형 모델 위에 3D 범위가 없는 영역에서도 발생합니다. 아래에 지정된 대로 다음 위치를 살펴보겠습니다.
const lineCoords = [
{ lat: 51.194642, lng: -1.782636, altitude: 99.10 },
{ lat: 51.193974, lng: -1.783952, altitude: 99.86 },
{ lat: 51.192203, lng: -1.787175, altitude: 96.14 },
{ lat: 51.190024, lng: -1.790250, altitude: 105.92 },
{ lat: 51.187491, lng: -1.793580, altitude: 102.60 },
{ lat: 51.183690, lng: -1.798745, altitude: 95.69 },
];
이전과 동일한 색상 표현으로 선이 있는 이미지를 볼 수 있습니다(흰색: ABSOLUTE, 파란색: RELATIVE_TO_MESH, 보라색: CLAMP_TO_GROUND, 주황색: RELATIVE_TO_GROUND).

여기에는 여러 아티팩트가 있습니다. 첫 번째는 표면 덮개가 없기 때문에 주황색 (RELATIVE_TO_GROUND)과 파란색(RELATIVE_TO_MESH) 선이 (대부분) 동일한 위치에 있다는 것입니다 (파란색 선은 마지막에 그려지므로 표시됨).
또한 보라색 (CLAMP_TO_GROUND) 선은 지면을 따라가며 언덕에서 볼 수 있는 반면 흰색 (ABSOLUTE) 선은 포인트만 연결되고 직선이 지면을 통과하므로 언덕으로 사라지는 것처럼 보입니다.
보라색 선이 숨겨져 있는 경우 이 이미지에서 특히 확인할 수 있습니다.

따라서 포인트 간의 선이 직선 경로를 따르기만 하므로 선이 지면 아래 (또는 메시를 통과)에서 사라지는 것처럼 보이는 이상한 시각적 아티팩트가 발생할 수 있습니다. 보간법을 사용하여 선 사이에 포인트를 더 추가하여 이러한 선의 시각적 표시를 개선할 수 있습니다. 시각적 요소에 미치는 영향은 다시 사용 중인 메서드에 따라 달라집니다.
- 상대 측정 (RELATIVE_TO_GROUND 또는 RELATIVE_TO_MESH): 상대 고도 값을 사용하는 경우 선 또는 다각형을 따라 포인트를 더 많이 만들면 지형지물을 더 적절한 수준에 배치하여 고도 프로필에 더 잘 맞출 수 있습니다. 데이터에 이러한 중간 포인트가 없는 경우 Google Maps Platform Geometry 라이브러리의 Interpolate 함수와 같은 보간 함수를 사용하여 추가할 수 있습니다. 그런 다음 이러한 새 포인트에 관련 고도 프로필 위에 배치될 상대 값을 지정할 수 있으며 포인트를 연결하는 선의 길이가 제한되고 시각적 표현이 개선됩니다.
- 절대 지형지물 (ABSOLUTE): ABSOLUTE 지형지물의 경우 더 많은 포인트 에 실제 고도 값이 있어야 합니다. 기존 절대 값 사이를 보간해도 메시 위의 값을 정확하게 반영하는 포인트가 제공되지 않습니다. 포인트 A와 포인트 B의 평균일 뿐이기 때문입니다.
요약
이 문서에서는 실사 3D 지도의 AltitudeMode 옵션에 관한 포괄적인 개요를 제공하고 ABSOLUTE, CLAMP_TO_GROUND, RELATIVE_TO_GROUND, RELATIVE_TO_MESH가 마커, 선, 다각형과 같은 다양한 지형지물의 배치 및 렌더링에 미치는 영향을 자세히 설명했습니다.
이러한 모드가 기본 디지털 지형 모델 (DTM) 및 디지털 표면 모델 (DSM)과 함께 작동하는 방식을 이해하는 것은 시각적 아티팩트를 최소화하면서 정확하고 시각적으로 매력적인 3D 지도 표현을 만드는 데 매우 중요합니다.
자체 프로젝트에서 이러한 고도 모드를 실험하여 3D 지도 제작의 잠재력을 최대한 활용하고 사용자를 위한 몰입도 높은 경험을 만들고 의견을 제공해 주시기 바랍니다.
참여자
Matt Toon | 솔루션 엔지니어, Geo 개발자