Lorsque vous spécifiez l'altitude d'éléments sur une carte 3D (lignes, polygones, modèles ou repères, par exemple), plusieurs facteurs peuvent affecter leur emplacement, à la fois dans la scène et dans la façon dont le rendu de la scène interagit avec cet élément. Ce document explique comment utiliser AltitudeMode sur une carte 3D et comment gérer l'altitude des éléments géographiques.
Voici comment utiliser AltitudeMode avec plusieurs types de caractéristiques :
Repères : Marker3DElement, Marker3DInteractiveElement
Spécifiez une altitude pour l'emplacement, ainsi qu'une extrusion.
Modèles : Model3DElement, Model3DInteractiveElement
Spécifiez une altitude sur le point d'ancrage du modèle, qui doit être utilisée avec son orientation pour un positionnement correct dans la scène.
Polylignes : Polyline3DElement, Polyline3DInteractiveElement
Spécifiez comment l'altitude est appliquée aux points de position le long d'une polyligne.
Polygones : Polygon3DElement, Polygon3DInteractiveElement
Spécifiez comment l'altitude est appliquée aux points de position le long d'un polygone.
Utilisation de l'altitude dans les environnements 3D
Lorsque vous placez des points dans une scène 3D, leur position finale est influencée par la présence de bâtiments 3D ou d'objets capturés, comme des arbres. Il est essentiel de comprendre deux concepts clés :
- Modèle numérique de terrain (MNT) : représente l'élévation de la "terre nue". Imaginez-le comme la forme naturelle du terrain, sans bâtiments, arbres ni autres structures. Toutes les zones sont étayées par le MNT, qui constitue la base de l'altitude du globe (calculée à l'aide d'EGM96).
- Modèle numérique de surface (MNS) : représente l'élévation de la "surface supérieure", y compris les bâtiments, les arbres et d'autres structures. Dans les zones où des éléments ont été capturés (en particulier les environnements urbains où les bâtiments dominent la vue), la surface visible apparaît plus haute que le terrain de base.
La distinction entre MNT et MNS est essentielle pour comprendre comment les différents modes d'altitude interagissent avec ces modèles numériques d'élévation (MNE), car l'emplacement des éléments peut être masqué ou influencé par le modèle de surface. Vous pouvez voir les différences dans le schéma ci-dessous :

Lorsque les éléments ne disposent pas de données d'altitude
Si vous disposez de données sans mesure d'altitude ou si vous utilisez des données d'un autre service Google, comme les services Routes ou Places, l'altitude n'est souvent pas fournie dans la géométrie renvoyée. Dans ce cas, pour placer l'élément dans la scène, vous devez choisir un AltitudeMode avec soin :
- Fixer au sol : l'approche la plus simple, où l'élément s'adapte automatiquement au terrain. Ce mode utilise le modèle DTM.
- Attribuer une altitude arbitraire et un mode relatif : vous pouvez attribuer l'altitude de votre choix, puis utiliser RELATIVE_TO_GROUND (qui place les éléments par rapport au modèle MNT) ou RELATIVE_TO_MESH (qui les fait flotter au-dessus du modèle MNS).
- Utiliser un autre service pour obtenir l'altitude : pour obtenir une altitude MNT précise à l'emplacement de l'élément, vous pouvez utiliser un service tel que l'API Elevation de Google Maps Platform. S'il s'agit d'une ligne ou d'un polygone, vous devez effectuer cette opération pour chacun des points qui les composent.
Que signifient les options AltitudeMode et quand les utiliser ?
Vous pouvez spécifier quatre options AltitudeMode lorsque vous définissez une caractéristique :
ABSOLUTE
Imaginez un avion volant à une altitude spécifique au-dessus du niveau de la mer, par exemple 10 000 pieds. Sa hauteur est fixe, qu'il survole une montagne ou une vallée.
Utilisation : l'altitude de l'objet est exprimée par rapport au niveau moyen de la mer (calculé à l'aide d'EGM96). La coordonnée d'altitude de l'élément est interprétée comme une altitude précise au-dessus du niveau moyen de la mer.
Quand l'utiliser : pour les éléments dont l'altitude est connue et précise, comme les trajectoires de vol, les objets immergés dont la profondeur exacte est connue ou les instruments scientifiques à point fixe.
CLAMP_TO_GROUND
Imaginez que vous posez une couverture de pique-nique directement sur une colline. Quelle que soit la pente de la colline, la couverture repose toujours à plat sur la surface visible.
Utilisation : l'altitude de l'objet est exprimée comme s'il était placé directement sur le sol. Ils resteront au niveau du sol, en suivant le terrain, quelle que soit la valeur d'altitude fournie. La coordonnée d'altitude de l'élément géographique est ignorée. Elle est projetée directement sur la surface du terrain (MNT).
Quand l'utiliser : pour les éléments qui doivent toujours s'adapter au terrain, comme les routes, les clôtures, les sentiers, les limites de propriété ou la base des bâtiments.
RELATIVE_TO_GROUND
Imaginez une montgolfière qui reste à 100 mètres au-dessus de l'altitude naturelle du sol (MNT) en dessous d'elle. Si le sol s'élève, le ballon s'élève avec lui, en maintenant cet écart de 100 mètres par rapport au sol nu.
Utilisation : l'altitude de l'objet est exprimée par rapport à la surface du sol (MNT). La coordonnée d'altitude de l'élément est interprétée comme un décalage par rapport à l'altitude du terrain à sa position horizontale.
Quand l'utiliser : pour les objets qui doivent maintenir une hauteur constante au-dessus du terrain naturel, comme les tours de communication ou les lignes aériennes dans les zones rurales.
RELATIVE_TO_MESH
C'est comme un drone qui vole à une hauteur fixe au-dessus de ce qu'il survole, qu'il s'agisse d'un sol nu, du toit d'un bâtiment ou de la cime d'un arbre. Il s'ajuste à la surface visible la plus élevée (MNS).
Utilisation : l'altitude de l'objet est exprimée par rapport au plus élevé des éléments suivants : sol, bâtiment ou surface de l'eau (MNS). La coordonnée d'altitude de l'élément est interprétée comme un décalage par rapport à l'altitude du DSM.
Quand l'utiliser : pour les objets qui doivent flotter à une certaine hauteur au-dessus de ce qui est physiquement présent (MNT, bâtiments, eau), utile pour les repères sur les toits ou les éléments qui s'ajustent dynamiquement à la scène visible.
Pour en savoir plus, consultez la documentation sur les constantes AltitudeMode.
Exemples visuels et applications pratiques
Ces exemples utilisent un lieu spécifique, Stonehenge, pour illustrer l'impact des différentes options AltitudeMode sur l'emplacement des éléments géographiques. Ces exemples couvrent d'abord le positionnement des repères, puis celui des lignes et des zones, qui présentent quelques différences.
Repères de position
Prenons l'exemple d'un repère en forme de punaise placé comme suit :
const markerLocation = { lat: 51.1789, lng: -1.8262, altitude: 102.23 };
Vous pouvez le voir sous la forme d'un repère blanc dans la scène ci-dessous :

Regardez maintenant l'image ci-dessous, qui montre des repères de différentes couleurs positionnés à l'aide des différents modes d'altitude.

Voyons comment les différentes valeurs de AltitudeMode affectent le positionnement du repère par ordre croissant d'altitude.
CLAMP_TO_GROUND (repère violet)
Ce repère ignore la valeur d'altitude et s'associe à l'altitude au sol la plus proche. Vous pouvez le voir juste en dessous du repère blanc, "ancré" au terrain.
Techniquement, ce mode ignore l'altitude réelle et fixe le repère à la hauteur MNT la plus proche.
ABSOLUTE (repère blanc)
Ce repère utilise la valeur d'altitude exacte (102,23 m) pour placer le repère à cette hauteur au-dessus du niveau de la mer (EGM96), qui apparaît au-dessus de l'une des pierres de Stonehenge, comme spécifié par l'altitude fournie.
Techniquement, ce mode utilise la valeur d'altitude réelle fournie pour placer le repère à la hauteur spécifiée au-dessus du niveau de la mer, qui, dans cet exemple, correspond à l'emplacement de Stonehenge, mais au sommet de l'une des pierres.
RELATIVE_TO_GROUND (repère orange)
Ce repère prend le sol (MNT) comme base et se place à 102,23 m au-dessus de ce niveau du sol, semblant flotter au-dessus du sol naturel qui se trouve sous la pierre du henge.
Techniquement, ce mode définit sa base au niveau du MNT réel au sol, puis place le repère à 102,23 m au-dessus.
RELATIVE_TO_MESH (repère bleu)
Ce repère utilise la surface visible (DSM) comme base et se place à 102,23 m au-dessus de cette surface. Ce mode inclut la hauteur de la pierre dans sa mesure, en l'alignant légèrement plus haut que le repère orange.
Techniquement, ce mode utilise le maillage (DSM) comme base et place l'emplacement à l'altitude indiquée au-dessus. Étant donné que le MNS se trouve au sommet du menhir, ce repère inclut cette hauteur supplémentaire dans sa mesure lorsqu'il détermine sa hauteur relative, en l'alignant légèrement plus haut que le repère RELATIVE_TO_GROUND.
Lignes et zones de position
Pour les lignes et les zones, l'altitude des points de l'élément (qu'elle soit spécifiée ou non) et le AltitudeMode utilisé sont tous deux essentiels. Examinons une ligne le long de Stonehenge avec les altitudes spécifiées suivantes :
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 }
];
Cette ligne est représentée en blanc dans l'image ci-dessous, à l'aide d'un positionnement absolu.

Une fois de plus, l'image ci-dessous montre les lignes utilisant différents modes d'altitude. Examinons-les un par un, du plus bas au plus élevé.

CLAMP_TO_GROUND (ligne violette)
Cette ligne ignore l'altitude spécifiée pour chaque point et "recouvre" directement le sol sous-jacent (MNT). Elle suit le terrain, en ignorant la présence d'éléments tels que des bâtiments ou des pierres au-dessus.
Techniquement, ce mode ignore les valeurs d'altitude réelles et drape la ligne sur le MNT, en suivant le terrain sous-jacent et en ignorant le maillage des éléments au-dessus.
ABSOLUTE (ligne blanche)
Cette ligne utilise l'altitude exacte de chaque point, ce qui la fait passer au-dessus de certaines pierres. Il est relié par des lignes droites entre chaque point, ce qui peut parfois donner l'impression qu'il traverse des objets si les points ne sont pas assez fréquents.
Techniquement, ce mode suit l'altitude spécifiée pour chaque point, en les reliant par des lignes droites, ce qui signifie qu'il peut traverser le maillage (par exemple, des pierres) si les valeurs d'altitude l'exigent. Ce scénario est abordé dans une section ultérieure.
RELATIVE_TO_GROUND (ligne orange)
Cette ligne utilise le sol naturel (MNT) comme base et place chaque point à l'altitude spécifiée au-dessus de ce niveau du sol.
Techniquement, ce mode utilise le MNT comme base et place les emplacements de ligne à l'altitude indiquée par rapport à celui-ci.
RELATIVE_TO_MESH (ligne bleue)
Cette ligne utilise la surface visible, qui inclut les bâtiments et les pierres, comme base. Il place ensuite chaque point à l'altitude spécifiée au-dessus de ce maillage, reproduisant ainsi la forme de la ligne par rapport au paysage visible.
Techniquement, ce mode utilise le maillage (DSM) comme base et place les emplacements à l'altitude spécifiée au-dessus de celui-ci. En fonction du maillage, la ligne peut être modifiée en fonction des différentes caractéristiques au sol.
Lorsque l'altitude n'est pas spécifiée pour les lignes
Prenons maintenant les mêmes coordonnées de ligne, mais sans spécifier d'altitude :
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 }
];
Dans ce scénario, où aucune altitude n'est fournie, les lignes apparaissent souvent à des emplacements similaires. Les lignes blanche, orange et violette peuvent fusionner en une seule ligne (orange, car elle est généralement tracée en dernier), car elles sont toutes positionnées par défaut au niveau du sol. comme illustré ci-dessous :

La ligne bleue (RELATIVE_TO_MESH) utilise à nouveau le maillage (DSM) comme base. Comme aucune altitude n'est spécifiée, les points sont simplement superposés directement au-dessus du maillage. Il est important de noter qu'elle ne trace pas la ligne sur le maillage, mais qu'elle relie les points spécifiés sur le maillage par des connexions droites. Bien que cela puisse sembler acceptable dans certains exemples, cela peut entraîner des problèmes de visibilité lorsque d'autres éléments sont superposés. Ce problème est abordé dans la section suivante.
L'interaction des maillages et des lignes. Nous pouvons maintenant examiner une autre polyligne. Cette image se trouve dans la même zone, mais avec une plus grande couverture du sol (ou plus de détails sur le DSM au-dessus du 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 },
];
Si nous examinons la représentation en utilisant les mêmes méthodes (et couleurs) que précédemment, nous obtenons cette vue :

La ligne violette correspond à CLAMP_TO_GROUND, qui suit le sol. Le blanc correspond à ABSOLUTE, où vous pouvez voir que des lignes droites relient les points positionnés de manière absolue dans l'espace. Les versions orange et bleue étant des versions relatives de la SURFACE (MNT) ou du MAILLAGE (MNS), notez que la ligne bleue est légèrement différente en raison de la hauteur des éléments ci-dessous.
Là encore, nous pouvons noter que la nature de la création de la ligne signifie que la ligne passe par le maillage, car les points sont reliés entre eux par des lignes droites. Dans ce scénario, il peut être difficile de voir les lignes. Vous pouvez donc définir drawsOccludedSegments sur true pour vous assurer que la ligne est visible à travers les arbres, comme illustré plus en détail dans l'image suivante, où les lignes passant par le maillage sont toujours visibles.

La nature du positionnement dans l'espace signifie que les points peuvent se trouver dans le maillage et que les lignes reliant les points peuvent également se trouver dans le maillage, ce qui peut entraîner des artefacts visuels. Dans la section ci-dessous, nous verrons comment ces artefacts peuvent être améliorés, si possible.
Résoudre les problèmes d'interaction entre les lignes et le terrain
Dans un autre exemple, dans la même zone, nous pouvons voir d'autres artefacts dont nous devons tenir compte lorsque nous utilisons des modes d'altitude spécifiques.
Ici, nous avons une zone relativement plate qui se trouve principalement au niveau du MNT, avec peu de détails supplémentaires au-dessus dans le maillage. Ce scénario s'appliquerait également à une zone sans couverture 3D au-dessus du modèle de terrain. Examinons l'emplacement suivant, comme spécifié ci-dessous :
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 },
];
Comme vous pouvez le voir sur l'image, les lignes ont la même représentation de couleur qu'auparavant : blanc pour ABSOLUTE, bleu pour RELATIVE_TO_MESH, violet pour CLAMP_TO_GROUND et orange pour RELATIVE_TO_GROUND.

Ici, nous pouvons voir un certain nombre d'artefacts. Le premier est qu'en raison de l'absence de couverture de surface, les lignes orange (RELATIVE_TO_GROUND) et bleue (RELATIVE_TO_MESH) se trouvent (principalement) au même endroit (la ligne bleue étant affichée, car elle est dessinée en dernier).
On peut également voir que la ligne violette (CLAMP_TO_GROUND) suit le sol et est visible sur la colline, tandis que la ligne blanche (ABSOLUTE) disparaît dans la colline, car seuls les points sont connectés et les lignes droites traversent le sol.
Vous pouvez le voir spécifiquement dans cette image lorsque la ligne violette a été masquée.

Cela peut donc entraîner des artefacts visuels étranges, où la ligne peut disparaître sous le sol (ou même à travers le maillage), car la ligne entre les points suit simplement un chemin droit. Vous pouvez améliorer l'affichage visuel d'une telle ligne en ajoutant des points entre les lignes à l'aide d'une méthode d'interpolation. L'impact sur l'affichage dépendra une fois de plus de la méthode utilisée :
- Pour les mesures relatives (RELATIVE_TO_GROUND ou RELATIVE_TO_MESH) : lorsque vous utilisez des valeurs d'altitude relatives, la création de points supplémentaires le long d'une ligne ou d'un polygone permet de placer l'élément à un niveau plus approprié, en respectant mieux le profil du dénivelé. Si ces points intermédiaires ne sont pas présents dans vos données, vous pouvez utiliser une fonction d'interpolation, telle que la fonction Interpolate de la bibliothèque Geometry de Google Maps Platform, pour les ajouter. Ces nouveaux points peuvent ensuite recevoir des valeurs relatives qui seront placées au-dessus du profil du dénivelé correspondant. La longueur de toute ligne reliant les points sera alors limitée et la représentation visuelle améliorée.
- Pour les caractéristiques absolues (ABSOLUTE) : pour les caractéristiques ABSOLUTE, davantage de points devront avoir des valeurs d'altitude réelles. L'interpolation entre des valeurs absolues existantes ne donnera pas un point qui reflète précisément une valeur au-dessus du maillage, car il s'agirait simplement d'une moyenne entre le point A et le point B.
Résumé
Nous espérons que ce document vous a fourni un aperçu complet des options AltitudeMode dans les cartes 3D photoréalistes, en expliquant comment ABSOLUTE, CLAMP_TO_GROUND, RELATIVE_TO_GROUND et RELATIVE_TO_MESH ont un impact sur l'emplacement et l'affichage de divers éléments tels que les repères, les lignes et les polygones.
Il est essentiel de comprendre comment ces modes fonctionnent avec le modèle numérique de terrain (MNT) et le modèle numérique de surface (MNS) sous-jacents pour créer des représentations cartographiques 3D précises et visuellement attrayantes avec un minimum d'artefacts visuels.
Nous espérons que vous testerez ces modes d'altitude dans vos propres projets pour exploiter tout le potentiel de la cartographie 3D, créer des expériences immersives et attrayantes pour vos utilisateurs, et nous faire part de vos commentaires.
Contributeurs
Matt Toon | Ingénieur solutions, Geo Developer