Aggiornamento di febbraio 2009: aggiunta di menzione di <gx:HEIGHTMode>, <gx:TimeStamp> e <gx:TimeSpan>.
Introdotto con KML 2.2, <Camera> fornisce un modo aggiuntivo per specificare il punto di vista dell'osservatore e i parametri di visualizzazione associati. <Camera> è simile a <LookAt>, poiché entrambi gli elementi definiscono la posizione e l'orientamento di una videocamera virtuale che guarda la Terra. La differenza è che LookAt specifica la visualizzazione in termini di punto di interesse visualizzato. La videocamera, invece, specifica la visualizzazione in termini di posizione e orientamento dello spettatore.
<LookAt> e <Camera> sono estesi dall'elemento <AbstractView>, che è un tipo astratto di base. <Camera> e <LookAt> sono identici nel modo in cui vengono utilizzati in un file KML, ovvero come elementi secondari di qualsiasi elemento derivato da <Feature> (segnaposto, overlay schermo, Ground Overlay, PhotoOverlay, Folder, Documento, NetworkLink) o come elementi secondari di <NetworkLinkControl> Puoi utilizzare <Camera> o <LookAt> all'interno di una funzionalità, ma non entrambi contemporaneamente (ossia, solo una fotocamera virtuale può specificare il punto di vista corrente).
Differenze tra <Camera> e <LookAt>
Il nuovo elemento <Camera> offre un'ulteriore flessibilità nel modo in cui specifichi la vista. Cosa ancora più importante, puoi inclinare la visualizzazione della videocamera in modo da osservare l'orizzonte del cielo. <Camera> offre un controllo completo della libertà di sei gradi sulla visualizzazione, così puoi posizionare la videocamera nello spazio e ruotarla attorno agli assi x, y e z. Se non viene specificata alcuna rotazione, i due elementi sono equivalenti:
<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 sezione seguente offre una breve recensione dell'elemento <LookAt> per consentirti di confrontarne l'utilizzo con quello del nuovo elemento <Camera>.
Recensione su <LookAt>
L'elemento <LookAt> specifica il punto sulla Terra visualizzato, la distanza dal punto di interesse dal punto di interesse e l'angolo di campo. Ecco la sintassi per questo elemento:
<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>
Il seguente diagramma illustra la struttura del punto di vista <LookAt>:
L'elemento <LookAt> specifica le risposte alle seguenti domande:
Domanda |
Specifica in <LookAt> |
| Che cosa sto guardando? | <longitudine>, <latitudine>,<altitudine>, <modalitàmodalità> |
| Quanto è distante il punto di vista dal punto d'interesse? | <intervallo> |
| La visualizzazione è orientata in modo che il Nord sia in cima? | Se sì, utilizza il valore predefinito <header> 0. In caso contrario, specifica una rotazione <intestazione> da >0 a 360° |
| La vista è dritta verso la Terra? | Se Sì, utilizza il valore predefinito<tilt>. Se No, la fotocamera è inclinata verso l'alto verso l'orizzonte; specifica una rotazione <tilt> ≤ 90°. 90° guarda dritto lungo l'orizzonte. Potresti non vedere affatto la superficie del pianeta se sei distante e <tilt> è uguale a 90°. |
Esempio
Di seguito è riportato un esempio di <Placemark> contenente un elemento <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>
Ed ecco il segnaposto mostrato in Google Earth:
Se la direzione di visualizzazione si interseca con il pianeta, utilizza un elemento <LookAt>, poiché è leggermente più facile da specificare rispetto a <Camera>.
Elementi secondari di <Camera>
L'elemento <Camera> offre la possibilità di posizionare il punto di vista in qualsiasi punto dello spazio e di ruotare la vista in qualsiasi direzione. Ecco la sintassi per questo elemento:
<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'elemento <Camera> specifica le risposte alle seguenti domande:
Domanda |
Specifica in <Camera> |
| Dove si trova la videocamera nello spazio? | Posiziona la videocamera nel punto specificato da <longitudine>, < latitudine>, <altitudine> e <altitudine. |
| La fotocamera è orientata in modo che il nord sia in cima alla visuale? | Se sì, utilizza il valore predefinito <header> 0. In caso contrario, ruota la videocamera da >0 a 360°, in base ai punti della bussola. |
| La videocamera sta puntando verso il basso la Terra? | Se Sì, utilizza il valore predefinito <tilt> pari a 0. Se la risposta è No, ruota la videocamera da 0 a 180° per specificare l'angolo di rotazione attorno all'asse X. I valori negativi per <tilt> sono consentiti, ma si trovano in una visualizzazione capovolta. |
| La fotocamera è a livello di vista? | Se Sì, utilizza il valore predefinito <roll> pari a 0. Nota: il valore di <roll> quando viene usato come elemento secondario di <Camera> è in genere pari a 0. Puoi specificare un valore compreso tra -180 e +180 °, ma questo utilizzo è raro. |
Il seguente diagramma mostra gli assi X, Y e Z, che sono collegati alla videocamera virtuale.
- L'asse X punta a destra della videocamera ed è chiamato vettore destro.
- L'asse Y definisce la direzione "su" rispetto allo schermo e viene chiamato vettore verso l'alto.
- L'asse Z punta dal centro dello schermo verso il punto d'occhio. La fotocamera guarda verso il basso sull'asse -Z, denominato vettore di visualizzazione.

Ecco un esempio di configurazione di un <Camera> come punto di partenza iniziale di un <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>
Ecco cosa viene visualizzato in Google Earth:
Tempo in AbstractViews
<Camera> e <LookAt> possono contenere informazioni sull'ora, che influiscono su immagini storiche, luce solare ed eventuali oggetti con tag temporali. <gx:TimeSpan> e <gx:TimeStamp> sono utilizzati in AbstractViews e sono contenuti nello spazio dei nomi delle estensioni di Google. Per ulteriori informazioni, consulta la sezione sul tempo con AbstractViews del capitolo Time and Animation.
Esempi
I seguenti esempi illustrano rotazioni di <Camera> diverse.
Titolo
Questo esempio mostra una <Camera> con un'intestazione di 90 gradi (Est) e un'inclinazione di 90 gradi (guardando verso l'orizzonte). La videocamera viene posizionata a un'altitudine di 100 m.
<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>
Ecco il risultato in Google Earth:
Inclina
L'esempio seguente utilizza una <Camera> con un'inclinazione pari a 90°, che guarda verso l'orizzonte. Utilizza i valori predefiniti per <heading>, <altitude>, <altitudeMode> e <roll>.
<Camera> contiene un valore <gx:TimeStamp>, che influisce sulle immagini storiche e sulla luce solare, nonché sulla visualizzazione di eventuali oggetti con tag temporali. Nell'immagine seguente, la luce del sole è stata attivata e il <Camera> sta visualizzando la posizione alle 15:29 UTC del 1° gennaio 2009 (7:30, ora 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>
Ecco cosa viene visualizzato in Google Earth:
Rollio
In questo esempio è incluso un elemento <roll> con un valore di 45°, che porta la fotocamera a sinistra.
<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>
Ordine delle trasformazioni
L'ordine di rotazione è importante. Per impostazione predefinita, la videocamera guarda verso il basso sull'asse -Z verso la Terra. Prima dell'esecuzione delle rotazioni, la fotocamera viene tradotta lungo l'asse Z in <altitude>. L'ordine delle trasformazioni è il seguente:
- <altitudine>: traduci l'asse Z in <altitudine>
- <intestazione>: ruota attorno all'asse Z.
- <tilt>: ruota attorno all'asse X.
- <roll>: ruota di nuovo intorno all'asse Z.
Ogni volta che viene applicata una rotazione, due assi della videocamera ne modificano l'orientamento.