Macchine fotografiche

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

diagramma che mostra i parametri per l&#39;elemento 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:

screenshot del segnaposto Machu Picchu 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:

  1. <altitudine>: traduci l'asse Z in <altitudine>
  2. <intestazione>: ruota attorno all'asse Z.
  3. <tilt>: ruota attorno all'asse X.
  4. <roll>: ruota di nuovo intorno all'asse Z.

Ogni volta che viene applicata una rotazione, due assi della videocamera ne modificano l'orientamento.

Torna all'inizio