Cuando especificas la altitud de los componentes en un mapa 3D, como líneas, polígonos, modelos o marcadores, hay varios factores que pueden afectar su ubicación, tanto dentro de la escena como en la forma en que la renderización de la escena interactúa con ese componente. En este documento, se aborda el uso de "AltitudeMode" en un mapa 3D y cómo administrar la altitud de los componentes.
A continuación, se indica cómo puedes usar AltitudeMode con varios tipos de componentes:
Marcadores: Marker3DElement, Marker3DInteractiveElement
Especifica una altitud en la ubicación y también la extrusión.
Modelos: Model3DElement, Model3DInteractiveElement
Especifica una altitud en el punto de anclaje del modelo, que se debe usar con su orientación para un posicionamiento adecuado en la escena.
Polilíneas: Polyline3DElement, Polyline3DInteractiveElement
Especifica cómo se aplica la altitud para posicionar puntos a lo largo de una polilínea.
Polígonos: Polygon3DElement, Polygon3DInteractiveElement
Especifica cómo se aplica la altitud para posicionar puntos a lo largo de un polígono.
Cómo se usa la altitud en entornos 3D
Cuando se colocan puntos dentro de una escena 3D, su posición final se ve afectada por la presencia de edificios o componentes 3D capturados, como árboles. Es fundamental comprender dos conceptos clave:
- Modelo digital del terreno (DTM): Representa la elevación de la "tierra desnuda" . Piensa en él como la forma natural del terreno sin edificios, árboles ni otras estructuras en la parte superior. Todas las áreas se basan en el DTM, que forma la base de la elevación del globo (calculada con EGM96).
- Modelo digital de superficie (DSM): Representa la elevación de la "superficie superior" , incluidos edificios, árboles y otras estructuras. En las áreas donde se capturaron componentes (en particular, los entornos urbanos donde los edificios dominan la vista), la superficie visible aparecerá más alta que el terreno base.
La distinción entre DTM y DSM es fundamental para comprender cómo los diferentes modos de altitud interactúan con estos modelos digitales de elevación (DEM), ya que la ubicación de los componentes puede estar oculta o influenciada por el modelo de superficie. Puedes ver las diferencias en el siguiente diagrama:

Cuando los componentes carecen de datos de altitud
Si tienes datos que carecen de una medición de altitud o cuando usas datos de otro servicio de Google, como los servicios de Routes o Places, a menudo no tendrás ninguna altitud proporcionada en la geometría que se muestra. En esos casos, para colocar el componente en la escena, debes elegir un AltitudeMode con cuidado:
- Ajustarlo al terreno: Es el enfoque más simple, en el que el componente se ajustará automáticamente al terreno. Este modo usa el modelo DTM.
- Asignarle una altitud arbitraria + modo relativo: Puedes asignar una altitud elegida y, luego, usar RELATIVE_TO_GROUND (que coloca los componentes en relación con el modelo DTM) o RELATIVE_TO_MESH (que los hace flotar sobre el modelo DSM).
- Usar otro servicio para obtener la altitud: Para obtener una altitud DTM precisa en la ubicación del componente, puedes usar un servicio como la API de Elevation de Google Maps Platform . Si se trata de una línea o un polígono, deberás hacerlo para cada uno de los puntos que componen la línea o el polígono.
¿Qué significan las opciones de AltitudeMode y cuándo usarlas?
Existen cuatro opciones de AltitudeMode que puedes especificar cuando defines un componente:
ABSOLUTE
Imagina un avión que vuela a una altitud específica sobre el nivel del mar, por ejemplo, 3,000 metros. Su altura es fija, sin importar si vuela sobre una montaña o un valle.
Cómo usarlo: La altitud del objeto se expresa en relación con el nivel medio del mar promedio (calculado con EGM96). La coordenada de altitud del componente se interpreta como una elevación precisa sobre el nivel medio del mar.
Cuándo usarlo: Para componentes con altitudes conocidas y precisas, como rutas de vuelo , objetos sumergidos con profundidad exacta o instrumentos científicos de punto fijo.
CLAMP_TO_GROUND
Imagina que colocas una manta de pícnic directamente en una ladera. Sin importar qué tan empinada o plana sea la colina, la manta siempre estará plana sobre la superficie visible.
Cómo usarlo: La altitud del objeto se expresa como colocada directamente en el terreno. Permanecerán a nivel del suelo, siguiendo el terreno, independientemente del valor de altitud proporcionado. Se ignora la coordenada de altitud del componente; se proyecta directamente sobre la superficie del terreno (DTM).
Cuándo usarlo: Para componentes que siempre deben ajustarse al terreno, como rutas, cercas, senderos, límites de propiedad o la base de los edificios.
RELATIVE_TO_GROUND
Imagina un globo aerostático que permanece a 100 metros por encima de la elevación natural del terreno (DTM) que se encuentra debajo. Si el terreno sube, el globo sube con él y mantiene esa brecha de 100 metros desde la "tierra desnuda".
Cómo usarlo: La altitud del objeto se expresa en relación con la superficie del terreno (DTM). La coordenada de altitud del componente se interpreta como un desplazamiento de la elevación del terreno en su posición horizontal.
Cuándo usarlo: Para objetos que deben mantener una altura constante sobre el terreno natural, como torres de comunicación o líneas aéreas en áreas rurales
RELATIVE_TO_MESH
Es como un dron que vuela a una altura fija por encima de lo que sea que esté volando, ya sea el terreno desnudo, el techo de un edificio o la parte superior de un árbol. Se ajusta a la superficie visible más alta (DSM).
Cómo usarlo: La altitud del objeto se expresa en relación con la más alta de la superficie del terreno, el edificio y el agua (DSM). La coordenada de altitud del componente se interpreta como un desplazamiento de la elevación del DSM.
Cuándo usarlo: Para objetos que deben flotar a una altura determinada por encima de lo que está físicamente allí (DTM, edificios, agua), lo que es útil para los marcadores en los techos o los componentes que se ajustan de forma dinámica a la escena visible.
Para obtener más detalles, consulta la documentación de las constantes de AltitudeMode.
Ejemplos visuales y aplicaciones prácticas
En estos ejemplos, se usa una ubicación específica, Stonehenge, para ilustrar cómo las diferentes opciones de AltitudeMode afectan la ubicación de los componentes. En primer lugar, se abordan los marcadores de posicionamiento y, luego, las líneas y las áreas, que tienen algunas consideraciones diferentes.
Marcadores de posición
Considera un marcador de pin colocado de la siguiente manera:
const markerLocation = { lat: 51.1789, lng: -1.8262, altitude: 102.23 };
Puedes verlo como el pin blanco en la siguiente escena:

Ahora, observa la siguiente imagen, que muestra pines de varios colores posicionados con los diferentes modos de altitud.

Veamos cómo los diferentes AltitudeMode afectan el posicionamiento del marcador en orden ascendente de elevación.
CLAMP_TO_GROUND (pin morado)
Este pin ignora el valor de altitud y se adjunta a la elevación del terreno más cercana. Puedes verlo justo debajo del pin blanco, que se "sujeta" de manera efectiva al terreno.
Técnicamente, este modo ignora la altitud real y sujeta el pin a la altura DTM más cercana.
ABSOLUTE (pin blanco)
Este pin usa el valor de altitud exacto (102.23 m) para colocar el marcador a esa altura sobre el nivel del mar (EGM96), que aparece en la parte superior de una de las piedras de Stonehenge, según lo especificado por su altitud proporcionada.
Técnicamente, este modo usa el valor de altitud proporcionado real para colocar el pin a la altura especificada sobre el nivel del mar, que en este ejemplo es la ubicación de Stonehenge, pero en la parte superior de una de las piedras.
RELATIVE_TO_GROUND (pin naranja)
Este pin toma el terreno (DTM) como base y se coloca a 102.23 m por encima de ese nivel del suelo, y parece flotar sobre el terreno natural que se encuentra debajo de la piedra en el henge.
Técnicamente, este modo establece su base al nivel del DTM real en el terreno y, luego, coloca el pin a 102.23 m por encima.
RELATIVE_TO_MESH (pin azul)
Este pin usa la superficie visible (DSM) como base y se coloca a 102.23 m por encima de esa superficie. Este modo incluye la altura de la piedra en su medición, lo que la alinea un poco más alta que el pin naranja.
Técnicamente, este modo usa la malla (DSM) como base y coloca la ubicación a la altitud determinada por encima de ella. Dado que el DSM se encuentra en la parte superior de la piedra de pie, este pin incluye esta altura adicional en su medición cuando determina su altura relativa, lo que la alinea un poco más alta que el pin RELATIVE_TO_GROUND.
Líneas y áreas de posición
Para las líneas y las áreas, son fundamentales tanto la altitud de los puntos dentro del componente (ya sea que se especifique o no) como el AltitudeMode que se usa. Examinemos una línea a lo largo de Stonehenge con las siguientes altitudes especificadas:
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 }
];
Puedes ver esta línea representada en la siguiente imagen en blanco, con un posicionamiento absoluto.

Una vez más, la siguiente imagen muestra las líneas con diferentes modos de altitud. Analicemos cada uno, de menor a mayor.

CLAMP_TO_GROUND (línea morada)
Esta línea ignora la altitud especificada para cada punto y, en su lugar, "cubre" la línea directamente sobre el terreno subyacente (DTM). Sigue el terreno, sin importar la presencia de componentes como edificios o piedras por encima.
Técnicamente, este modo ignora los valores de altitud reales y cubre la línea sobre el DTM, siguiendo el terreno subyacente y sin importar la malla de componentes por encima.
ABSOLUTE (línea blanca)
Esta línea usa la altitud exacta para cada punto, lo que hace que la línea pase por encima de algunas de las piedras. Está conectada por líneas rectas entre cada punto, lo que a veces puede hacer que parezca pasar por los objetos si los puntos no son lo suficientemente frecuentes.
Técnicamente, este modo sigue la altitud especificada para cada punto, conectándolos con líneas rectas, lo que significa que puede pasar por la malla (por ejemplo, piedras) si los valores de altitud lo indican. Este caso se aborda en una sección posterior.
RELATIVE_TO_GROUND (línea naranja)
Esta línea usa el terreno natural (DTM) como base y coloca cada punto a la altitud especificada por encima de ese nivel del suelo.
Técnicamente, este modo usa el DTM como base y coloca las ubicaciones de la línea a la altitud que se muestra en relación con él.
RELATIVE_TO_MESH (línea azul)
Esta línea usa la superficie visible, que incluye edificios y piedras, como base. Luego, coloca cada punto a la altitud especificada por encima de esa malla, lo que replica de manera efectiva la forma de la línea en relación con el paisaje visible.
Técnicamente, este modo usa la malla (DSM) como base y coloca las ubicaciones a la altitud especificada por encima de ella, según la malla que la línea pueda alterar debido a los diferentes componentes en el terreno.
Cuando no se especifica la altitud de las líneas
Ahora, consideremos las mismas coordenadas de línea, pero sin especificar ninguna altitud:
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 }
];
En este caso, en el que no se proporciona altitud, las líneas suelen aparecer en ubicaciones similares. Las líneas blancas, naranjas y moradas pueden combinarse en una sola línea (naranja, ya que suele dibujarse en último lugar) porque todas usan de forma predeterminada un posicionamiento similar a nivel del suelo. Puedes ver esto a continuación:

La línea azul (RELATIVE_TO_MESH) vuelve a usar la malla (DSM) como base. Como no se especifica ninguna altitud, solo superpone los puntos directamente sobre la malla. Es importante tener en cuenta que no coloca la línea en la malla, sino que conecta los puntos especificados en la malla con conexiones rectas. Si bien esto puede parecer aceptable en algunos ejemplos, puede causar problemas de visibilidad cuando está cubierto por otros componentes. Este problema se aborda en la siguiente sección.
La interacción de mallas y líneas. Ahora podemos ver otra polilínea. Esta imagen se encuentra en la misma área, pero con más cobertura del terreno (o más detalles en el DSM sobre el 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 },
];
Cuando vemos la representación con los mismos métodos (y colores) de antes, obtenemos esta vista:

El morado es CLAMP_TO_GROUND, que puedes ver a lo largo del terreno. El blanco es ABSOLUTE, que puedes ver que las líneas rectas conectan los puntos que se posicionan de forma absoluta en el espacio. Dado que el naranja y el azul son versiones relativas sobre la SUPERFICIE (DTM) o la MALLA (DSM), observa que la línea azul tiene una forma ligeramente diferente debido a la altura de los componentes que se encuentran debajo.
Una vez más, podemos observar que la naturaleza de la creación de líneas significa que la línea pasa por la malla, ya que los puntos se conectan con líneas rectas. Este caso puede causar problemas para ver las líneas, por lo que puedes establecer drawsOccludedSegments en true para asegurarte de que la línea sea visible a través de los árboles, como se muestra con más detalle en la siguiente imagen, en la que aún se pueden ver las líneas que pasan por la malla.

La naturaleza del posicionamiento en el espacio significa que los puntos pueden caer dentro de la malla y que las líneas que conectan los puntos también pueden caer en la malla, lo que podría causar artefactos visuales. En la siguiente sección, podemos ver cómo se pueden mejorar esos artefactos cuando sea posible.
Cómo solucionar problemas en la interacción entre líneas y terreno
En otro ejemplo, en la misma área, podemos ver otros artefactos que debemos tener en cuenta cuando usamos modos de altitud específicos.
Aquí tenemos un área relativamente plana que se encuentra principalmente al nivel del DTM, con detalles adicionales limitados por encima en la malla. Este caso también se daría en un área que no tuviera cobertura 3D por encima del modelo de terreno. Veamos la siguiente ubicación, como se especifica a continuación:
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 },
];
Y se puede ver en la imagen, con las líneas que tienen la misma representación de color que antes: (blanco : ABSOLUTE, azul : RELATIVE_TO_MESH, morado : CLAMP_TO_GROUND, naranja: RELATIVE_TO_GROUND).

Aquí podemos ver varios artefactos, el primero de los cuales es que, debido a la falta de cobertura de la superficie, las líneas naranja (RELATIVE_TO_GROUND) y azul (RELATIVE_TO_MESH) se encuentran (en su mayoría) en la misma ubicación (y la línea azul se muestra tal como se dibuja en último lugar).
También podemos ver que la línea morada (CLAMP_TO_GROUND) sigue el terreno y se puede ver en la colina, mientras que la línea blanca (ABSOLUTE) parece desaparecer en la colina, ya que solo se conectan los puntos y las líneas rectas atraviesan el terreno.
Puedes ver esto específicamente en esta imagen cuando se ocultó la línea morada.

Por lo tanto, esto puede generar algunos artefactos visuales extraños, en los que se puede ver que la línea desaparece debajo del terreno (o incluso a través de la malla), ya que la línea entre los puntos solo sigue una ruta recta. Es posible que puedas mejorar la visualización de esa línea agregando más puntos entre las líneas mediante un método de interpolación. La forma en que esto puede afectar la visualización dependerá una vez más del método que se use:
- Para mediciones relativas (RELATIVE_TO_GROUND o RELATIVE_TO_MESH): Cuando se usan valores de altitud relativos, crear más puntos a lo largo de una línea o un polígono permitirá que el componente se coloque en un nivel más adecuado, lo que se ajustará mejor al perfil de elevación. Si estos puntos intermedios no están presentes en tus datos, puedes usar una función de interpolación, como la función Interpolate en la biblioteca de geometría de Google Maps Platform, para agregarlos. Luego, se pueden asignar valores relativos a estos puntos nuevos que se colocarán por encima del perfil de elevación pertinente, y se limitará la longitud de cualquier línea que una los puntos y se mejorará la representación visual.
- Para componentes absolutos (ABSOLUTE): Para los componentes ABSOLUTE, más puntos deberán tener valores de altitud reales. La interpolación entre los valores absolutos existentes no proporcionará un punto que refleje con precisión ningún valor por encima de la malla, ya que solo sería un promedio entre el punto A y el punto B.
Resumen
Esperamos que este documento te haya proporcionado una descripción general completa de las opciones de AltitudeMode en los mapas 3D fotorrealistas, en la que se detalla cómo ABSOLUTE, CLAMP_TO_GROUND, RELATIVE_TO_GROUND y RELATIVE_TO_MESH afectan la ubicación y la renderización de varios componentes, como marcadores, líneas y polígonos.
Comprender cómo funcionan estos modos junto con el modelo digital del terreno (DTM) y el modelo digital de superficie (DSM) subyacentes es fundamental para crear representaciones de mapas 3D precisas y visualmente atractivas con la mínima cantidad de artefactos visuales.
Esperamos que experimentes con estos modos de altitud en tus propios proyectos para liberar todo el potencial de la creación de mapas 3D y crear experiencias atractivas y envolventes para tus usuarios, y que nos envíes comentarios.
Colaboradores
Matt Toon | Ingeniero de soluciones, desarrollador de Geo