Kameras

Aktualisiert im Februar 2009: Erwähnung von <gx:heightMode>, <gx:TimeStamp> und <gx:TimeSpan>.

<Camera> wurde mit KML 2.2 eingeführt und bietet eine zusätzliche Möglichkeit, den Blickwinkel des Beobachters und die zugehörigen Ansichtsparameter anzugeben. <Camera> ähnelt <LookAt>, da beide Elemente die Position und Ausrichtung einer virtuellen Kamera definieren, die die Erde betrachtet. Der Unterschied besteht darin, dass LookAt die Ansicht in Bezug auf den POI angibt, der gerade angezeigt wird. Die Kamera gibt dagegen die Ansicht in Bezug auf die Position und Ausrichtung des Betrachters an.

Sowohl <LookAt> als auch <Camera> gehen vom Element <AbstractView> aus, das ein abstrakter Basistyp ist. <Camera> und <LookAt> sind in Bezug auf die Verwendung in einer KML-Datei identisch – als untergeordnetes Element eines beliebigen Elements, das aus <Feature> (Ortsmarkierung, ScreenOverlay, GroundOverlay, PhotoOverlay, Folder, Document, NetworkLink) abgeleitet ist, oder als untergeordnetes Element von <NetworkLinkControl>. Sie können in einem Feature entweder ein <Camera> oder ein <LookAt> verwenden, aber nicht beides gleichzeitig. Der aktuelle Blickwinkel kann also nur von einer virtuellen Kamera festgelegt werden.

Unterschiede zwischen <Camera> und <LookAt>

Das neue <Camera>-Element bietet mehr Flexibilität bei der Festlegung der Ansicht. Vor allem können Sie die Kameraansicht neigen, sodass Sie über den Horizont in den Himmel blicken. <Camera> bietet eine vollständige Steuerung der Freiheitsgrade über die sechs Freiheitsgrade. Sie können die Kamera also im Weltraum positionieren und dann um die x-, y- und z-Achse drehen. Wenn keine Rotationen angegeben sind, sind die beiden Elemente äquivalent:

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

Im folgenden Abschnitt wird das <LookAt>-Element kurz beschrieben, damit Sie seine Verwendung mit dem neuen <Camera>-Element vergleichen können.

Rezension zu <LookAt>

Das Element <LookAt> gibt den Punkt auf der Erde an, der gerade betrachtet wird, die Entfernung des Blickwinkels vom POI und den Blickwinkel. Hier ist die Syntax für dieses Element:

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

Das folgende Diagramm veranschaulicht, wie der Aussichtspunkt <LookAt> aufgebaut wird:

Diagramm mit Parametern für das LookAt-Element

Das Element <LookAt> gibt Antworten auf die folgenden Fragen an:

Question
Spezifikation in <LookAt>
Welche Punkte sollte ich mir ansehen? <Längengrad>, <Breitengrad>,<Höhe>, <Höhenstil>
Wie weit ist es vom Aussichtspunkt entfernt? <range>
Ist die Ansicht so ausgerichtet, dass Norden ganz oben steht? Wenn ja, verwenden Sie den Standardwert <heading> von 0. Wenn nicht, geben Sie eine <heading>-Rotation von >0 bis 360° an.
Ist die Erde direkt aus der Perspektive zu sehen? Wenn ja, verwenden Sie den Standardwert <tilt>. Falls nein, die Kamera ist nach oben zum Horizont geneigt. Geben Sie eine <Neigung> ≤ 90° an.
90° blickt gerade am Horizont gerade. Wenn Sie weit entfernt und <Neigung> gleich 90 ° sind, sehen Sie die Erdoberfläche möglicherweise überhaupt nicht.

Beispiel

Hier ein Beispiel für <Placemark> mit einem <LookAt>-Element:

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

Hier ist die Ortsmarkierung, die in Google Earth angezeigt wird:

Screenshot der Ortsmarkierung Machu Picchu in Google Earth

Wenn sich Ihre Blickrichtung über den Planeten erstreckt, verwenden Sie das Element <LookAt>, da es sich so einfacher angeben lässt als <Camera>.

Untergeordnete Elemente von <Camera>

Das <Camera>-Element bietet die Möglichkeit, den Augenpunkt an einer beliebigen Stelle im Weltraum zu positionieren und die Ansicht in eine beliebige Richtung zu drehen. Hier ist die Syntax für dieses Element:

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

Das Element <Camera> gibt Antworten auf die folgenden Fragen an:

Question
Spezifikation in <Camera>
Wo befindet sich die Kamera im Weltraum? Positionieren Sie die Kamera an dem durch <Längengrad>, <Breitengrad>, <Höhe> und <Höhenstil> angegebenen Punkt. Im Allgemeinen ist es nicht empfehlenswert, eine Kamera auf dem Boden zu platzieren.
Ist die Kamera so ausgerichtet, dass Norden oben im Sichtfeld ist? Wenn ja, verwenden Sie den Standardwert <heading> von 0. Wenn nicht, drehe die Kamera gemäß den Punkten des Kompasses von >0 auf 360°.
Sieht die Kamera gerade nach unten zur Erde? Wenn ja, verwenden Sie den Standardwert <tilt> von 0. Falls nicht, drehe die Kamera von 0 bis 180°, um den Drehwinkel um die X-Achse festzulegen. Negative Werte für <tilt> sind zulässig, führen aber zu einer verkehrten Ansicht.
Ist die Kameraebene im Sichtfeld? Wenn ja, verwenden Sie den Standardwert <roll> von 0. Hinweis: Der Wert für <roll>, wenn er als untergeordnetes Element von <Camera> verwendet wird, ist normalerweise 0. Sie können einen Wert zwischen −180 und +180° angeben, dies ist jedoch selten.

Das folgende Diagramm zeigt die Achsen X, Y und Z, die an der virtuellen Kamera angebracht sind.

  • Die X-Achse zeigt auf die rechte Seite der Kamera und wird als rechter Vektor bezeichnet.
  • Die y-Achse legt die Aufwärtsrichtung relativ zum Bildschirm fest und wird als up-Vektor bezeichnet.
  • Die Z-Achse zeigt von der Bildschirmmitte zum Augenpunkt. Die Kamera blickt auf die −Z-Achse, die als Ansichtsvektor bezeichnet wird.

Hier ist ein Beispiel für die Einrichtung einer <Camera> als Ausgangspunkt in einem <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>

Dieser Standpunkt wird in Google Earth so dargestellt:

Zeit in abstrakten Ansichten

<Camera> und <LookAt> können Zeitinformationen enthalten, die sich auf historische Bilder, das Sonnenlicht und zeitgesteuerte Objekte auswirken. <gx:TimeSpan> und <gx:TimeStamp> werden in abstrakten Ansichten verwendet und sind im Namespace der Google-Erweiterung enthalten. Weitere Informationen finden Sie im Kapitel Time and Animation (Zeit und Animation) im Abschnitt Time with SummaryViews (Zeit mit abstrakten Ansichten).

Beispiele

Die folgenden Beispiele veranschaulichen verschiedene <Camera>-Rotationen.

Überschrift

Dieses Beispiel zeigt eine <Camera> mit einer Ausrichtung von 90 Grad (Ost) und einer Neigung von 90 Grad (Richtung Horizont). Die Kamera wird in einer Höhe von 100 Metern platziert.

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

Hier ist das Ergebnis in Google Earth:

Neigen

Im folgenden Beispiel wird eine <Camera> mit einer Neigung von 90 Grad verwendet, die auf den Horizont ausgerichtet ist. Für <heading>, <altitude>, <altitudeMode> und <roll> werden Standardwerte verwendet.

<Camera> enthält einen <gx:TimeStamp>-Wert, der sich auf historische Bilder und Sonnenlicht sowie auf die Anzeige von Objekten mit Zeitkennzeichnung auswirkt. Im Bild unten wurde die Sonne eingeschaltet und am <Camera> um 15:29 Uhr UTC am 1. Januar 2009 um 7:30 Uhr Ortszeit angezeigt.

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

Dieser Standpunkt wird in Google Earth so dargestellt:

Rollen

Dieses Beispiel enthält ein <roll>-Element mit einem Wert von 45 Grad, bei dem die Kamera nach links bewegt wird.

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

Reihenfolge der Transformationen

Die Reihenfolge der Rotation ist wichtig. Standardmäßig blickt die Kamera gerade nach unten zur −Z-Achse in Richtung der Erde. Vor dem Ausführen der Drehungen wird die Kamera entlang der Z-Achse in <altitude> verschoben. Die Reihenfolge der Transformationen sieht so aus:

  1. <height>: entlang der Z-Achse in <height> übersetzen
  2. <head>: um die Z-Achse drehen
  3. <Neigung>: um die X-Achse drehen.
  4. <roll>: Um die Z-Achse drehen (noch einmal)

Beachten Sie, dass bei jeder Anwendung einer Drehung zwei der Kameraachsen ihre Ausrichtung ändern.

Nach oben