3D 지도에서 선, 다각형, 모델, 마커와 같은 기능의 고도를 지정할 때 장면 내에서와 장면 렌더링이 해당 기능과 상호작용하는 방식에 모두 배치에 영향을 미칠 수 있는 여러 요인이 있습니다. 이 문서에서는 3D 지도에서 'AltitudeMode'를 사용하는 방법과 지형지물의 고도를 관리하는 방법을 설명합니다.
다양한 기능 유형과 함께 AltitudeMode
를 사용하는 방법은 다음과 같습니다.
마커: Marker3DElement, Marker3DInteractiveElement
위치에 고도와 돌출을 지정합니다.
모델: Model3DElement, Model3DInteractiveElement
모델의 앵커 포인트에 고도를 지정합니다. 이 고도는 장면에서 올바르게 배치하기 위해 방향과 함께 사용해야 합니다.
다중선: Polyline3DElement, Polyline3DInteractiveElement
폴리라인을 따라 고도를 위치 포인트에 적용하는 방법을 지정합니다.
다각형: Polygon3DElement, Polygon3DInteractiveElement
고도가 다각형을 따라 위치 포인트에 적용되는 방식을 지정합니다.
3D 환경에서 고도를 사용하는 방법
3D 장면 내에 포인트를 배치할 때 최종 위치는 캡처된 3D 건물이나 나무와 같은 객체의 영향을 받습니다. 두 가지 주요 개념을 이해하는 것이 중요합니다.
- 디지털 지형 모델 (DTM): '지표면' 고도를 나타냅니다. 건물, 나무 또는 기타 구조물이 없는 자연스러운 지형이라고 생각하면 됩니다. 모든 영역은 DTM을 기반으로 하며, 이는 EGM96을 사용하여 계산된 전 세계 고도의 기준이 됩니다.
- 디지털 표면 모델 (DSM): 건물, 나무, 기타 구조물을 포함한 '상단 표면' 고도를 나타냅니다. 기능이 포착된 지역 (특히 건물이 뷰를 지배하는 도시 환경)에서는 보이는 지표면이 기본 지형보다 높게 표시됩니다.
DTM과 DSM의 차이는 다양한 고도 모드가 이러한 디지털 고도 모델 (DEM)과 상호작용하는 방식을 이해하는 데 중요합니다. 지형 모델에 의해 기능의 배치가 가려지거나 영향을 받을 수 있기 때문입니다. 아래 다이어그램에서 차이점을 확인할 수 있습니다.
고도 데이터가 없는 기능
고도 측정이 없는 데이터가 있거나 경로 또는 장소 서비스와 같은 다른 Google 서비스의 데이터를 사용하는 경우 반환된 지오메트리에 고도가 제공되지 않는 경우가 많습니다. 이러한 경우 장면에서 기능을 배치하려면 AltitudeMode
를 신중하게 선택해야 합니다.
- 지면에 고정: 지형에 자동으로 맞춰지는 가장 간단한 접근 방식입니다. 이 모드는 DTM 모델을 사용합니다.
- 임의 고도 + 상대 모드 지정: 선택한 고도를 할당한 다음 RELATIVE_TO_GROUND (DTM 모델을 기준으로 지형지물을 배치) 또는 RELATIVE_TO_MESH (DSM 모델 위에 지형지물을 배치)를 사용할 수 있습니다.
- 다른 서비스를 사용하여 고도 가져오기: 피처 위치의 정확한 DTM 고도를 위해 Google Maps Platform Elevation API와 같은 서비스를 사용할 수 있습니다. 선 또는 다각형인 경우 선 또는 다각형을 구성하는 각 점에 대해 이 작업을 실행해야 합니다.
AltitudeMode
옵션의 의미와 사용 시기
기능을 정의할 때 지정할 수 있는 AltitudeMode
옵션은 네 가지가 있습니다.
ABSOLUTE
해발 10,000피트의 특정 고도에서 비행하는 비행기를 상상해 보세요. 산 위를 날든 계곡 위를 날든 높이는 일정합니다.
사용 방법: 객체 고도는 평균 해수면 (EGM96을 사용하여 계산)을 기준으로 표현됩니다. 기능의 고도 좌표는 평균 해수면 위의 정확한 고도로 해석됩니다.
사용 시기: 비행 경로, 정확한 깊이의 수중 물체, 고정된 과학 기기 등 정확한 고도가 알려진 기능에 사용합니다.
CLAMP_TO_GROUND
언덕에 바로 돗자리를 놓는다고 생각하면 됩니다. 언덕의 경사도에 관계없이 담요는 항상 보이는 표면에 평평하게 놓입니다.
사용 방법: 객체 고도는 지면에 직접 배치된 것으로 표현됩니다. 제공된 고도 값과 관계없이 지형을 따라 지상에 유지됩니다. 기능의 고도 좌표는 무시되며 지형 표면 (DTM)에 직접 투영됩니다.
사용 시기: 도로, 울타리, 트레일, 토지 경계, 건물 바닥 등 지형을 항상 준수해야 하는 기능에 사용합니다.
RELATIVE_TO_GROUND
자연 지면 고도 (DTM)가 무엇이든 그 위 100m에 머무는 열기구를 상상해 보세요. 지면이 올라가면 풍선도 함께 올라가 '맨땅'과의 100m 간격을 유지합니다.
사용 방법: 객체 고도는 지표면(DTM)을 기준으로 표현됩니다. 기능의 고도 좌표는 수평 위치의 지형 고도에서 오프셋으로 해석됩니다.
사용 시기: 자연 지형 위에서 일정한 높이를 유지해야 하는 객체(예: 통신 타워 또는 농촌 지역의 전선)
RELATIVE_TO_MESH
이는 드론이 맨땅, 건물 지붕, 나무 꼭대기 등 무엇이든 위를 날아다니는 것과 같습니다. 가장 높은 표시 표면 (DSM)에 맞게 조정됩니다.
사용 방법: 객체 고도는 지면+건물+수면 (DSM) 중 가장 높은 곳을 기준으로 표현됩니다. 기능의 고도 좌표는 DSM 고도로부터의 오프셋으로 해석됩니다.
사용 시기: 물리적으로 존재하는 모든 것 (DTM, 건물, 물) 위로 특정 높이만큼 떠 있어야 하는 객체에 사용합니다. 지붕의 마커나 표시되는 장면으로 동적으로 조정되는 기능에 유용합니다.
자세한 내용은 AltitudeMode 상수 문서를 참고하세요.
시각적 예시 및 실제 적용
이 예에서는 스톤헨지라는 특정 위치를 사용하여 다양한 AltitudeMode
옵션이 기능 배치에 미치는 영향을 보여줍니다. 이 예에서는 먼저 마커 위치 지정에 대해 설명한 다음, 몇 가지 다른 고려사항이 있는 선과 영역에 대해 설명합니다.
위치 마커
다음과 같이 배치된 핀 마커를 고려해 보세요.
const markerLocation = { lat: 51.1789, lng: -1.8262, altitude: 102.23 };
아래 장면에서 흰색 핀으로 표시됩니다.
이제 다양한 고도 모드를 사용하여 배치된 여러 색상의 핀을 보여주는 아래 이미지를 살펴보세요.
다양한 AltitudeMode
이 고도 오름차순으로 마커의 위치에 어떤 영향을 미치는지 살펴보겠습니다.
지면에 고정 (보라색 핀)
이 핀은 고도 값을 무시하고 가장 가까운 지상 고도에 연결됩니다. 흰색 핀 바로 아래에 표시되어 지형에 '고정'됩니다.
기술적으로 이 모드는 실제 고도를 무시하고 핀을 가장 가까운 DTM 높이에 고정합니다.
ABSOLUTE (흰색 핀)
이 핀은 정확한 고도 값 (102.23m)을 사용하여 마커를 해발 (EGM96) 높이에 배치하므로 제공된 고도에 따라 스톤헨지 돌 중 하나 위에 표시됩니다.
기술적으로 이 모드는 실제로 제공된 고도 값을 사용하여 지정된 해발 고도에 핀을 배치합니다. 이 예에서는 스톤헨지의 위치이지만 돌 중 하나의 꼭대기에 배치됩니다.
지면 기준 (주황색 핀)
이 핀은 지면 (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을 기준으로 하고 나열된 고도에 선 위치를 배치합니다.
메시 기준 (파란색 선)
이 선은 건물과 돌을 포함하는 표시된 표면을 기준으로 사용합니다. 그런 다음 각 점을 해당 메쉬 위의 지정된 고도에 배치하여 보이는 지형과 관련해 선의 모양을 효과적으로 복제합니다.
기술적으로 이 모드는 메쉬 (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로, 지면을 따라가는 것을 확인할 수 있습니다. 흰색은 절대적입니다. 공간에 절대적으로 배치된 점을 직선으로 연결하는 것을 확인할 수 있습니다. 주황색과 파란색은 표면 (DTM) 또는 메쉬 (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): 절대 고도 특성의 경우 실제 고도 값이 있는 포인트가 더 많아야 합니다. 기존 절대값 사이를 보간하면 메쉬 위의 값을 정확하게 반영하는 점이 나오지 않습니다. 점 A와 점 B 사이의 평균일 뿐이기 때문입니다.
요약
이 문서에서 포토리얼리스틱 3D 지도의 AltitudeMode
옵션에 대한 포괄적인 개요를 제공하여 ABSOLUTE, CLAMP_TO_GROUND, RELATIVE_TO_GROUND, RELATIVE_TO_MESH가 마커, 선, 다각형과 같은 다양한 기능의 배치와 렌더링에 미치는 영향을 자세히 설명해 드렸기를 바랍니다.
이러한 모드가 기본 디지털 지형 모델 (DTM) 및 디지털 표면 모델 (DSM)과 어떻게 작동하는지 이해하는 것은 시각적 아티팩트를 최소화하여 정확하고 시각적으로 매력적인 3D 지도 표현을 만드는 데 매우 중요합니다.
자체 프로젝트에서 이러한 고도 모드를 실험하여 3D 매핑의 잠재력을 최대한 활용하고 사용자에게 몰입도 높은 매력적인 경험을 제공하고 의견을 제공해 주시기 바랍니다.
참여자
맷 툰 | 솔루션 엔지니어, 지리 개발자