Cuando especificas la altitud de los elementos de un mapa en 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 elemento. En este documento, se explica el uso de "AltitudeMode" en un mapa en 3D y cómo administrar la altitud de los elementos.
A continuación, se muestra cómo puedes usar AltitudeMode con varios tipos de atributos:
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 colocas puntos dentro de una escena en 3D, su posición final se ve influenciada por la presencia de edificios 3D u objetos 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 encima. Todas las áreas se basan en el DTM, que constituye la base de la elevación del globo (calculada con EGM96).
- Modelo de superficie digital (DSM): Representa la elevación de la "superficie superior", incluidos edificios, árboles y otras estructuras. En las áreas en las que se capturaron los elementos (en especial, los entornos urbanos en los que los edificios dominan la vista), la superficie visible aparecerá más alta que el terreno base.
La distinción entre el DTM y el DSM es fundamental para comprender cómo interactúan los diferentes modos de altitud con estos modelos digitales de elevación (DEM), ya que la ubicación de los elementos puede verse afectada o influenciada por el modelo de superficie. Puedes ver las diferencias en el siguiente diagrama:

Cuando los elementos no tienen datos de altitud
Si tienes datos que no incluyen 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 elemento en la escena, debes elegir un AltitudeMode con cuidado:
- Fijarlo al suelo: Es el enfoque más simple, en el que el elemento se adaptará automáticamente al terreno. Este modo usa el modelo de DTM.
- Asignarle una altitud arbitraria y un modo relativo: Puedes asignar una altitud elegida y, luego, usar RELATIVE_TO_GROUND (que coloca los componentes en relación con el modelo de DTM) o RELATIVE_TO_MESH (que los hace flotar sobre el modelo de DSM).
- Usa otro servicio para obtener la altitud: Para obtener la altitud precisa del DTM en la ubicación del elemento, puedes usar un servicio como la API de Elevation de Google Maps Platform. Si es una línea o un polígono, deberás hacerlo para cada uno de los puntos que los componen.
¿Qué significan las opciones de AltitudeMode y cuándo usarlas?
Existen cuatro opciones de AltitudeMode que puedes especificar cuando defines un atributo:
ABSOLUTE
Imagina un avión que vuela a una altitud específica sobre el nivel del mar, por ejemplo, 10,000 pies. 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 (calculado con EGM96). La coordenada de altitud del elemento se interpreta como una elevación precisa sobre el nivel medio del mar.
Cuándo usarlo: Para funciones con altitudes conocidas y precisas, como rutas de vuelo, objetos sumergidos con profundidad exacta o instrumentos científicos de punto fijo.
CLAMP_TO_GROUND
Piensa en colocar una manta de picnic directamente en la ladera de una colina. No importa qué tan empinada o plana sea la colina, la manta siempre queda plana sobre la superficie visible.
Cómo usarlo: La altitud del objeto se expresa como si estuviera colocado directamente en el suelo. Permanecerán a nivel del suelo, siguiendo el terreno, independientemente de cualquier valor de altitud proporcionado. Se ignora la coordenada de altitud del elemento, que se proyecta directamente en la superficie del terreno (MDT).
Cuándo usarlo: Para funciones que siempre deben adaptarse al terreno, como carreteras, cercas, senderos, límites de propiedades o la base de edificios.
RELATIVE_TO_GROUND
Imagina un globo aerostático que se mantiene a 100 metros por encima de la elevación natural del suelo (DTM) que se encuentra debajo de él. Si el suelo sube, el globo sube con él, manteniendo esa distancia de 100 metros de la "tierra firme".
Cómo usarlo: La altitud del objeto se expresa en relación con la superficie del suelo (DTM). La coordenada de altitud del elemento se interpreta como un desplazamiento desde la elevación del terreno en su posición horizontal.
Cuándo usarlo: Para objetos que necesitan mantener una altura constante sobre el terreno natural, como torres de comunicación o líneas aéreas en áreas rurales.
RELATIVE_TO_MESH
Esto es como un dron que vuela a una altura fija por encima de lo que sea que esté sobrevolando, ya sea el suelo, el techo de un edificio o la copa 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 superficie más alta del suelo, el edificio o la superficie del agua (DSM). La coordenada de altitud del elemento se interpreta como un desplazamiento desde 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í (MDT, edificios, agua), útil para marcadores en techos o elementos 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 estos ejemplos, primero 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 ver esto como el pin blanco en la siguiente escena:

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

Veamos cómo los diferentes valores de AltitudeMode afectan el posicionamiento del marcador en orden ascendente de elevación.
CLAMP_TO_GROUND (marcador de posición morado)
Este marcador ignora el valor de altitud y se fija a la elevación del suelo más cercana. Puedes verla justo debajo del pin blanco, "sujeta" al terreno.
Técnicamente, este modo ignora la altitud real y fija el marcador a la altura del MTD más cercana.
ABSOLUTE (marcador 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 sobre una de las piedras de Stonehenge, según lo especificado por la altitud proporcionada.
Técnicamente, este modo usa el valor de altitud real proporcionado para colocar el marcador en 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 (marcador naranja)
Este pin toma el suelo (DTM) como base y se coloca a 102.23 m por encima de ese nivel del suelo, por lo que parece flotar sobre el suelo natural que está debajo de la piedra en el henge.
Técnicamente, este modo establece su base al nivel del DTM real en el suelo y, luego, coloca el marcador a 102.23 m por encima de él.
RELATIVE_TO_MESH (marcador 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 arriba que el pin naranja.
Técnicamente, este modo usa la malla (DSM) como base y coloca la ubicación en la altitud determinada por encima de ella. Como el DSM está en la parte superior de la piedra vertical, este marcador incluye esta altura adicional en su medición cuando determina su altura relativa, lo que lo alinea un poco más arriba que el marcador RELATIVE_TO_GROUND.
Posiciona líneas y áreas
En el caso de las líneas y las áreas, tanto la altitud de los puntos dentro del elemento (ya sea que se especifique o no) como el AltitudeMode que se use son fundamentales. 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 posicionamiento absoluto.

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

CLAMP_TO_GROUND (línea violeta)
Esta línea ignora la altitud especificada para cada punto y, en su lugar, "cubre" la línea directamente sobre el suelo subyacente (DTM). Sigue el terreno y, además, ignora la presencia de cualquier elemento, como edificios o piedras, que se encuentre sobre él.
Técnicamente, este modo ignora los valores de altitud reales y cubre la línea sobre el DTM, siguiendo el terreno subyacente y omitiendo la malla de los elementos que se encuentran sobre él.
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. Se conecta mediante líneas rectas entre cada punto, lo que, a veces, puede hacer que parezca que pasa a través de objetos si los puntos no son lo suficientemente frecuentes.
Técnicamente, este modo sigue la altitud especificada para cada punto y los conecta con líneas rectas, lo que significa que puede pasar por la malla (por ejemplo: piedras) si los valores de altitud lo dictan. Esta situación se aborda en una sección posterior.
RELATIVE_TO_GROUND (línea naranja)
Esta línea usa el suelo natural (DTM) como base y coloca cada punto en la altitud especificada sobre ese nivel del suelo.
Técnicamente, este modo usa el DTM como base y coloca las ubicaciones de las líneas en la altitud indicada en relación con él.
RELATIVE_TO_MESH (línea azul)
Esta línea usa la superficie visible, que incluye edificios y piedras, como su base. Luego, coloca cada punto en la altitud especificada sobre esa malla, lo que replica de manera eficaz 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 en la altitud especificada por encima de ella. Según la malla, la línea puede alterarse debido a las diferentes características del suelo.
Cuando no se especifica la altitud para 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 la altitud, las líneas suelen aparecer en ubicaciones similares. Las líneas blanca, naranja y morada podrían fusionarse en una sola línea (naranja, ya que suele dibujarse al final) porque todas se posicionan de forma predeterminada en un nivel similar al 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, simplemente se superponen los puntos directamente sobre la malla. Es importante tener en cuenta que no coloca la línea sobre 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 lo cubren otros elementos. 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 suelo (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 color morado es CLAMP_TO_GROUND, que puedes ver a lo largo del suelo. El blanco es ABSOLUTE, en el que puedes ver que las líneas rectas conectan los puntos que están posicionados de forma absoluta en el espacio. Como el naranja y el azul son versiones relativas de la SUPERFICIE (MDT) o la MALLA (MDS), observa que la línea azul tiene una forma ligeramente diferente debido a la altura de los elementos que se encuentran debajo.
Nuevamente, 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 están conectados entre sí por líneas rectas. Esta situación podría 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 implica 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, veremos cómo se pueden mejorar esos artefactos cuando sea posible.
Cómo resolver problemas en la interacción entre las líneas y el terreno
En otro ejemplo, en la misma área, podemos ver algunos otros artefactos que debemos tener en cuenta cuando usamos modos de altitud específicos.
Aquí tenemos un área relativamente plana que está principalmente al nivel del DTM, con detalles adicionales limitados por encima de ella en la malla. Esta situación también se daría en un área que no tuviera cobertura en 3D por encima del modelo de terreno. Analicemos 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 },
];
Como se puede ver en la imagen, las líneas tienen la misma representación de color que antes: blanco para ABSOLUTE, azul para RELATIVE_TO_MESH, púrpura para CLAMP_TO_GROUND y naranja para RELATIVE_TO_GROUND.

Aquí podemos ver una serie de 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) están (en su mayoría) en la misma ubicación (con la línea azul que se muestra como se dibuja al final).
También podemos ver que la línea violeta (CLAMP_TO_GROUND) sigue el suelo y se puede ver en la colina, mientras que la línea blanca (ABSOLUTE) desaparece en la colina, ya que solo se conectan los puntos y las líneas rectas atraviesan el suelo.
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 bajo el suelo (o incluso a través de la malla), ya que la línea entre los puntos solo sigue una ruta recta. Puedes mejorar la visualización de esa línea agregando más puntos entre las líneas con un método de interpolación. La forma en que esto afecte 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 elemento se coloque en un nivel más apropiado, 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 de la biblioteca de Geometry de Google Maps Platform, para agregarlos. A estos puntos nuevos se les pueden asignar valores relativos que se colocarán por encima del perfil de elevación correspondiente, y, luego, se limitará la longitud de cualquier línea que una los puntos y se mejorará la representación visual.
- Para los atributos absolutos (ABSOLUTE): En el caso de los atributos ABSOLUTE, más puntos deberán tener valores de altitud reales. La interpolación entre los valores absolutos existentes no dará 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 en 3D fotorrealistas, con detalles sobre cómo ABSOLUTE, CLAMP_TO_GROUND, RELATIVE_TO_GROUND y RELATIVE_TO_MESH afectan la ubicación y la renderización de varios elementos, como marcadores, líneas y polígonos.
Comprender cómo funcionan estos modos junto con el modelo digital de terreno (DTM) y el modelo digital de superficie (DSM) subyacentes es fundamental para crear representaciones de mapas en 3D precisas y visualmente atractivas con la menor cantidad de artefactos visuales.
Esperamos que experimentes con estos modos de altitud en tus propios proyectos para aprovechar todo el potencial de la cartografía en 3D, crear experiencias atractivas y envolventes para tus usuarios, y enviarnos tus comentarios.
Colaboradores
Matt Toon | Ingeniero de soluciones, desarrollador de Geo