Mise à jour de février 2009: ajout de la mention <gx:altitudeMode>, <gx:TimeStamp> et <gx:TimeSpan>.
Introduit avec KML 2.2, <Camera>
fournit un moyen supplémentaire de spécifier le point de vue de l'observateur et les paramètres de vue associés. <Camera>
est semblable à <LookAt>
, car les deux éléments définissent l'emplacement et l'orientation d'une caméra virtuelle qui regarde la Terre. La différence est que LookAt spécifie la vue en termes de point d'intérêt consulté. En revanche, l'appareil photo spécifie la vue en termes de position et d'orientation de l'utilisateur.
Les extensions <LookAt>
et <Camera>
sont étendues à partir de l'élément <AbstractView>
, qui est un type abstrait de base. <Camera>
et <LookAt>
sont identiques dans leur utilisation dans un fichier KML, à savoir en tant qu'enfant d'un élément dérivé de <Feature>
(Placemark, ScreenOverlay, GroundOverlay, PhotoOverlay, Folder, Document, NetworkLink) et enfant de <NetworkLinkControl>
. Vous pouvez utiliser un <Camera>
ou un <LookAt>
dans un élément géographique, mais pas les deux en même temps (une seule caméra virtuelle peut spécifier le point de vue actuel).
Différences entre <Camera>
et <LookAt>
Le nouvel élément <Camera>
offre davantage de flexibilité pour spécifier la vue. Plus important encore, vous pouvez incliner la vue de la caméra pour regarder vers le ciel. <Camera>
vous offre un contrôle total de la liberté d'affichage de 6 degrés sur la vue. Vous pouvez ainsi positionner la caméra dans l'espace, puis la faire pivoter autour des axes x, y et z. Si aucune rotation n'est spécifiée, les deux éléments sont équivalents:
<Camera>
<longitude>-121</longitude>
<latitude>37</latitude>
<altitude>2000</altitude>
<altitudeMode>clampToGround</altitudeMode>
</Camera>
<LookAt>
<longitude>-121</longitude>
<latitude>37</latitude>
<altitude>2000</altitude>
<altitudeMode>clampToGround</altitudeMode>
</LookAt>
La section suivante offre un bref aperçu de l'élément <LookAt>
afin que vous puissiez le comparer à celui du nouvel élément <Camera>
.
Avis sur <LookAt>
L'élément <LookAt>
spécifie le point de la Terre vu, la distance entre le point de vue et le point d'intérêt, ainsi que l'angle de la vue. Voici la syntaxe de cet élément:
<LookAt id="ID"> <longitude></longitude> <!-- kml:angle180 --> <latitude></latitude> <!-- kml:angle90 --> <altitude>0</altitude> <!-- double --> <range></range> <!-- double --> <tilt>0</tilt> <!-- float --> <heading>0</heading> <!-- float --> <altitudeMode>clampToGround</altitudeMode> <!--kml:altitudeModeEnum:clampToGround, relativeToGround, absolute --> <!-- or, gx:altitudeMode can be substituted: clampToSeaFloor, relativeToSeaFloor --> </LookAt>
Le schéma suivant illustre la construction du point de vue <LookAt>
:
L'élément <LookAt>
spécifie les réponses aux questions suivantes:
Question |
Spécification dans <LookAt> |
Quel point est-ce que je regarde ? | <longitude>, <latitude>, <altitude>, <altitudeMode> |
À quelle distance se trouve le point de vue du point d'intérêt ? | <range> |
La vue est-elle orientée de sorte que le Nord soit en haut de la vue ? | Si oui, utilisez <heading> par défaut (valeur 0). Si ce n'est pas le cas, indiquez une rotation <heading> de >0 à 360° |
La vue a-t-elle une vue plongeante sur la Terre ? | Si oui, utilisez la valeur par défaut <tilt>. Si ce n'est pas le cas, la caméra est inclinée vers le haut par rapport à l'horizon. Spécifiez une rotation <tilt> de moins de 90°. Le 90° est orienté vers le haut. (Il est possible que vous ne voyez pas du tout la surface de la Terre si vous êtes loin et que <tilt> est égal à 90°). |
Exemple
Voici un exemple de <Placemark>
contenant un élément <LookAt>
:
<Placemark>
<name>Machu Picchu, Peru</name>
<LookAt>
<longitude>-72.503364</longitude>
<latitude>-13.209676</latitude>
<altitude>0</altitude>
<range>14794.882995</range>
<tilt>66.768762</tilt>
<heading>71.131493</heading>
</LookAt>
<styleUrl>#msn_icon12</styleUrl>
<Point>
<coordinates>-72.516244,-13.162806,0</coordinates>
</Point>
</Placemark>
Et voici le repère affiché dans Google Earth:
Si la direction de la vue croise la planète, utilisez un élément <LookAt>
, car il est légèrement plus facile de le spécifier que <Camera>
.
Éléments enfants de <Camera>
L'élément <Camera>
permet de positionner le point de vue n'importe où dans l'espace et de faire pivoter la vue dans n'importe quelle direction. Voici la syntaxe de cet élément:
<Camera id="ID"> <longitude>0</longitude> <!-- kml:angle180 --> <latitude>0</latitude> <!-- kml:angle90 --> <altitude>0</altitude> <!-- double --> <heading>0</heading> <!-- kml:angle360 --> <tilt>0</tilt> <!-- kml:anglepos180 --> <roll>0</roll> <!-- kml:angle180 --> <altitudeMode>clampToGround</altitudeMode> <!-- kml:altitudeModeEnum: relativeToGround, clampToGround, or absolute --> <!-- or, gx:altitudeMode can be substituted: clampToSeaFloor, relativeToSeaFloor --> </Camera>
L'élément <Camera>
spécifie les réponses aux questions suivantes:
Question |
Spécification dans <Camera> |
Où se trouve la caméra dans l'espace ? | Positionnez la caméra au point spécifié par <longitude>, <latitude>, <altitude> et <altitudeMode>. En règle générale, il n'est pas recommandé de placer un appareil photo au sol. |
La caméra est-elle orientée de sorte que le nord soit en haut de la vue ? | Si oui, utilisez la valeur par défaut <heading> 0. Si ce n'est pas le cas, faites pivoter la caméra de >0 à 360°, en fonction des points de la boussole. |
La caméra est-elle orientée vers le bas vers la Terre ? | Si oui, utilisez la valeur <tilt> par défaut de 0. Si ce n'est pas le cas, faites pivoter la caméra de 0 à 180° pour spécifier l'angle de rotation autour de l'axe des abscisses. (Les valeurs négatives pour <tilt> sont autorisées, mais donnent lieu à une vue inversée.) |
La caméra est-elle au même niveau que la scène ? | Si oui, utilisez la valeur <roll> par défaut (0). Remarque: La valeur de l'élément <roll> lorsqu'elle est utilisée en tant qu'enfant de l'élément <Camera> est généralement égale à 0. Vous pouvez spécifier une valeur comprise entre -180 et +180°, mais cette utilisation est rare. |
Le schéma suivant montre les axes X, Y et Z, qui sont fixés à la caméra virtuelle.
- L'axe X pointe vers la droite de l'appareil photo et est appelé vecteur de droite.
- L'axe Y définit le sens "haut" par rapport à l'écran et est appelé vecteur haut.
- L'axe des z se trouve du centre de l'écran au point d'yeux. L'appareil photo regarde en bas sur l'axe -Z, qui est appelé vecteur de vue.
Voici un exemple de configuration d'une <Camera>
en tant que point de vue de départ dans une <Document>
:
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Golden Gate tour</name>
<open>1</open>
<Camera>
<longitude>-122.4790</longitude>
<latitude>37.8110</latitude>
<altitude>127</altitude>
<heading>18.0</heading>
<tilt>85</tilt>
<altitudeMode>absolute</altitudeMode>
</Camera> </Document> </kml>
Voici ce que Google Earth affiche dans ce point de vue:
Durée en AbstractView
<Camera>
et <LookAt>
peuvent contenir des informations temporelles qui affectent les images historiques, la lumière du soleil et tout objet tagué. <gx:TimeSpan>
et <gx:TimeStamp>
sont utilisés dans AbstractView et dans l'espace de noms de l'extension Google. Pour en savoir plus, consultez la section Time with AbstractViews du chapitre Time and Animation.
Exemples
Les exemples suivants illustrent différentes rotations <Camera>
.
Titre
Cet exemple montre une <Camera>
avec un cap de 90 degrés (Est) et une inclinaison de 90 degrés (en direction de l'horizon). L'appareil photo est placé à une altitude de 100 mètres.
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <Placemark>
<name>100m looking east</name>
<Camera>
<longitude>-122.4783</longitude>
<latitude>37.8120</latitude>
<altitude>100</altitude>
<heading>90</heading>
<!-- east -->
<tilt>90</tilt>
<!-- level -->
<altitudeMode>absolute</altitudeMode>
</Camera>
</Placemark> </Document> </kml>
Voici le résultat dans Google Earth:
Incliner
L'exemple suivant utilise une <Camera>
avec une inclinaison égale à 90 degrés, qui pointe vers l'horizon. Elle utilise les valeurs par défaut pour <heading>
, <altitude>
, <altitudeMode>
et <roll>
.
<Camera>
contient une valeur <gx:TimeStamp>
, qui affecte les images historiques et la lumière du soleil, ainsi que l'affichage des objets tagués dans le temps. Dans l'image ci-dessous, la lumière du soleil a été allumée et <Camera>
a observé le lieu à 15:29 UTC, le 1er janvier 2009 (7h30, heure locale).
<kml xmlns="http://www.opengis.net/kml/2.2"
xmlns:gx="http://www.google.com/kml/ext/2.2">
<Document>
<Placemark>
<name>At ground level</name>
<Camera>
<gx:TimeStamp><
when>2009-01-01T15:29:27Z</when>
</gx:TimeStamp>
<longitude>-122.4783</longitude>
<latitude>37.8120</latitude>
<!-- altitude default is 0 (default altitudeMode is clampToGround) -->
<!-- heading default is 0 (north) -->
<tilt>90</tilt>
<!-- level -->
<!-- roll default is 0 -->
<!-- altitudeMode default is clampToGround -->
</Camera>
</Placemark>
</Document>
</kml>
Voici ce que Google Earth affiche dans ce point de vue:
Roulis
Cet exemple inclut un élément <roll>
d'une valeur de 45 degrés, qui fait rouler l'appareil photo vers la gauche.
<kml xmlns="http://www.opengis.net/kml/2.2"
xmlns:gx="http://www.google.com/kml/ext/2.2">
<Document>
<Placemark>
<name>Roll left</name>
<Camera>
<gx:TimeStamp><
when>2009-01-01T15:29:27Z</when>
</gx:TimeStamp>
<longitude>-122.4783</longitude>
<latitude>37.8120</latitude>
<altitude>100</altitude>
<heading>90</heading>
<!-- east -->
<tilt>90</tilt>
<!-- level -->
<roll>45</roll>
<altitudeMode>absolute</altitudeMode>
</Camera>
</Placemark>
</Document>
</kml>
Ordre de transformation
L'ordre de rotation est important. Par défaut, l'appareil photo regarde directement l'axe − Z vers la Terre. Avant d'effectuer les rotations, l'appareil photo est traduit le long de l'axe Z en <altitude>
. L'ordre des transformations est le suivant:
- <altitude> : traduit le long de l'axe Z en <altitude>
- <heading> : faire pivoter autour de l'axe Z
- <ttt> : faites pivoter l'axe X autour.
- <roll> : faites pivoter l'axe Z une nouvelle fois.
Notez qu'à chaque application d'une rotation, deux des axes de la caméra changent d'orientation.