Lorsque vous spécifiez l'altitude des entités 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 cette entité. Ce document explique comment utiliser AltitudeMode sur une carte 3D et comment gérer l'altitude des entités.
Voici comment utiliser AltitudeMode
avec différents types de fonctionnalités :
Marqueurs : Marker3DElement, Marker3DInteractiveElement
Spécifiez une altitude pour le lieu, 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 d'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'élévation du "sol nu". Il s'agit de la forme naturelle du terrain, sans bâtiments, arbres ni autres structures. Toutes les zones reposent sur le MNT, qui constitue la base de l'altitude du globe (calculée à l'aide de EGM96).
- Modèle numérique de surface (DSM) : 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 caractéristiques ont été capturées (en particulier les environnements urbains où les bâtiments dominent la vue), la surface visible apparaîtra plus haute que le terrain de base.
Il est essentiel de faire la distinction entre DTM et DSM pour comprendre comment les différents modes d'altitude interagissent avec ces modèles numériques d'élévation (DEM), car l'emplacement des caractéristiques 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 fonctionnalités ne comportent 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, l'altitude n'est souvent pas fournie dans la géométrie renvoyée. Dans ce cas, pour placer la fonctionnalité dans la scène, vous devez choisir un AltitudeMode
avec soin :
- Ancrer au sol : approche la plus simple, où l'élément s'adapte automatiquement au terrain. Ce mode utilise le modèle DTM.
- Attribuez-lui une altitude arbitraire et un mode relatif : vous pouvez attribuer une altitude de votre choix, puis utiliser RELATIVE_TO_GROUND (qui place les entités par rapport au modèle DTM) ou RELATIVE_TO_MESH (qui les fait flotter au-dessus du modèle DSM).
- Utiliser un autre service pour obtenir l'altitude : pour obtenir une altitude DTM précise à l'emplacement de l'entité, 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 une fonctionnalité :
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'entité est interprétée comme une altitude précise par rapport au niveau moyen de la mer.
Quand l'utiliser : pour les entités dont l'altitude est connue et précise, comme les trajectoires de vol, les objets submergés avec une profondeur exacte ou les instruments scientifiques à point fixe.
CLAMP_TO_GROUND
Imaginez que vous posez une nappe 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 s'il était placé directement au 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'entité est ignorée. Elle est projetée directement sur la surface du terrain (DTM).
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 s'élève, le ballon s'élève avec lui, en conservant 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'entité 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 conserver 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 si un drone volait à une hauteur fixe au-dessus de tout ce qu'il survole, qu'il s'agisse du sol nu, du toit d'un bâtiment ou de la cime d'un arbre. Elle s'ajuste à la surface visible la plus élevée (DSM).
Utilisation : l'altitude de l'objet est exprimée par rapport à la surface la plus élevée (sol, bâtiment ou eau) du modèle numérique de surface (MNS). La coordonnée d'altitude de l'entité 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), 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 lieu spécifique, Stonehenge, pour illustrer l'incidence des différentes options AltitudeMode
sur l'emplacement des fonctionnalités. Ces exemples couvrent d'abord les marqueurs de positionnement, puis les lignes et les zones, qui présentent quelques considérations différentes.
Repères de position
Prenons l'exemple d'un repère placé comme suit :
const markerLocation = { lat: 51.1789, lng: -1.8262, altitude: 102.23 };
Vous pouvez le voir sous la forme d'une punaise blanche 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.
Examinons comment les différentes AltitudeMode
affectent le positionnement du repère par ordre croissant d'altitude.
CLAMP_TO_GROUND (épingle violette)
Ce repère ignore la valeur d'altitude et se fixe à l'altitude au sol la plus proche. Vous pouvez le voir juste en dessous de la punaise blanche, comme s'il était "fixé" au terrain.
Techniquement, ce mode ignore l'altitude réelle et fixe le repère à la hauteur DTM la plus proche.
ABSOLU (épingle blanche)
Ce repère utilise la valeur exacte de l'altitude (102,23 m) pour placer le repère à cette hauteur au-dessus du niveau de la mer (EGM96). Il apparaît au-dessus de l'une des pierres de Stonehenge, comme indiqué 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 (DTM) comme base et se place à 102, 23 m au-dessus du niveau du sol.Il semble 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, ce qui l'aligne 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 donnée au-dessus de celui-ci. Étant donné que le DSM se trouve en haut de la pierre dressée, cette épingle inclut cette hauteur supplémentaire dans sa mesure lorsqu'elle détermine sa hauteur relative, ce qui l'aligne 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 la fonctionnalité (qu'elle soit 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 dans l'image ci-dessous, à l'aide du positionnement absolu.
Une fois encore, l'image ci-dessous montre les lignes à l'aide de 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 "drape" la ligne directement sur le sol sous-jacent (DTM). Il suit le terrain, en ignorant la présence de toute caractéristique telle que des bâtiments ou des pierres au-dessus de lui.
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.
ABSOLU (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. Cela signifie qu'il peut traverser le maillage (par exemple, des pierres) si les valeurs d'altitude le dictent. Ce scénario sera abordé dans une section ultérieure.
RELATIVE_TO_GROUND (ligne orange)
Cette ligne utilise le sol naturel (DTM) 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 des lignes à 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, ce qui reproduit efficacement 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 raison des différentes caractéristiques 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 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 à des emplacements similaires. Les lignes blanches, orange et violettes peuvent se fondre en une seule ligne (orange, car elle est généralement dessinée en dernier) parce qu'elles sont toutes positionnées par défaut à un niveau similaire. Vous pouvez le voir 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 sur le maillage. Il est important de noter qu'il ne trace pas la ligne sur le maillage, mais relie les points spécifiés sur le maillage avec des connexions droites. Bien que cela puisse sembler acceptable dans certains exemples, cela peut entraîner des problèmes de visibilité lorsqu'il est couvert par d'autres fonctionnalités. Ce problème est abordé dans la section suivante.
Interaction entre les maillages et les 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 DSM en plus 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 },
];
Lorsque nous voyons la représentation en utilisant les mêmes méthodes (et couleurs) qu'avant, nous obtenons cette vue :
La couleur violette correspond à CLAMP_TO_GROUND, qui suit le sol. Le blanc est ABSOLU. 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 (DTM) ou du MESH (DSM), notez que la ligne bleue est légèrement différente en raison de la hauteur des éléments ci-dessous.
Encore une fois, nous pouvons noter que la nature de la création de ligne signifie que la ligne traverse le maillage, car 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 passant à travers 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 s'y trouver, ce qui peut entraîner des artefacts visuels. Dans la section ci-dessous, nous verrons comment améliorer ces artefacts, 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 être conscients 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. Prenons l'exemple de l'emplacement suivant, comme indiqué 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'avant : blanc (ABSOLUTE), bleu (RELATIVE_TO_MESH), violet (CLAMP_TO_GROUND) et orange (RELATIVE_TO_GROUND).
Ici, nous pouvons voir un certain nombre d'artefacts. Le premier est que, 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 (ABSOLUTE) semble disparaître dans la colline, car seuls les points sont reliés et les lignes droites traversent le sol.
Vous pouvez le voir plus précisément sur 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 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 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 doivent comporter des valeurs d'altitude réelles. L'interpolation entre les 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 détaillant l'impact de ABSOLUTE, CLAMP_TO_GROUND, RELATIVE_TO_GROUND et RELATIVE_TO_MESH sur le placement et le rendu de diverses fonctionnalités telles 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 le moins d'artefacts visuels possible.
Nous espérons que vous expérimenterez ces modes d'altitude dans vos propres projets pour exploiter tout le potentiel de la cartographie 3D et créer des expériences immersives et attrayantes pour vos utilisateurs. N'hésitez pas à nous faire part de vos commentaires.
Contributeurs
Matt Toon | Ingénieur de solutions, développeur Geo