Khi bạn chỉ định độ cao cho các đối tượng trên bản đồ 3D (chẳng hạn như đường, đa giác, mô hình hoặc điểm đánh dấu), có một số yếu tố có thể ảnh hưởng đến vị trí của các đối tượng đó, cả trong cảnh và cách kết xuất cảnh tương tác với đối tượng đó. Tài liệu này trình bày cách sử dụng "AltitudeMode" trên bản đồ 3D và cách quản lý độ cao cho các đối tượng.
Sau đây là cách bạn có thể sử dụng AltitudeMode với một số loại tính năng:
Điểm đánh dấu: Marker3DElement, Marker3DInteractiveElement
Chỉ định cao độ trên vị trí và cả độ nhô ra.
Mô hình: Model3DElement, Model3DInteractiveElement
Chỉ định độ cao trên điểm neo của mô hình. Điểm neo này phải được sử dụng cùng với hướng của mô hình để định vị chính xác trong cảnh.
Đường đa tuyến: Polyline3DElement, Polyline3DInteractiveElement
Chỉ định cách áp dụng độ cao cho các điểm vị trí dọc theo một hình nhiều đường.
Đa giác: Polygon3DElement, Polygon3DInteractiveElement
Chỉ định cách áp dụng độ cao để định vị các điểm dọc theo đa giác.
Cách sử dụng Cao độ trong Môi trường 3D
Khi bạn đặt các điểm trong cảnh 3D, vị trí cuối cùng của các điểm đó sẽ chịu ảnh hưởng của sự hiện diện của các toà nhà hoặc đối tượng 3D được chụp, chẳng hạn như cây cối. Bạn cần phải hiểu rõ hai khái niệm chính:
- Mô hình địa hình kỹ thuật số (DTM): Mô hình này thể hiện độ cao của "địa hình trống". Hãy coi đó là hình dạng tự nhiên của vùng đất mà không có bất kỳ toà nhà, cây cối hoặc công trình kiến trúc nào khác ở trên. Tất cả các khu vực đều được hỗ trợ bởi DTM, tạo thành cơ sở cho độ cao của địa cầu (được tính bằng EGM96).
- Mô hình bề mặt kỹ thuật số (DSM): Mô hình này thể hiện độ cao của "bề mặt trên cùng", bao gồm cả các toà nhà, cây cối và các cấu trúc khác. Ở những khu vực đã chụp được các đối tượng (đặc biệt là môi trường đô thị nơi các toà nhà chiếm ưu thế), bề mặt nhìn thấy được sẽ cao hơn địa hình cơ sở.
Sự khác biệt giữa DTM và DSM là rất quan trọng để hiểu cách các chế độ độ cao khác nhau tương tác với các Mô hình độ cao kỹ thuật số (DEM) này, vì vị trí của các đối tượng có thể bị che khuất hoặc chịu ảnh hưởng của mô hình bề mặt. Bạn có thể thấy sự khác biệt trong sơ đồ dưới đây:

Khi các đối tượng thiếu dữ liệu về độ cao
Nếu bạn có dữ liệu thiếu thông tin đo lường độ cao hoặc khi sử dụng dữ liệu từ một dịch vụ khác của Google (chẳng hạn như dịch vụ Routes hoặc Places), thì bạn thường sẽ không có thông tin về độ cao trong hình học được trả về. Trong những trường hợp như vậy, việc đặt tính năng này vào cảnh đòi hỏi bạn phải chọn AltitudeMode một cách cẩn thận:
- Gắn chặt vào mặt đất: Cách tiếp cận đơn giản nhất, trong đó đối tượng địa lý sẽ tự động điều chỉnh theo địa hình. Chế độ này sử dụng mô hình DTM.
- Cung cấp cho đối tượng một độ cao tuỳ ý + chế độ tương đối: Bạn có thể chỉ định một độ cao đã chọn, sau đó sử dụng RELATIVE_TO_GROUND (đặt các đối tượng tương ứng với mô hình DTM) hoặc RELATIVE_TO_MESH (đặt các đối tượng lơ lửng phía trên mô hình DSM).
- Sử dụng một dịch vụ khác để lấy độ cao: Để có được độ cao DTM chính xác tại vị trí của đối tượng, bạn có thể sử dụng một dịch vụ như Elevation API của Google Maps Platform. Nếu đó là một đường kẻ hoặc đa giác, bạn cần thực hiện việc này cho từng điểm tạo nên đường kẻ hoặc đa giác đó.
Ý nghĩa của các lựa chọn AltitudeMode và thời điểm sử dụng?
Có 4 tuỳ chọn AltitudeMode mà bạn có thể chỉ định khi xác định một tính năng:
TUYỆT ĐỐI
Hãy tưởng tượng một chiếc máy bay đang bay ở một độ cao cụ thể so với mực nước biển, chẳng hạn như 10.000 bộ. Độ cao của máy bay là cố định, bất kể máy bay đang bay qua núi hay thung lũng.
Cách sử dụng: Độ cao của đối tượng được thể hiện tương ứng với mực nước biển trung bình (được tính bằng EGM96). Toạ độ độ cao của đối tượng được diễn giải là độ cao chính xác so với mực nước biển trung bình.
Trường hợp sử dụng: Đối với các đối tượng có độ cao chính xác và đã biết, chẳng hạn như đường bay, đối tượng chìm có độ sâu chính xác hoặc thiết bị khoa học điểm cố định.
CLAMP_TO_GROUND
Hãy tưởng tượng bạn đang trải một tấm thảm dã ngoại ngay trên sườn đồi. Dù đồi dốc hay phẳng, tấm chăn luôn nằm phẳng trên bề mặt nhìn thấy được.
Cách sử dụng: Độ cao của đối tượng được biểu thị dưới dạng đặt trực tiếp trên mặt đất. Các điểm đánh dấu này sẽ vẫn ở mặt đất, theo địa hình, bất kể giá trị độ cao được cung cấp. Toạ độ độ cao của đối tượng bị bỏ qua; đối tượng này được chiếu trực tiếp lên bề mặt địa hình (DTM).
Trường hợp nên sử dụng: Đối với các đối tượng luôn phải phù hợp với địa hình, chẳng hạn như đường, hàng rào, đường mòn, ranh giới bất động sản hoặc chân toà nhà.
RELATIVE_TO_GROUND
Hãy tưởng tượng một khinh khí cầu luôn ở độ cao 100 mét so với độ cao tự nhiên của mặt đất (DTM) bên dưới nó. Nếu mặt đất dâng lên, khinh khí cầu cũng sẽ bay lên theo, duy trì khoảng cách 100 mét so với "mặt đất trống".
Cách sử dụng: Độ cao của đối tượng được biểu thị tương ứng với bề mặt mặt đất (DTM). Toạ độ độ cao của đối tượng được diễn giải là độ lệch so với độ cao của địa hình tại vị trí nằm ngang của đối tượng.
Trường hợp sử dụng: Đối với các đối tượng cần duy trì chiều cao nhất quán so với địa hình tự nhiên, chẳng hạn như tháp truyền thông hoặc đường dây trên không ở khu vực nông thôn.
RELATIVE_TO_MESH
Chế độ này giống như một máy bay không người lái bay ở độ cao cố định phía trên bất cứ thứ gì mà nó bay qua, cho dù đó là mặt đất trống, mái nhà hay ngọn cây. Nó điều chỉnh theo bề mặt hiển thị cao nhất (DSM).
Cách sử dụng: Độ cao của đối tượng được biểu thị tương ứng với điểm cao nhất của mặt đất + toà nhà + mặt nước (DSM). Toạ độ độ cao của đối tượng được diễn giải là độ lệch so với độ cao DSM.
Trường hợp sử dụng: Đối với các đối tượng cần nổi ở một độ cao nhất định so với bất kỳ đối tượng nào có trên thực tế (DTM, toà nhà, nước), hữu ích cho các điểm đánh dấu trên mái nhà hoặc các đối tượng tự động điều chỉnh theo cảnh hiển thị.
Để biết thêm thông tin, hãy xem tài liệu về hằng số AltitudeMode.
Ví dụ trực quan và ứng dụng thực tế
Các ví dụ này sử dụng một vị trí cụ thể là Stonehenge để minh hoạ cách các tuỳ chọn AltitudeMode khác nhau ảnh hưởng đến vị trí của đối tượng. Những ví dụ này trước tiên đề cập đến việc định vị điểm đánh dấu, sau đó là đường và khu vực, có một vài điểm cần cân nhắc khác.
Điểm đánh dấu vị trí
Hãy xem xét một điểm đánh dấu ghim được đặt như sau:
const markerLocation = { lat: 51.1789, lng: -1.8262, altitude: 102.23 };
Bạn có thể thấy ghim màu trắng trong cảnh dưới đây:

Bây giờ, hãy xem hình ảnh bên dưới cho thấy các ghim có nhiều màu sắc được đặt bằng cách sử dụng các chế độ độ cao khác nhau.

Hãy xem cách các AltitudeMode khác nhau ảnh hưởng đến vị trí của điểm đánh dấu theo thứ tự độ cao tăng dần.
CLAMP_TO_GROUND (Ghim màu tím)
Ghim này bỏ qua giá trị độ cao và tự gắn vào độ cao mặt đất gần nhất. Bạn có thể thấy nó ngay bên dưới ghim màu trắng, "gắn" vào địa hình một cách hiệu quả.
Về mặt kỹ thuật, chế độ này bỏ qua độ cao thực tế và ghim điểm đánh dấu vào độ cao DTM gần nhất.
ABSOLUTE (Ghim trắng)
Ghim này sử dụng giá trị độ cao chính xác (102,23 m) để đặt điểm đánh dấu ở độ cao đó so với mực nước biển (EGM96), xuất hiện trên đỉnh của một trong những tảng đá Stonehenge theo độ cao được cung cấp.
Về mặt kỹ thuật, chế độ này sử dụng giá trị độ cao thực tế được cung cấp để đặt ghim ở độ cao được chỉ định so với mực nước biển, trong ví dụ này là vị trí của Stonehenge, nhưng ở trên đỉnh của một trong những tảng đá.
RELATIVE_TO_GROUND (Ghim màu cam)
Ghim này lấy mặt đất (DTM) làm cơ sở và đặt chính nó cao hơn 102,23m so với mặt đất đó, có vẻ như lơ lửng trên mặt đất tự nhiên nằm dưới tảng đá trong henge.
Về mặt kỹ thuật, chế độ này đặt cơ sở của nó ở mức DTM thực tế trên mặt đất, sau đó đặt ghim ở độ cao 102,23m so với mặt đất.
RELATIVE_TO_MESH (Ghim màu xanh dương)
Ghim này sử dụng bề mặt hiển thị (DSM) làm cơ sở và đặt chính nó cao hơn bề mặt đó 102,23 m. Chế độ này bao gồm cả chiều cao của hòn đá trong kết quả đo, nên điểm đo sẽ cao hơn một chút so với ghim màu cam.
Về mặt kỹ thuật, chế độ này sử dụng lưới (DSM) làm cơ sở và đặt vị trí ở độ cao đã cho phía trên lưới đó. Vì DSM nằm ở đầu của tảng đá đứng, nên ghim này bao gồm cả chiều cao tăng thêm này trong phép đo khi xác định chiều cao tương đối của nó, căn chỉnh nó cao hơn một chút so với ghim RELATIVE_TO_GROUND.
Đường và vùng vị trí
Đối với đường và vùng, cả độ cao của các điểm trong đối tượng (cho dù được chỉ định hay không) và AltitudeMode đang được sử dụng đều rất quan trọng. Hãy xem xét một đường dọc theo Stonehenge có các độ cao được chỉ định sau:
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 }
];
Bạn có thể thấy đường này được biểu thị bằng màu trắng trong hình ảnh bên dưới, sử dụng vị trí tuyệt đối.

Một lần nữa, hình ảnh bên dưới cho thấy các đường sử dụng các chế độ độ cao khác nhau. Hãy cùng thảo luận về từng cấp độ, từ thấp nhất đến cao nhất.

CLAMP_TO_GROUND (Đường màu tím)
Đường này bỏ qua độ cao được chỉ định cho mỗi điểm và thay vào đó "phủ" đường này trực tiếp lên mặt đất bên dưới (DTM). Nó đi theo địa hình, bỏ qua sự hiện diện của bất kỳ đối tượng nào như toà nhà hoặc đá phía trên nó.
Về mặt kỹ thuật, chế độ này bỏ qua các giá trị độ cao thực tế và phủ đường lên DTM, theo địa hình bên dưới và bỏ qua lưới các đối tượng phía trên nó.
ABSOLUTE (White Line)
Đường này sử dụng độ cao chính xác cho mỗi điểm, khiến đường này đi qua một số hòn đá. Đường này được nối bằng các đường thẳng giữa mỗi điểm, đôi khi có thể khiến đường này có vẻ như đi qua các đối tượng nếu các điểm không đủ thường xuyên.
Về mặt kỹ thuật, chế độ này tuân theo độ cao được chỉ định cho mỗi điểm, kết nối các điểm bằng đường thẳng, nghĩa là chế độ này có thể đi qua lưới (ví dụ: đá) nếu giá trị độ cao cho phép. Trường hợp này sẽ được đề cập trong phần sau.
RELATIVE_TO_GROUND (Đường màu cam)
Đường này sử dụng mặt đất tự nhiên (DTM) làm cơ sở và đặt mỗi điểm ở độ cao được chỉ định so với mặt đất đó.
Về mặt kỹ thuật, chế độ này sử dụng DTM làm cơ sở và đặt các vị trí đường ở độ cao được liệt kê so với DTM.
RELATIVE_TO_MESH (Đường màu xanh dương)
Đường này sử dụng bề mặt nhìn thấy được, bao gồm cả các toà nhà và đá, làm cơ sở. Sau đó, công cụ này sẽ đặt từng điểm ở độ cao được chỉ định phía trên lưới đó, tái tạo hiệu quả hình dạng của đường liên quan đến cảnh quan có thể nhìn thấy.
Về mặt kỹ thuật, chế độ này sử dụng lưới (DSM) làm cơ sở và đặt các vị trí ở độ cao được chỉ định phía trên lưới đó. Tuỳ thuộc vào lưới, đường này có thể thay đổi tuỳ theo các đặc điểm khác nhau trên mặt đất.
Khi không chỉ định độ cao cho đường
Bây giờ, hãy xem xét cùng một toạ độ đường nhưng không chỉ định độ cao:
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 }
];
Trong trường hợp này, khi không có độ cao, các đường thường xuất hiện ở những vị trí tương tự. Các đường màu trắng, cam và tím có thể hợp nhất thành một đường duy nhất (màu cam, vì thường được vẽ sau cùng) vì tất cả đều mặc định ở vị trí tương tự trên mặt đất. Bạn có thể thấy điều này dưới đây:

Đường màu xanh dương (RELATIVE_TO_MESH) cũng sử dụng lưới (DSM) làm cơ sở. Vì không có độ cao nào được chỉ định, nên nó chỉ phủ các điểm ngay trên đầu lưới. Điều quan trọng cần lưu ý là công cụ này không đặt đường thẳng trên lưới mà kết nối các điểm đã chỉ định trên lưới bằng các đường thẳng. Mặc dù điều này có thể chấp nhận được trong một số ví dụ, nhưng có thể gây ra vấn đề về chế độ hiển thị khi bị các tính năng khác che khuất. Vấn đề này được đề cập trong phần tiếp theo.
Sự tương tác giữa lưới và đường kẻ. Bây giờ, chúng ta có thể xem xét một hình nhiều đường khác. Hình ảnh này nằm trong cùng một khu vực nhưng có phạm vi bao phủ mặt đất rộng hơn (hoặc chi tiết hơn về DSM trên DTM).
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 },
];
Khi xem hình minh hoạ bằng cùng một phương thức (và màu sắc) như trước, chúng ta sẽ thấy chế độ xem này:

Màu tím là CLAMP_TO_GROUND, bạn có thể thấy màu này dọc theo mặt đất. Màu trắng là TUYỆT ĐỐI, bạn có thể thấy các đường thẳng nối các điểm được định vị tuyệt đối trong không gian. Với màu cam và màu xanh dương là các phiên bản tương đối về BỀ MẶT (DTM) hoặc LƯỚI (DSM), hãy lưu ý rằng đường màu xanh dương có hình dạng hơi khác do chiều cao của các đối tượng bên dưới.
Một lần nữa, chúng ta có thể lưu ý rằng bản chất của việc tạo đường thẳng có nghĩa là đường thẳng đi qua lưới khi các điểm được nối với nhau bằng các đường thẳng. Trường hợp này có thể gây ra vấn đề khi xem các đường, vì vậy, bạn có thể đặt drawsOccludedSegments thành true để đảm bảo đường này hiển thị qua cây, như minh hoạ chi tiết hơn trong hình ảnh sau, nơi vẫn có thể nhìn thấy các đường đi qua lưới.

Bản chất của việc định vị trong không gian có nghĩa là các điểm có thể nằm trong lưới và các đường nối các điểm cũng có thể nằm trong lưới, có khả năng gây ra các cấu phần phần mềm trực quan. Trong phần bên dưới, chúng ta có thể xem cách cải thiện các cấu phần phần mềm đó (nếu có thể).
Giải quyết các vấn đề về sự tương tác giữa đường và địa hình
Trong một ví dụ khác, ở cùng một khu vực, chúng ta có thể thấy một số cấu phần phần mềm khác mà chúng ta phải lưu ý khi sử dụng các chế độ độ cao cụ thể.
Ở đây, chúng ta có một khu vực tương đối bằng phẳng, chủ yếu ở cấp độ DTM, với các chi tiết bổ sung hạn chế phía trên trong lưới. Trường hợp này cũng sẽ xảy ra ở một khu vực không có phạm vi bao phủ 3D phía trên mô hình địa hình. Hãy xem xét vị trí sau đây, như được chỉ định bên dưới:
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 },
];
Và có thể thấy trong hình, với các đường có cùng màu đại diện như trước: (trắng : ABSOLUTE, xanh dương : RELATIVE_TO_MESH, tím : CLAMP_TO_GROUND, cam: RELATIVE_TO_GROUND).

Tại đây, chúng ta có thể thấy một số cấu phần phần mềm, trong đó cấu phần đầu tiên là do thiếu lớp phủ bề mặt, đường màu cam (RELATIVE_TO_GROUND) và đường màu xanh dương (RELATIVE_TO_MESH) nằm ở (hầu hết) cùng một vị trí (với đường màu xanh dương được hiển thị vì được vẽ sau cùng).
Chúng ta cũng có thể thấy rằng đường màu tím (CLAMP_TO_GROUND) bám theo mặt đất và có thể nhìn thấy trên đồi, trong khi đường màu trắng (ABSOLUTE) có thể được xem là biến mất vào đồi vì chỉ có các điểm được kết nối và các đường thẳng đi qua mặt đất.
Bạn có thể thấy rõ điều này trong hình ảnh này khi đường màu tím bị ẩn.

Do đó, điều này có thể dẫn đến một số cấu phần phần mềm hình ảnh lạ, trong đó đường này có thể biến mất dưới mặt đất (hoặc thậm chí thông qua lưới) vì đường giữa các điểm chỉ đi theo một đường thẳng. Bạn có thể cải thiện hình ảnh hiển thị của một đường như vậy bằng cách thêm nhiều điểm hơn giữa các đường thông qua việc sử dụng phương thức nội suy, cách điều này có thể ảnh hưởng đến hình ảnh sẽ một lần nữa phụ thuộc vào phương thức đang được sử dụng:
- Đối với các phép đo tương đối (RELATIVE_TO_GROUND hoặc RELATIVE_TO_MESH): Khi sử dụng các giá trị độ cao tương đối, việc tạo thêm điểm dọc theo một đường hoặc đa giác sẽ cho phép đặt đối tượng ở mức phù hợp hơn, phù hợp hơn với cấu hình độ cao. Nếu những điểm trung gian này không có trong dữ liệu của bạn, thì bạn có thể sử dụng hàm nội suy, chẳng hạn như hàm Nội suy trong thư viện Hình học của Google Maps Platform để thêm các điểm đó. Sau đó, những điểm mới này có thể được cung cấp các giá trị tương đối sẽ được đặt phía trên cấu hình độ cao có liên quan và sau đó độ dài của bất kỳ đường nào nối các điểm sẽ bị giới hạn và biểu diễn trực quan được cải thiện.
- Đối với các đối tượng có độ cao tuyệt đối (ABSOLUTE): Đối với các đối tượng có độ cao tuyệt đối, bạn cần có nhiều điểm hơn để có giá trị độ cao thực tế. Việc nội suy giữa các giá trị tuyệt đối hiện có sẽ không cho ra một điểm phản ánh chính xác bất kỳ giá trị nào phía trên lưới, vì điểm đó chỉ là giá trị trung bình giữa điểm A và điểm B.
Tóm tắt
Hy vọng tài liệu này đã cung cấp cho bạn thông tin tổng quan toàn diện về các tuỳ chọn AltitudeMode trong Bản đồ 3D chân thực, trình bày chi tiết cách ABSOLUTE, CLAMP_TO_GROUND, RELATIVE_TO_GROUND và RELATIVE_TO_MESH ảnh hưởng đến vị trí và việc kết xuất nhiều đối tượng như điểm đánh dấu, đường và đa giác.
Để tạo ra các bản đồ 3D chính xác và hấp dẫn về mặt hình ảnh với ít cấu phần phần mềm hình ảnh nhất, bạn cần hiểu rõ cách các chế độ này hoạt động cùng với Mô hình địa hình kỹ thuật số (DTM) và Mô hình bề mặt kỹ thuật số (DSM) cơ bản.
Chúng tôi hy vọng bạn sẽ thử nghiệm các chế độ độ cao này trong các dự án của riêng mình để khai thác toàn bộ tiềm năng của bản đồ 3D, tạo ra trải nghiệm hấp dẫn, sống động cho người dùng và đưa ra ý kiến phản hồi.
Người đóng góp
Matt Toon | Kỹ sư giải pháp, Nhà phát triển Geo