Video didattici su KML

Il KML è un formato di file utilizzato per visualizzare i dati geografici in un browser Earth, come Google Earth. Il linguaggio KML utilizza una struttura formata da tag che presenta elementi nidificati e attributi e si basa sullo standard XML. Tutti i tag sono sensibili alle maiuscole e devono essere visualizzati esattamente come elencati nei riferimenti KML. che indica i tag facoltativi. All'interno di un dato elemento, i tag devono essere visualizzati nell'ordine indicato nella Guida di riferimento.

Se non hai mai utilizzato KML, esplora questo documento e i file di esempio associati (SamplesInearth) per iniziare a conoscere la struttura di base di un file KML e i tag più utilizzati. La prima sezione descrive le funzionalità che possono essere create con l'interfaccia utente di Google Earth. Queste funzionalità includono segnaposto, descrizioni, overlay al suolo, percorsi e poligoni. La seconda sezione descrive le funzionalità che richiedono la creazione di KML con un editor di testo. Quando un file di testo viene salvato con l'estensione .ZIP o .pdfs, i browser di Earth sanno come visualizzarlo.

Suggerimento: per visualizzare il "codice" KML per un elemento in Google Earth, puoi semplicemente fare clic con il pulsante destro del mouse sull'elemento nel visualizzatore 3D di Google Earth e selezionare Copia. Dopodiché incolla i contenuti degli appunti in un qualsiasi editor di testo. La funzionalità visiva visualizzata in Google Earth viene convertita nell'equivalente del testo KML. Assicurati di sperimentare questa funzionalità.

Tutti gli esempi descritti qui sono nel file Esempi di KML. Scarica il file per visualizzare gli esempi in Google Earth.

Per ulteriori informazioni

Il riferimento KML 2.2 fornisce dettagli sul formato del file KML. Se hai familiarità con XML, ti potrebbe interessare anche lo schema KML 2.2.

Per una discussione su come utilizzare alcune delle funzionalità principali di KML, consulta la Guida per gli sviluppatori.

Sommario

Documenti KML di base

I tipi di documenti KML più semplici sono quelli che possono essere creati direttamente in Google Earth, vale a dire che non è necessario modificare o creare alcun file KML in un editor di testo. Segnaposto, overlay del terreno, percorsi e poligoni possono essere creati direttamente in Google Earth.

Segnaposto

Il segnaposto è una delle funzionalità di uso comune di Google Earth. Segna una posizione sulla superficie terrestre, utilizzando una puntina gialla come icona. Il segnaposto più semplice include solo un elemento <Point>, che specifica la posizione del segnaposto. Puoi specificare un nome e un'icona personalizzata per il segnaposto, nonché aggiungere altri elementi geometrici.

Apri il file Esempi di KML in Google Earth ed espandi la sottocartella Segnaposto. Questa cartella include tre diversi tipi di segnaposto: semplice, fluttuante ed estruso. Il codice KML per il segnaposto semplice ha il seguente aspetto:

<?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 struttura di questo file è suddivisa come segue:

  • Un'intestazione XML. che rappresenta la riga 1 in ogni file KML. Non possono esserci spazi o altri caratteri prima di questa riga.
  • Una dichiarazione dello spazio dei nomi KML. che rappresenta la riga 2 in ogni file KML 2.2.
  • Un oggetto segnaposto contenente i seguenti elementi:
    • Un nome utilizzato come etichetta del segnaposto
    • Una descrizione visualizzata nel "palloncino" allegata al segnaposto.
    • Un punto che specifica la posizione del segnaposto sulla superficie terrestre (longitudine, latitudine e altitudine facoltativa)

Se ti stai chiedendo dove si trova il segnaposto, è proprio sopra l'edificio 41 di Google, dove abbiamo sviluppato Google Earth!

Quello che gli utenti considerano comunemente un "segnaposto" in Google Earth è in realtà un elemento <Segnaposto> con un elemento secondario <Point> in KML. Un segnaposto per punto è l'unico modo per disegnare un'icona e un'etichetta nel visualizzatore 3D di Google Earth. Per impostazione predefinita, l'icona è la consueta puntina gialla. In KML, un <Segnaposto> può contenere uno o più elementi geometrici, ad esempio LineaStringa, Poligono o Modello. Tuttavia, solo un <Segnaposto> con un Punto può avere un'icona e un'etichetta. Il punto viene utilizzato per posizionare l'icona, ma non esiste una rappresentazione grafica del punto stesso.

HTML descrittivo nei segnaposto

Il file Esempi di file KML contiene un esempio di quasi tutto ciò che puoi fare con il testo del segnaposto. Puoi aggiungere link, dimensioni dei caratteri, stili e colori e specificare l'allineamento e le tabelle del testo. Se vuoi visualizzare l'elenco completo, copia e incolla l'esempio di segnaposto "HTML descrittivo" (nella cartella Stili e markup) in un editor di testo.

Markup automatico in Google Earth (versione 4.0 e successive)

Google Earth 4.0 dispone di una funzionalità di markup automatico che converte automaticamente il testo, ad esempio www.google.com, in link ipertestuali attivi su cui l'utente può fare clic. Il testo all'interno del tag <description>, il tag <Snippet> e l'elemento <text> di <BalloonStyle> vengono tutti trasformati automaticamente in link ipertestuali HTTP standard. Non devi aggiungere personalmente i tag <a href= ...>.

Utilizzo dell'elemento CDATA

Se vuoi scrivere codice HTML standard in un tag <description>, puoi inserirlo in un tag CDATA. In caso contrario, le parentesi angolari devono essere scritte come riferimenti alle entità per evitare che Google Earth analizzi in modo errato il codice HTML. Ad esempio, il simbolo > viene scritto come &gt; e il simbolo < viene scritto come &lt;. Questa è una funzionalità standard di XML e non è univoca per Google Earth.

Considera la differenza tra il markup HTML con i tag CDATA e senza CDATA. Innanzitutto, ecco la <description> con i tag 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>

Di seguito è riportato il tag <description> senza tag CDATA, in modo che i caratteri speciali debbano utilizzare riferimenti alle 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>

Overlay del terreno

Gli overlay terrestri consentono di "nascondere" un'immagine rispetto ai rilievi del pianeta. L'elemento <Icon> contiene il link al file .jpg con l'immagine overlay. Ecco un esempio di overlay del suolo nel file Esempi di file KML, che mostra l'eruzione dell'Etna nel 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>

Nota che il file inizia con le stesse due righe del primo esempio: l'intestazione XML e la dichiarazione dello spazio dei nomi KML.

In questo esempio viene utilizzata una cartella (intitolata "Sovrapposizioni del terreno") come meccanismo per raggruppare ed etichettare i contenuti. Nota come viene visualizzata la cartella nel riquadro Places quando carichi il file Esempi di KML in Google Earth.

Il posizionamento di una sovrapposizione del terreno è controllato dal tag <LatLonBox>. Vengono forniti valori limite per le latitudini nord e sud e per le longitudini est e ovest. Inoltre, vengono forniti valori di rotazione per le immagini il cui asse y non corrisponde alla griglia nord. In questo esempio viene utilizzata un'immagine JPEG per l'overlay. Google Earth supporta anche i formati BMP, GIF, TIFF, TGA e PNG.

Percorsi

È possibile creare molti tipi di percorsi diversi in Google Earth ed è facile utilizzare i propri dati in modo creativo. In KML, viene creato un percorso da un elemento <LineString>. Dai un'occhiata all'esempio "Assenza assoluta" nella cartella Percorsi e puoi vedere come è stata generata la forma dal seguente codice:

<?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>

Puoi notare come è davvero una sola linea tracciata a un'altezza dal suolo. Il tag <tessellate> suddivide la linea in parti più piccole e il tag <extrude> estende la linea fino al suolo.

Poligoni

Puoi utilizzare i poligoni per creare edifici semplici e altre forme. Dai un'occhiata alla cartella poligoni nel file Esempi di file KML per alcuni esempi.

L'esempio del Pentagono viene generato a partire da semplici gusci interni ed esterni, che vengono poi estratti al suolo. Ecco il codice :

<?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 Documenti KML avanzati

In questa sezione vengono descritti alcuni elementi KML che devono essere creati utilizzando un editor di testo, ad esempio gli stili condivisi per la geometria, le icone evidenziate per i segnaposto e gli overlay dello schermo. La creazione manuale di KML è un po' più avanzata rispetto all'utilizzo dell'interfaccia di Google Earth per creare e modificare funzionalità, ma con un po' di pratica, quasi tutti gli utenti si sentono a proprio agio a modificare file KML per aggiungere questi effetti.

Stili per la geometria

Dopo aver creato le funzionalità in Google Earth ed esaminato il codice KML generato da Google Earth, noterai che gli stili sono un aspetto importante della modalità di visualizzazione dei tuoi dati. Gli utenti esperti vogliono imparare a definire i propri stili.

Se definisci uno stile all'inizio di un documento KML e definisci anche un ID, puoi utilizzare questo stile in Geometria, Segnaposto e Overlay definiti altrove nel Documento. Poiché più di un elemento può utilizzare lo stesso stile, gli stili definiti e utilizzati in questo modo sono chiamati stili condivisi. Puoi definire un determinato stile una volta e poi potrai farvi riferimento più volte utilizzando l'elemento <styleUrl>. Se la definizione dello stile si trova all'interno dello stesso file, anteponi l'ID dello stile al simbolo #. Se la definizione dello stile è in un file esterno, includi l'URL completo nell'elemento <styleUrl>.

Il file Esempi di KML contiene vari stili condivisi, ciascuno definito con un ID all'inizio del file. Tieni presente che è più semplice se gli ID sono stringhe descrittive in modo da poterne capire facilmente l'effetto. Di seguito è riportato un esempio di stile ("transBluePoly") che definisce un colore blu trasparente per i volti dei poligoni e una larghezza delle linee di 1,5 (e colore predefinito del bianco) per i bordi del poligono. Questo stile viene utilizzato dall'edificio 41 nell'esempio del campus di Google (nella cartella poligoni):

<?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>

Tieni presente che l'elemento <styleUrl> è un elemento secondario di <Segnaposto> (non della Geometria interessata).

Stili per le icone evidenziate

L'opzione "Icona evidenziata" nella cartella Stili e markup mostra come creare un effetto di rollover con un file KML. Il documento definisce due stili, uno per "normalSegnaposto" e uno per "highlightSegnaposto" (mostrato quando il cursore passa sopra l'icona). L'elemento <StyleMap> ha due coppie chiave-valore che mappano ogni stile icona a uno stato dell'icona. Esistono due stati dell'icona: normale ed evidenziazione.

Di seguito sono riportati i passaggi di base mostrati qui:

  1. Definisci uno <Style> per l'icona normale del segnaposto e assegnagli un ID (qui "normale segnaposto"). <Style> include un elemento <Icon> con <href> all'immagine effettiva da utilizzare, come mostrato di seguito.
  2. Definisci uno <Style> per l'icona di evidenziazione del segnaposto e assegnagli un ID (qui "highlightSegnaposto").
  3. Crea l'elemento <StyleMap> e assegnagli un ID ("exampleStyleMap"). Il segnaposto farà riferimento a questo ID.
  4. Nell'elemento <StyleMap>, specifica "#normalSegnaposto" per lo stato normale.
  5. Nell'elemento <StyleMap>, specifica "#highlightSegnaposto" per lo stato highlight.
  6. Nel segnaposto, aggiungi un elemento <styleUrl> che faccia riferimento a "#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>

Overlay schermo

Gli overlay schermo non possono essere creati direttamente in Google Earth e pertanto sono più difficili da creare rispetto agli overlay sul suolo. Una raccolta completa di esempi è inclusa nella cartella Overlay schermo nel file Esempi KML.

Ad esempio, abilita la cartella "Posizionamento assoluto: in alto a sinistra" nel file Esempi di file KML: vedrai un overlay dello schermo in alto a sinistra nella finestra di visualizzazione. È stato creato con il seguente codice KML:

<?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>

Il posizionamento è controllato mappando un punto nell'immagine specificato da <overlayXY> a un punto sullo schermo specificato da <screenXY>. In questo caso, l'angolo in alto a sinistra dell'immagine (0,1) è stato reso coincidente con lo stesso punto sullo schermo.

Esamina gli altri esempi nella cartella per verificare come è possibile ottenere altre posizioni fisse e per creare immagini di dimensioni dinamiche con le dimensioni dello schermo. Tieni presente che xunits e yunits possono anche essere specificate come "pixel" per il controllo della precisione. Per ulteriori informazioni, consulta la documentazione di riferimento su KML 2.2.

Un link di rete contiene un elemento <Link> con <href> (un riferimento ipertesto) che carica un file. <href> può essere una specifica file locale o un URL assoluto. Nonostante il nome, <NetworkLink> non carica necessariamente i file dalla rete.

L'elemento <href> in un link specifica la posizione di uno dei seguenti elementi:

  • Un file immagine utilizzato dalle icone in stile icona, overlay al suolo e overlay sullo schermo.
  • Un file modello utilizzato nell'elemento <Model>
  • Un file KML o WebRTC caricato da un link di rete

Il file specificato può essere un file locale o un file su un server remoto. Nella forma più semplice, i link di rete sono un modo utile per suddividere un file KML di grandi dimensioni in file più piccoli e più gestibili sullo stesso computer.

Finora, tutti i nostri esempi hanno richiesto che il codice KML venga inviato a Google Earth dalla macchina locale. I link di rete ti consentono di pubblicare contenuti da una località remota e vengono comunemente utilizzati per distribuire dati a un numero elevato di utenti. In questo modo, se i dati devono essere modificati, devono essere modificati solo nella località di origine e tutti gli utenti ricevono automaticamente i dati aggiornati.

Script CGI per KML

Oltre a puntare a file contenenti dati statici, l'elemento <href> di un link di rete può puntare ai dati generati dinamicamente, ad esempio da uno script CGI situato su un server di rete. Con una certa conoscenza di un linguaggio di scripting come PHP, Python o Perl, puoi creare uno script che fornisca un flusso (o un file) di dati KML a ciascun link di rete.

Per la pubblicazione del file KML tramite una CGI di rete sono necessari due elementi:

Quando viene effettuata una chiamata dal client (Google Earth) al server, il server deve (1) restituire un codice di risposta HTTP 200 e (2) impostare il tipo di contenuti della risposta su text/plain o application/vnd.google-earth.kml+xml.

La risposta deve essere in formato KML valido. Per le applicazioni complesse, è molto importante gestire in modo appropriato gli errori.

Suggerimento: un modo semplice per gestire gli errori è analizzare l'errore del server come il testo di un nome di cartella. Ad esempio, puoi fare in modo che il server restituisca <Folder><name>database inaccessible</name></Folder> come stringa. Si tratta di un messaggio più informativo (e più intuitivo) rispetto all'interruzione della connessione.

I seguenti esempi utilizzano Python, ma sono ugualmente validi in qualsiasi altro linguaggio di script.

Generazione di un segnaposto casuale

Lo script Python riportato di seguito genera valori interi casuali per latitudine e longitudine, quindi inserisce tali valori nell'elemento < Coordinates> di un elemento <Point>. Ogni volta che il link di rete viene aggiornato, lo script Python viene eseguito di nuovo e genera KML con nuovi valori di latitudine e longitudine.

#!/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

Di seguito è riportato un esempio di file KML contenente un link di rete che carica questo 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>

Query di aggiornamento basate sulle visualizzazioni

Un link di rete standard è un link unidirezionale: i dati passano solo dal server a Google Earth. L'aggiornamento basato sulle visualizzazioni fa sì che la comunicazione sia bidirezionale. Quando l'aggiornamento basato sulle visualizzazioni è attivo, Google Earth restituisce le coordinate della vista al server a un orario specificato. Il problema può essere ogni n secondi, minuti o ore oppure una volta trascorso un certo periodo di tempo da quando la visualizzazione viene interrotta. Vedi <viewRefreshMode> nel riferimento KML 2.2.

Le coordinate vengono restituite al server mediante un metodo GET HTTP che aggiunge le coordinate nel seguente modo (si tratta delle informazioni predefinite del riquadro di delimitazione):

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

Se la richiesta è stata effettuata mentre l'utente stava guardando in giù a San Francisco, le coordinate potrebbero avere il seguente aspetto:

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

Questa funzionalità può essere utilizzata per alcune applicazioni molto creative, ma per iniziare, ecco un semplice esempio.

Monitoraggio di un punto direttamente sotto la tua vista

Il seguente script Python lato server analizza il messaggio di ritorno inviato da Google Earth e risponde con un segnaposto al centro della schermata. Ogni volta che il link di rete viene aggiornato, viene generato un nuovo segnaposto.

#!/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

Ed ecco il KML per il link di rete che carica lo 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>

Il principio illustrato in questo esempio può essere utilizzato per alcune applicazioni molto complesse. Ad esempio, se disponi di un database di informazioni geografiche, puoi estrarre le coordinate del visualizzatore, effettuare una chiamata al database per i dati specifici della vista e restituirla a Google Earth come KML.

3 tipi KML MIME

Quando rispondi a una richiesta di Google Earth (o di qualsiasi browser Earth), un server KML deve seguire un determinato insieme di regole per consentire a Google Earth di interpretare correttamente le sue risposte.

Se l'operazione ha esito positivo, il server deve restituire un codice di risposta HTTP 200 e impostare il tipo di contenuti della risposta su un tipo MIME appropriato, come descritto qui.

Google Earth legge i file KML e TTM. Il tipo MIME per i file KML è

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

Il tipo MIME per i file YAML è

  • application/vnd.google-earth.kmz

Per Apache, aggiungi queste righe al file httpd.conf:

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

Per maggiori dettagli sulla configurazione dei tipi MIME su IIS di Microsoft, consulta la documentazione di Microsoft.

Il corpo della risposta deve contenere dati KML validi, inclusa la dichiarazione XML (<?xml version="1.0" encoding="UTF-8"?>). Se il server restituisce un file KML non valido, il link di rete verrà interrotto, disattivato e verrà visualizzato un messaggio di errore.

Passaggi successivi

Vuoi seguire altri lab? Consulta la guida per gli sviluppatori, che descrive le principali funzionalità KML. Inoltre, consulta la documentazione di riferimento KML per informazioni su elementi specifici.