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.