Comprendre les modes et les fonctionnalités d'altitude dans les cartes 3D

Lorsque vous spécifiez l'altitude des éléments sur une carte 3D (lignes, polygones, modèles ou repères, par exemple), plusieurs facteurs peuvent affecter leur positionnement, à 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.

Voici comment utiliser AltitudeMode avec différents types d'éléments :

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 ou d'objets 3D capturés, comme des arbres. Il est essentiel de comprendre deux concepts clés :

  • Modèle numérique de terrain (MNT) : il représente l'altitude du "sol nu" . Il s'agit de la forme naturelle du terrain sans aucun bâtiment, arbre ni autre structure. Toutes les zones sont soutenues 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) : il représente l'altitude de la "surface supérieure" , y compris les bâtiments, les arbres et 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 le MNT et le MNS est essentielle pour comprendre comment les différents modes d'altitude interagissent avec ces modèles numériques d'élévation (MNE), car le positionnement 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 :

Carte 3D montrant la différence entre le modèle numérique de terrain (MNT) et le modèle numérique de surface (MNS).

Lorsque les éléments ne disposent pas de données d'altitude

Si vos données ne comportent pas de mesure d'altitude ou si vous utilisez des données provenant d'un autre service Google, tel que les services Routes ou Places, aucune altitude n'est souvent fournie dans la géométrie renvoyée. Dans ce cas, pour placer l'élément dans la scène, vous devez choisir soigneusement un AltitudeMode :

  • Fixez-le au sol : approche la plus simple, où l'élément s'adapte automatiquement au terrain. Ce mode utilise le modèle MNT.
  • Attribuez-lui une altitude arbitraire + un mode relatif : vous pouvez attribuer une altitude choisie, 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).
  • Utilisez 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 devrez le faire pour chacun des points qui composent la ligne ou le polygone.

Que signifient les options AltitudeMode et quand les utiliser ?

Vous pouvez spécifier quatre options AltitudeMode lorsque vous définissez un élément :

ABSOLUE

Imaginez un avion volant à une altitude spécifique au-dessus du niveau de la mer, par exemple 3 000 mètres. 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 élévation 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, tels que les trajectoires de vol, les objets immergés à une profondeur exacte ou les instruments scientifiques à point fixe.

CLAMP_TO_GROUND

Imaginez que vous placez une couverture de pique-nique directement sur le flanc d'une colline. Quelle que soit la pente de la colline, la couverture est toujours à plat sur la surface visible.

Utilisation : l'altitude de l'objet est exprimée comme étant placée 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 est ignorée. Elle est projetée directement sur la surface du terrain (MNT).

Quand l'utiliser : pour les éléments qui doivent toujours être conformes 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. Si le sol monte, le ballon monte 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, tels que 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 du sol nu, du toit d'un bâtiment ou de la cime d'un arbre. Il s'adapte à la surface visible la plus élevée (MNS).

Utilisation : l'altitude de l'objet est exprimée par rapport à la plus haute des surfaces sol+bâtiment+eau (MNS). La coordonnée d'altitude de l'élément est interprétée comme un décalage par rapport à l'altitude du MNS.

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), ce qui est utile pour les repères sur les toits ou les éléments qui s'adaptent 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 emplacement spécifique, Stonehenge, pour illustrer l'incidence des différentes options AltitudeMode sur le positionnement des éléments. Ces exemples couvrent d'abord le positionnement des repères, puis des lignes et des zones, qui présentent quelques considérations différentes.

Positionner des repères

Prenons un repère placé comme suit :

const markerLocation = { lat: 51.1789, lng: -1.8262, altitude: 102.23 };

Vous pouvez le voir comme l'épingle blanche dans la scène ci-dessous :

Scène de carte 3D avec un repère blanc, illustrant l'emplacement par défaut d'un repère.

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

Scène de carte 3D montrant plusieurs repères (blancs, violets, orange et bleus) positionnés à l'aide de différents modes d'altitude, tous centrés autour de Stonehenge.

Voyons comment les différents AltitudeMode affectent le positionnement du repère par ordre croissant d'altitude.

CLAMP_TO_GROUND (épingle violette)

Cette épingle ignore la valeur d'altitude et se fixe à l'altitude du sol la plus proche. Vous pouvez la voir juste en dessous de l'épingle blanche, qui se "fixe" efficacement au terrain.

Techniquement, ce mode ignore l'altitude réelle et fixe l'épingle à la hauteur MNT la plus proche.

ABSOLUE (épingle blanche)

Cette épingle utilise la valeur d'altitude exacte (102,23 m) pour placer le repère à cette hauteur au-dessus du niveau de la mer (EGM96), en apparaissant au-dessus de l'une des pierres de Stonehenge, comme spécifié par son altitude fournie.

Techniquement, ce mode utilise la valeur d'altitude fournie pour placer l'épingle à 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 (épingle orange)

Cette épingle prend le sol (MNT) comme base et se place à 102,23 m au-dessus de ce niveau, en 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 sur le sol, puis place l'épingle à 102,23 m au-dessus.

RELATIVE_TO_MESH (épingle bleue)

Cette épingle utilise la surface visible (MNS) 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 l'épingle orange.

Techniquement, ce mode utilise le maillage (MNS) comme base et place l'emplacement à l'altitude donnée au-dessus. Étant donné que le MNS se trouve au sommet de la pierre dressée, cette épingle inclut cette hauteur supplémentaire dans sa mesure lors de la détermination de sa hauteur relative, en l'alignant légèrement plus haut que l'épingle RELATIVE_TO_GROUND.

Positionner des lignes et des zones

Pour les lignes et les zones, l'altitude des points de l'élément (spécifiée ou non) et le AltitudeMode utilisé sont 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 }
];

Vous pouvez voir cette ligne représentée en blanc sur l'image ci-dessous, à l'aide du positionnement absolu.

Carte 3D montrant une ligne blanche placée autour de Stonehenge à l'aide du positionnement absolu.

Là encore, l'image ci-dessous montre les lignes utilisant différents modes d'altitude. Examinons-les tour à tour, de la plus basse à la plus haute.

Carte 3D montrant plusieurs lignes de couleur (violet, blanc, orange, bleu) positionnées autour de Stonehenge à l'aide de différents modes d'altitude.

CLAMP_TO_GROUND (ligne violette)

Cette ligne ignore l'altitude spécifiée pour chaque point et "drape" la ligne directement sur 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.

ABSOLUE (ligne blanche)

Cette ligne utilise l'altitude exacte pour chaque point, ce qui la fait passer au-dessus de certaines pierres. Elle est reliée par des lignes droites entre chaque point, ce qui peut parfois donner l'impression qu'elle 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 le dictent. 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.

Techniquement, ce mode utilise le MNT comme base et place les emplacements de la ligne à l'altitude indiquée par rapport à celui-ci.

RELATIVE_TO_MESH (ligne bleue)

Cette ligne utilise la surface visible, qui comprend les bâtiments et les pierres, comme base. Elle place ensuite chaque point à l'altitude spécifiée au-dessus de ce maillage, en reproduisant efficacement la forme de la ligne par rapport au paysage visible.

Techniquement, ce mode utilise le maillage (MNS) comme base et place les emplacements à l'altitude spécifiée au-dessus, en fonction du maillage que la ligne peut modifier en fonction des différents éléments au sol.

Lorsque l'altitude n'est pas spécifiée pour les lignes

Considérons maintenant les mêmes coordonnées de ligne, mais sans aucune altitude spécifiée :

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 dans des emplacements similaires. Les lignes blanche, orange et violette peuvent fusionner en une seule ligne (orange, car elle est généralement dessinée en dernier) parce qu'elles sont toutes définies par défaut sur un positionnement similaire au niveau du sol. Vous pouvez le voir ci-dessous :

Carte 3D montrant plusieurs lignes de couleur (orange, bleue) autour de Stonehenge, avec les lignes blanches et violettes qui fusionnent en raison du manque de données d'altitude.

La ligne bleue (RELATIVE_TO_MESH) utilise à nouveau le maillage (MNS) comme base. Comme aucune altitude n'est spécifiée, elle superpose simplement les points directement sur le maillage. Il est important de noter qu'elle ne place 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é lorsqu'elle est couverte par d'autres éléments. Ce problème est abordé dans la section suivante.

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 couverture au sol plus importante (ou plus de détails sur le MNS au-dessus du MNT).

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 },
];

Lorsque nous voyons la représentation en utilisant les mêmes méthodes (et couleurs) qu'auparavant, nous obtenons cette vue :

Carte 3D affichant plusieurs lignes colorées (violettes, blanches, orange et bleues) sur un terrain avec des arbres et des altitudes variables.

Le violet est CLAMP_TO_GROUND, que vous pouvez voir le long du sol. Le blanc est ABSOLUE, et vous pouvez voir que des lignes droites relient les points qui sont positionnés de manière absolue dans l'espace. L'orange et le bleu é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 lignes signifie que la ligne traverse le maillage lorsque les points sont reliés par des lignes droites. Ce scénario peut entraîner des problèmes de visibilité des 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 traversant le maillage sont toujours visibles.

Carte 3D montrant des lignes passant à travers des arbres, avec des segments masqués rendus visibles pour illustrer l'occlusion des segments : true.

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 améliorer ces artefacts dans la mesure du 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 être conscients lorsque nous utilisons des modes d'altitude spécifiques.

Nous avons ici une zone relativement plate qui se situe principalement au niveau du MNT, avec peu de détails supplémentaires au-dessus dans le maillage. Ce scénario se produirait également dans 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 },
];

Et peut être vu sur l'image, avec les lignes ayant la même représentation couleur qu'auparavant : (blanc : ABSOLUE, bleu : RELATIVE_TO_MESH, violet : CLAMP_TO_GROUND, orange : RELATIVE_TO_GROUND).

Carte 3D montrant des lignes de différentes couleurs (blanc, bleu, violet, orange) sur un terrain relativement plat, mettant en évidence des artefacts visuels où les lignes disparaissent dans le sol.

Nous pouvons voir ici un certain nombre d'artefacts, dont le premier est qu'en raison du manque 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 en dernier).

Nous pouvons également voir que la ligne violette (CLAMP_TO_GROUND) suit le sol et est visible sur la colline, tandis que la ligne blanche (ABSOLUE) disparaît dans la colline, car seuls les points sont reliés et les lignes droites traversent le sol.

Vous pouvez le voir spécifiquement sur cette image lorsque la ligne violette a été masquée.

Carte 3D montrant des lignes blanches et bleues disparaissant dans une colline, avec la ligne violette masquée, illustrant les artefacts visuels des lignes absolues et relatives au maillage.

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'incidence sur l'affichage visuel dépendra à nouveau 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 s'adaptant mieux au profil d'altitude. 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 d'altitude approprié, puis la longueur de toute ligne reliant les points sera limitée et la représentation visuelle améliorée.
  • Pour les éléments absolus (ABSOLUE) : pour les éléments ABSOLUE, davantage de points devront avoir des valeurs d'altitude réelles. L'interpolation entre les valeurs absolues existantes ne donnera pas un point qui reflète avec précision une valeur au-dessus du maillage, car il ne s'agira que d'une moyenne entre le point A et le point B.

Résumé

Nous espérons que ce document vous a fourni une présentation complète des options AltitudeMode dans les cartes 3D photoréalistes, en expliquant comment ABSOLUE, CLAMP_TO_GROUND, RELATIVE_TO_GROUND et RELATIVE_TO_MESH ont une incidence sur le positionnement et le rendu de divers éléments tels que les repères, les lignes et les polygones.

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 est essentiel pour créer des représentations cartographiques 3D précises et visuellement attrayantes avec un minimum d'artefacts visuels.

Nous espérons que vous expérimenterez 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 en solutions, Geo Developer