Didacticiel KML

Le format de fichier KML permet d'afficher des données géographiques dans un navigateur Earth tel que Google Earth. Basé sur la norme XML, ce langage utilise une structure reposant sur des balises avec des éléments et des attributs imbriqués. Toutes les balises sont sensibles à la casse et doivent apparaître exactement telles qu'elles sont listées dans la référence KML. Les balises facultatives sont indiquées dans cette référence. Au sein d'un élément donné, les balises doivent apparaître dans l'ordre indiqué dans la référence.

Si vous débutez avec KML, explorez ce document et les fichiers d'exemple associés (SamplesInEarth) pour vous familiariser avec la structure de base d'un fichier KML et les balises les plus couramment utilisées. La première section décrit les fonctionnalités que vous pouvez créer dans l'interface utilisateur de Google Earth. Ces éléments géographiques incluent les repères, les descriptions, les superpositions au sol, les trajets et les polygones. La deuxième section décrit les fonctionnalités qui nécessitent de créer un fichier KML à l'aide d'un éditeur de texte. Lorsqu'un fichier texte est enregistré avec l'extension .kml ou .kmz, les navigateurs Earth savent comment l'afficher.

Conseil:Pour afficher le "code" KML d'un élément géographique dans Google Earth, il vous suffit de faire un clic droit sur l'élément dans la visionneuse 3D, puis de sélectionner "Copier". Collez ensuite le contenu du presse-papiers dans un éditeur de texte. L'élément visuel qui s'affiche dans Google Earth est converti au format texte KML équivalent. N'oubliez pas de tester cette fonctionnalité.

Tous les exemples décrits ici se trouvent dans le fichier KML Samples (Exemples KML). Commencez par télécharger ce fichier pour afficher les exemples dans Google Earth.

Pour plus d'informations

La documentation de référence KML 2.2 fournit des informations sur le format de fichier KML. Si vous connaissez le langage XML, le schéma KML 2.2 vous intéressera aussi.

Pour en savoir plus sur l'utilisation de certaines des fonctionnalités clés de KML, consultez le Guide du développeur.

Sommaire

Documents KML de base

Le type de document KML le plus simple est celui qui peut être créé directement dans Google Earth. En d'autres termes, vous n'avez pas besoin de modifier ni de créer de fichier KML dans un éditeur de texte. Vous pouvez créer des repères, des superpositions au sol, des trajets et des polygones directement dans Google Earth.

Repères

Un repère est l'une des fonctionnalités les plus couramment utilisées dans Google Earth. Elle repousse la position de la Terre à l'aide d'une punaise jaune. Le repère le plus simple n'inclut qu'un élément <Point>, qui spécifie l'emplacement du repère. Vous pouvez spécifier un nom et une icône personnalisée pour le repère. Vous pouvez également y ajouter d'autres éléments géométriques.

Ouvrez le fichier KML Samples dans Google Earth, puis développez le sous-dossier "Placemarks" (Repères). Ce dossier comprend trois types de repères: simples, flottantes et extrudées. Le code KML du repère simple se présente comme suit:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Placemark>
<name>Simple placemark</name>
<description>Attached to the ground. Intelligently places itself at the height of the underlying terrain.</description>
<Point>
<coordinates>-122.0822035425683,37.42228990140251,0</coordinates>
</Point>
</Placemark> </kml>

La structure de ce fichier se décompose comme suit:

  • Un en-tête XML. Il s'agit de la ligne 1 de chaque fichier KML. Aucun espace ni aucun autre caractère ne peut apparaître avant cette ligne.
  • Une déclaration d'espace de noms KML. Il s'agit de la ligne 2 de chaque fichier KML 2.2.
  • Objet Repère contenant les éléments suivants :
    • Un nom utilisé comme libellé du repère
    • Une description qui apparaît dans la "ballon" associée au repère
    • Point indiquant la position du repère sur la surface de la Terre (longitude, latitude et, éventuellement, altitude)

Si vous vous demandez où se trouve le repère, il se trouve juste au-dessus du bâtiment Google 41, où nous avons développé Google Earth.

Dans Google Earth, les utilisateurs considèrent généralement qu'il s'agit d'un "repère" sous la forme d'un élément <Placemark> avec un élément <Point> enfant au format KML. Le repère de point est le seul moyen de dessiner une icône et un libellé dans la visionneuse 3D de Google Earth. Par défaut, l'icône est une punaise jaune connue. Dans KML, un <Placemark> peut contenir un ou plusieurs éléments géométriques, tels qu'un élément LineString, Polygon ou Model. Toutefois, seul un <Placemark> avec un point peut avoir une icône et un libellé. Le point est utilisé pour positionner l'icône, mais il n'est pas représenté sous forme graphique.

Code HTML descriptif dans les repères

Le fichier Exemples de code KML contient un exemple de presque tout ce que vous pouvez faire avec le texte des repères. Vous pouvez ajouter des liens, des tailles de police, des styles et des couleurs, et spécifier l'alignement du texte et des tableaux. Pour afficher la liste complète, copiez l'exemple de repère "HTML descriptif" (dans le dossier "Styles et balisage") et collez-le dans un éditeur de texte.

Balisage automatique dans Google Earth (version 4.0 et ultérieure)

Google Earth 4.0 propose une fonctionnalité de balisage automatique qui convertit automatiquement le texte (par exemple, www.google.com) en liens hypertextes actifs sur lesquels l'utilisateur peut cliquer. Le texte contenu dans la balise <description>, la balise <Snippet> et l'élément <text> de <BalloonStyle> sont automatiquement transformés en liens hypertexte HTTP standards. Vous n'avez pas besoin d'ajouter vous-même les balises <a href= ...>.

Utiliser l'élément CDATA

Si vous souhaitez écrire du code HTML standard dans une balise <description>, vous pouvez l'insérer dans une balise CDATA. Si vous ne le faites pas, les chevrons doivent être écrits en tant que références d'entités pour empêcher Google Earth d'analyser le code HTML de manière incorrecte (par exemple, le symbole > est écrit sous la forme &gt; et le symbole < est écrit sous la forme &lt;). Il s'agit d'une fonctionnalité standard de XML qui n'est pas propre à Google Earth.

Tenez compte des différences entre le balisage HTML avec et sans CDATA. Tout d'abord, voici la <description> avec des balises CDATA:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <Placemark> <name>CDATA example</name> <description> <![CDATA[ <h1>CDATA Tags are useful!</h1> <p><font color="red">Text is <i>more readable</i> and <b>easier to write</b> when you can avoid using entity references.</font></p> ]]> </description> <Point> <coordinates>102.595626,14.996729</coordinates> </Point> </Placemark> </Document> </kml>

Voici la balise <description> sans les balises CDATA. Les caractères spéciaux doivent donc utiliser des références d'entité:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <Placemark> <name>Entity references example</name> <description> &lt;h1&gt;Entity references are hard to type!&lt;/h1&gt; &lt;p&gt;&lt;font color="green"&gt;Text is &lt;i&gt;more readable&lt;/i&gt; and &lt;b&gt;easier to write&lt;/b&gt; when you can avoid using entity references.&lt;/font&gt;&lt;/p&gt; </description> <Point> <coordinates>102.594411,14.998518</coordinates> </Point> </Placemark> </Document> </kml>

Superpositions au sol

Les superpositions au sol vous permettent de "tracer" une image sur le relief de la Terre. L'élément <Icon> contient le lien vers le fichier .jpg avec l'image en superposition. Voici un exemple de superposition au sol dans le fichier d'exemples KML, qui montre l'éruption du mont Etna en 2001:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Folder>
<name>Ground Overlays</name>
<description>Examples of ground overlays</description>
<GroundOverlay>
<name>Large-scale overlay on terrain</name>
<description>Overlay shows Mount Etna erupting on July 13th, 2001.</description>
<Icon>
<href>https://developers.google.com/kml/documentation/images/etna.jpg</href>
</Icon>
<LatLonBox>
<north>37.91904192681665</north>
<south>37.46543388598137</south>
<east>15.35832653742206</east>
<west>14.60128369746704</west>
<rotation>-0.1556640799496235</rotation>
</LatLonBox>
</GroundOverlay>
</Folder> </kml>

Notez que le fichier commence par les deux mêmes lignes que le premier exemple: l'en-tête XML et la déclaration de l'espace de noms KML.

Cet exemple utilise un dossier (nommé "Superpositions au sol") comme mécanisme de regroupement et d'étiquetage de son contenu. Notez que le dossier s'affiche dans le panneau "Lieux" lorsque vous chargez les exemples KML dans Google Earth.

Le positionnement d'une superposition au sol est contrôlé par la balise <LatLonBox>. Les valeurs limites sont fournies pour les latitudes nord et sud, et les longitudes est et ouest. En outre, des valeurs de rotation sont indiquées pour les images dont l'axe y ne coïncide pas avec le quadrillage nord. Cet exemple utilise une image JPEG pour la superposition. Google Earth est également compatible avec les formats BMP, GIF, TIFF, TGA et PNG.

Chemins

Il est possible de créer de nombreux types de tracés dans Google Earth. De plus, il est très facile d'utiliser vos données de façon très créative. Dans KML, un chemin est créé par un élément <LineString>. Consultez l'exemple "Absolu absolu" dans le dossier "Chemins" pour voir comment la forme a été générée par le code suivant:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document>
<name>Paths</name>
<description>Examples of paths. Note that the tessellate tag is by default
set to 0. If you want to create tessellated lines, they must be authored
(or edited) directly in KML.</description> <Style id="yellowLineGreenPoly">
<LineStyle>
<color>7f00ffff</color>
<width>4</width>
</LineStyle>
<PolyStyle>
<color>7f00ff00</color>
</PolyStyle>
</Style> <Placemark>
<name>Absolute Extruded</name>
<description>Transparent green wall with yellow outlines</description>
<styleUrl>#yellowLineGreenPoly</styleUrl>
<LineString>
<extrude>1</extrude>
<tessellate>1</tessellate>

<altitudeMode>absolute</altitudeMode>
<coordinates> -112.2550785337791,36.07954952145647,2357
-112.2549277039738,36.08117083492122,2357
-112.2552505069063,36.08260761307279,2357
-112.2564540158376,36.08395660588506,2357
-112.2580238976449,36.08511401044813,2357
-112.2595218489022,36.08584355239394,2357
-112.2608216347552,36.08612634548589,2357
-112.262073428656,36.08626019085147,2357
-112.2633204928495,36.08621519860091,2357
-112.2644963846444,36.08627897945274,2357
-112.2656969554589,36.08649599090644,2357 </coordinates>
</LineString> </Placemark>
</Document> </kml>

Notez qu'il ne s'agit que d'une seule ligne tracée à une altitude par rapport au sol. Le tag <tessellate> divise la ligne en segments plus petits, et le tag <extrude> étend la ligne jusqu'au sol.

Polygones

Vous pouvez utiliser des polygones pour créer des bâtiments simples et d'autres formes. Consultez le dossier "Polygons" dans le fichier KML Samples (Exemples KML).

L'exemple Pentagon est généré en dessinant des coquilles simples intérieures et extérieures, puis en les extruisant jusqu'au sol. Voici le code :

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Placemark>
<name>The Pentagon</name>
<Polygon>
<extrude>1</extrude>
<altitudeMode>relativeToGround</altitudeMode>
<outerBoundaryIs>
<LinearRing>
<coordinates>
-77.05788457660967,38.87253259892824,100
-77.05465973756702,38.87291016281703,100
-77.05315536854791,38.87053267794386,100
-77.05552622493516,38.868757801256,100
-77.05844056290393,38.86996206506943,100
-77.05788457660967,38.87253259892824,100
</coordinates>
</LinearRing>
</outerBoundaryIs>
<innerBoundaryIs>
<LinearRing>
<coordinates>
-77.05668055019126,38.87154239798456,100
-77.05542625960818,38.87167890344077,100
-77.05485125901024,38.87076535397792,100
-77.05577677433152,38.87008686581446,100
-77.05691162017543,38.87054446963351,100
-77.05668055019126,38.87154239798456,100
</coordinates>
</LinearRing>
</innerBoundaryIs>
</Polygon>
</Placemark> </kml>

2 documents KML avancés

Cette section décrit certains des éléments KML qui doivent être créés dans un éditeur de texte, tels que les styles partagés pour la géométrie, les icônes en surbrillance pour les repères et les superpositions d'écran. Créer des fichiers KML "à la main" est un peu plus complexe que d'utiliser l'interface Google Earth pour créer et modifier des éléments géographiques. Toutefois, avec un peu de pratique, la plupart des utilisateurs savent modifier des fichiers KML pour ajouter ces effets.

Styles pour la géométrie

Après avoir créé des éléments géographiques dans Google Earth et examiné le code KML généré par Google Earth, vous remarquerez que les styles jouent un rôle important dans l'affichage de vos données. Les utilisateurs expérimentés voudront apprendre à définir leurs propres styles.

Si vous définissez un style au début d'un document KML et que vous définissez également un ID pour celui-ci, vous pouvez utiliser ce style dans la géométrie, les repères et les superpositions définies ailleurs dans le document. Étant donné que plusieurs éléments peuvent utiliser le même style, les styles définis et utilisés de cette façon sont appelés styles partagés. Vous définissez un style donné une fois, puis vous pouvez le référencer plusieurs fois, à l'aide de l'élément <styleUrl>. Si la définition de style se trouve dans le même fichier, faites précéder l'ID de style d'un signe #. Si la définition du style se trouve dans un fichier externe, incluez l'URL complète dans l'élément <styleUrl>.

Le fichier Exemples de code KML contient un certain nombre de styles partagés, chacun défini par un ID au début du fichier. Notez qu'il est plus facile de décrire vos effets d'après des identifiants descriptifs. Voici un exemple de style ("transBluePoly") qui définit une couleur bleue transparente pour les faces du polygone et une largeur de 1,5 (avec la couleur par défaut du blanc) pour les bords du polygone. Ce style est utilisé par le bâtiment 41 de l'exemple du campus Google (dans le dossier Polygones):

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<Style id="transBluePoly">
<LineStyle>
<width>1.5</width>
</LineStyle>
<PolyStyle>
<color>7dff0000</color>
</PolyStyle>
</Style> <Placemark>
<name>Building 41</name>
<styleUrl>#transBluePoly</styleUrl>
<Polygon>
<extrude>1</extrude>
<altitudeMode>relativeToGround</altitudeMode>
<outerBoundaryIs>
<LinearRing>
<coordinates> -122.0857412771483,37.42227033155257,17
-122.0858169768481,37.42231408832346,17
-122.085852582875,37.42230337469744,17
-122.0858799945639,37.42225686138789,17
-122.0858860101409,37.4222311076138,17
-122.0858069157288,37.42220250173855,17
-122.0858379542653,37.42214027058678,17
-122.0856732640519,37.42208690214408,17
-122.0856022926407,37.42214885429042,17
-122.0855902778436,37.422128290487,17
-122.0855841672237,37.42208171967246,17
-122.0854852065741,37.42210455874995,17
-122.0855067264352,37.42214267949824,17
-122.0854430712915,37.42212783846172,17
-122.0850990714904,37.42251282407603,17
-122.0856769818632,37.42281815323651,17
-122.0860162273783,37.42244918858722,17
-122.0857260327004,37.42229239604253,17
-122.0857412771483,37.42227033155257,17 </coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
</Document>
</kml>

Notez que l'élément <styleUrl> est un enfant de <Placemark> (et non de la géométrie concernée).

Styles des icônes en surbrillance

L'icône en surbrillance du dossier "Styles et balisage" vous montre comment créer un effet de survol avec KML. Le document définit deux styles : un pour "NormalRepère" et un pour "highlightPlacemark" (qui s'affiche lorsque le curseur survole l'icône). L'élément <StyleMap> possède deux paires clé/valeur qui mappent chaque style d'icône à un état d'icône. Il existe deux états d'icône : normal et highlight (mise en surbrillance).

Les étapes de base sont les suivantes:

  1. Définissez un <Style> pour l'icône normale du repère, puis attribuez-lui un ID (dans ce cas, "Repère normal"). Le <Style> inclut un <Icon> avec un <href> à l'image à utiliser, comme illustré ci-dessous.
  2. Définissez un <Style> pour l'icône de mise en surbrillance du repère, puis attribuez-lui un ID (ici, "highlightPlacemark").
  3. Créez l'élément <StyleMap> et attribuez-lui un ID ("exampleStyleMap"). Le repère fait référence à cet ID.
  4. Dans l'élément <StyleMap>, spécifiez "#normalPlacemark" pour l'état normal.
  5. Dans l'élément <StyleMap>, spécifiez "#highlightPlacemark" pour l'état highlight.
  6. Dans le repère, ajoutez un élément <styleUrl> qui fait référence à "#exampleStyleMap".
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Highlighted Icon</name>
<description>Place your mouse over the icon to see it display the new icon</description>
<Style id="highlightPlacemark">
<IconStyle>
<Icon>
<href>http://maps.google.com/mapfiles/kml/paddle/red-stars.png</href>
</Icon>
</IconStyle>
</Style>
<Style id="normalPlacemark">
<IconStyle>
<Icon>
<href>http://maps.google.com/mapfiles/kml/paddle/wht-blank.png</href>
</Icon>
</IconStyle>
</Style>
<StyleMap id="exampleStyleMap">
<Pair>
<key>normal</key>
<styleUrl>#normalPlacemark</styleUrl>
</Pair>
<Pair>
<key>highlight</key>
<styleUrl>#highlightPlacemark</styleUrl>
</Pair>
</StyleMap>
<Placemark>
<name>Roll over this icon</name>
<styleUrl>#exampleStyleMap</styleUrl>
<Point>
<coordinates>-122.0856545755255,37.42243077405461,0</coordinates>
</Point>
</Placemark>
</Document>
</kml>

Superpositions d'écran

Les superpositions d'écran ne peuvent pas être créées directement dans Google Earth et sont donc plus difficiles à créer que les superpositions au sol. Un ensemble complet d'exemples est inclus dans le dossier "Screen Overlays" du fichier KML Samples.

Par exemple, activez le dossier "Position absolue: en haut à gauche" du fichier Exemples KML. Une superposition d'écran s'affiche en haut à gauche de la fenêtre d'affichage. Il a été créé avec le code KML suivant:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<ScreenOverlay>
<name>Absolute Positioning: Top left</name>
<Icon>
<href>http://developers.google.com/kml/documentation/images/top_left.jpg</href>
</Icon>
<overlayXY x="0" y="1" xunits="fraction" yunits="fraction"/>
<screenXY x="0" y="1" xunits="fraction" yunits="fraction"/>
<rotationXY x="0" y="0" xunits="fraction" yunits="fraction"/>
<size x="0" y="0" xunits="fraction" yunits="fraction"/>
</ScreenOverlay>
</kml>

Le positionnement est contrôlé en mappant un point dans l'image spécifié par <overlayXY> à un point de l'écran spécifié par <screenXY>. Dans ce cas, l'angle supérieur gauche de l'image (0,1) a été forcé pour coïncider avec le même point à l'écran.

Consultez les autres exemples du dossier pour découvrir comment obtenir d'autres positions fixes et créer des images qui s'adaptent de manière dynamique à la taille de l'écran. (Notez que xunits et yunits peuvent également être spécifiés en tant que "pixels" pour un contrôle de précision.) Pour en savoir plus, consultez la documentation de référence KML 2.2.

Un lien réseau contient un élément <Link> avec une balise <href> (une référence hypertexte) qui charge un fichier. L'élément <href> peut être une spécification de fichier local ou une URL absolue. Malgré le nom, un <NetworkLink> ne charge pas nécessairement les fichiers du réseau.

L'élément <href> contenu dans un lien indique l'emplacement de l'un des éléments suivants:

  • Fichier image utilisé par les icônes dans les styles d'icône, les superpositions au sol et les superpositions d'écran
  • Fichier de modèle utilisé dans l'élément <Model>
  • Un fichier KML ou KMZ chargé par un lien réseau

Le fichier spécifié peut être un fichier local ou un fichier sur un serveur distant. Dans leur forme la plus simple, les liens réseau constituent un moyen utile pour diviser un fichier KML volumineux en fichiers plus petits et plus faciles à gérer sur le même ordinateur.

Jusqu'à présent, tous nos exemples ont nécessité que le code KML soit envoyé à Google Earth depuis la machine locale. Les liens réseau vous permettent de diffuser du contenu depuis un emplacement distant et sont couramment utilisés pour distribuer des données à un grand nombre d'utilisateurs. De cette manière, si les données doivent être modifiées, elles ne doivent être modifiées que dans l'emplacement source, et tous les utilisateurs reçoivent automatiquement les données mises à jour.

Scripts CGI pour KML

En plus de pointer vers des fichiers contenant des données statiques, la balise <href> d'un lien réseau peut pointer vers des données générées de façon dynamique, par exemple par un script CGI situé sur un serveur réseau. Avec des connaissances d'un langage de script tel que PHP, Python ou Perl, vous pouvez créer un script qui fournit un flux (ou un fichier) de données KML à chaque lien réseau.

Pour diffuser du contenu KML via une image de réseau CGI, deux éléments sont nécessaires:

Lorsqu'un client (Google Earth) appelle le serveur, celui-ci doit (1) renvoyer un code de réponse HTTP 200 et (2) définir le type de contenu de la réponse sur text/plain ou application/vnd.google-earth.kml+xml..

La réponse doit être un fichier KML valide. Pour les applications complexes, la gestion des erreurs est très importante.

Conseil : Une manière simple de gérer les erreurs consiste à analyser l'erreur du serveur en tant que texte pour un nom de dossier. Par exemple, vous pouvez demander au serveur de renvoyer <Folder><name>database inaccessible</name></Folder> sous forme de chaîne. C'est plus instructif (et plus convivial) que de laisser la connexion se déconnecter.

Les exemples suivants utilisent Python, mais ils sont tout aussi valides dans tout autre langage de script.

Générer un repère aléatoire

Le script Python suivant génère des valeurs entières aléatoires pour latitude et longitude, puis insère ces valeurs dans l'élément <coordinates> d'un <Point>. Chaque fois que le lien réseau est actualisé, le script Python s'exécute à nouveau et génère du code KML avec de nouvelles valeurs de latitude et de longitude.

#!/usr/bin/python

import random

latitude = random.randrange(-90, 90)
longitude = random.randrange(-180, 180)
kml = (
   '<?xml version="1.0" encoding="UTF-8"?>\n'
   '<kml xmlns="http://www.opengis.net/kml/2.2">\n'
   '<Placemark>\n'
   '<name>Random Placemark</name>\n'
   '<Point>\n'
   '<coordinates>%d,%d</coordinates>\n'
   '</Point>\n'
   '</Placemark>\n'
   '</kml>'
   ) %(longitude, latitude)
print 'Content-Type: application/vnd.google-earth.kml+xml\n'
print kml

Voici un exemple de fichier KML contenant un lien réseau qui charge ce script Python:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Folder>
<name>Network Links</name>
<visibility>0</visibility>
<open>0</open>
<description>Network link example 1</description>
<NetworkLink>
<name>Random Placemark</name>
<visibility>0</visibility>
<open>0</open>
<description>A simple server-side script that generates a new random
placemark on each call</description>
<refreshVisibility>0</refreshVisibility>
<flyToView>0</flyToView>
<Link>
<href>http://yourserver.com/cgi-bin/randomPlacemark.py</href>
</Link>
</NetworkLink>
</Folder>
</kml>

Requêtes d'actualisation basées sur les vues

Un lien réseau standard est un lien unidirectionnel: les données ne circulent que du serveur vers Google Earth. L'actualisation basée sur les vues permet une communication bidirectionnelle. Lorsque l'actualisation basée sur les vues est active, Google Earth renvoie les coordonnées de la vue au serveur à une heure spécifiée. Cela peut être toutes les n secondes, minutes ou heures, ou une fois qu'un certain temps s'est écoulé depuis que la vue a cessé de bouger. Consultez la section <viewRefreshMode> dans la documentation de référence sur KML 2.2.

Les coordonnées sont renvoyées au serveur au moyen d'une requête HTTP GET qui les ajoute comme suit (il s'agit des informations du cadre de délimitation par défaut):

GET /path/to/server/script/query?BBOX=[longitude_west, latitude_south, longitude_east, latitude_north] HTTP/1.1

Si la requête a été effectuée alors que l'utilisateur cherchait sur San Francisco, les coordonnées peuvent se présenter comme suit:

GET /path/to/server/script/query?BBOX=-122.497790,37.730385,-122.380087,37.812331 HTTP/1.1

Cette fonctionnalité peut être utilisée pour des applications très créatives, mais pour vous aider à vous lancer, vous trouverez un exemple simple ci-dessous.

Suivi d'un point directement sous votre vue

Le script Python côté serveur suivant analyse le message de retour envoyé par Google Earth et répond avec un repère au centre de l'écran. À chaque actualisation du lien réseau, un nouveau repère est généré.

#!/usr/bin/python

import cgi

url = cgi.FieldStorage()
bbox = url['BBOX'].value
bbox = bbox.split(',')
west = float(bbox[0])
south = float(bbox[1])
east = float(bbox[2])
north = float(bbox[3])

center_lng = ((east - west) / 2) + west
center_lat = ((north - south) / 2) + south

kml = ( 
   '<?xml version="1.0" encoding="UTF-8"?>\n'
   '<kml xmlns="http://www.opengis.net/kml/2.2">\n'
   '<Placemark>\n'
   '<name>View-centered placemark</name>\n'
   '<Point>\n'
   '<coordinates>%.6f,%.6f</coordinates>\n'
   '</Point>\n'
   '</Placemark>\n'
   '</kml>'
   ) %(center_lng, center_lat)

print 'Content-Type: application/vnd.google-earth.kml+xml\n'
print kml

Et voici le KML du lien réseau qui charge le script Python:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Folder>
<name>Network Links</name>
<visibility>0</visibility>
<open>0</open>
<description>Network link example 2</description>
<NetworkLink>
<name>View Centered Placemark</name>
<visibility>0</visibility>
<open>0</open>
<description>The view-based refresh allows the remote server to calculate
the center of your screen and return a placemark.</description>
<refreshVisibility>0</refreshVisibility>
<flyToView>0</flyToView>
<Link>
<href>http://yourserver.com/cgi-bin/viewCenteredPlacemark.py</href>

<refreshInterval>2</refreshInterval>
<viewRefreshMode>onStop</viewRefreshMode>
<viewRefreshTime>1</viewRefreshTime>
</Link>
</NetworkLink>
</Folder>
</kml>

Le principe illustré dans cet exemple peut être utilisé pour des applications très complexes. Par exemple, si vous disposez d'une base de données d'informations géographiques, vous pouvez extraire les coordonnées de la visionneuse, appeler la base de données pour obtenir les données spécifiques à la vue et les renvoyer à Google Earth au format KML.

Trois types MIME KML

Pour répondre à une requête provenant de Google Earth (ou de n'importe quel navigateur Earth), un serveur KML doit suivre un certain ensemble de règles afin que Google Earth puisse interpréter correctement ses réponses.

En cas de réussite, le serveur doit renvoyer un code de réponse HTTP 200 et définir le type de contenu de la réponse sur un type MIME approprié, comme décrit ici.

Google Earth lit les fichiers KML et KMZ. Le type MIME des fichiers KML est

  • application/vnd.google-earth.kml+xml

Le type MIME des fichiers KMZ est

  • application/vnd.google-earth.kmz

Pour Apache, ajoutez les lignes suivantes au fichier httpd.conf:

  • AddType application/vnd.google-earth.kml+xml .kml
  • AddType application/vnd.google-earth.kmz .kmz

Consultez la documentation Microsoft pour en savoir plus sur la configuration des types MIME sur le serveur IIS de Microsoft.

Le corps de la réponse doit contenir des données KML valides, y compris la déclaration XML (<?xml version="1.0" encoding="UTF-8"?>). Si le serveur renvoie un fichier KML non valide, le lien réseau s'arrête, se désactive et génère un message d'erreur.

Et maintenant ?

On continue ? Consultez le Guide du développeur, qui décrit les principales fonctionnalités KML. Consultez également la référence KML pour en savoir plus sur des éléments spécifiques.