Zaktualizowano w lutym 2009 roku: dodano wzmianki o obiektach <gx:altitudeMode>, <gx:TimeStamp> i <gx:TimeSpan>.
Wprowadzany z plików KML 2.2 element <Camera>
umożliwia dodatkowy sposób określenia punktu obserwacji i powiązanych parametrów widoku. <Camera>
jest podobny do <LookAt>
, bo oba elementy określają miejsce i orientację kamery wirtualnej, która widzi Ziemię. Różnica polega na tym, że LookAt określa widok pod kątem oglądanego miejsca. Natomiast aparat określa widok z uwzględnieniem położenia i orientacji odbiorcy.
Zarówno element <LookAt>
, jak i <Camera>
są rozszerzane względem elementu <AbstractView>
, który jest abstrakcyjnym podstawowym typem. Nazwy <Camera>
i <LookAt>
są identyczne pod względem użycia w pliku KML, tj. jako elementu potomnego dowolnego elementu pochodzącego z elementów <Feature>
(oznaczenie miejsca, nakładka, Okrągły, Zdjęcie, Folder, Dokument, NetworkLink) lub jako elementu potomnego elementu <NetworkLinkControl>
. W Funkcjach możesz używać jednocześnie funkcji <Camera>
lub <LookAt>
, ale nie obu naraz (obecnie tylko 1 kamera wirtualna może określać aktualny punkt widokowy).
Różnice między <Camera>
a <LookAt>
Nowy element <Camera>
zapewnia dodatkową elastyczność w określaniu widoku. Najważniejsze jest, aby przechylać widok kamery w taki sposób, aby spoglądał na horyzont. <Camera>
daje pełną 6-stopniową swobodę kontroli nad widokiem, dzięki czemu możesz umieścić kamerę w kosmosie, a potem go obrócić wokół osi X, Y i Z. Jeśli nie podasz obrotów, te 2 elementy będą równoważne:
<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>
W tej sekcji znajdziesz krótki przegląd elementu <LookAt>
, który pozwoli Ci porównać go z nowym elementem <Camera>
.
Opinia o: <LookAt>
Element <LookAt>
określa wyświetlany punkt na Ziemi, odległość punktu widokowego od ciekawego miejsca i kąt. Oto składnia tego elementu:
<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>
Ten diagram pokazuje, jak jest zbudowany punkt widokowy <LookAt>
:
Element <LookAt>
określa odpowiedzi na te pytania:
Pytanie |
Specyfikacja: <LookAt> |
Na co patrzę? | <długość geograficzna>, <szerokość>, <wysokość>, <tryb wysokości> |
Jak daleko jest punkt widokowy od miejsca? | <zakres> |
Czy widok jest ustawiony tak, aby na górze znajdował się termin „Północ”? | Jeśli tak, użyj domyślnej wartości <nagłówka> 0. Jeśli nie, określ rotację <nagłówka> od 0 do 360° |
Czy ten widok patrzy prosto w stronę Ziemi? | Jeśli tak, użyj wartości domyślnej <tilt>. Jeśli nie, aparat jest przechylony do góry w kierunku horyzontu. Ustaw obrót <tilt> ≤ 90°. 90° patrzy prosto wzdłuż horyzontu. (Jeśli nie jesteś w pobliżu, a <tilt> to 90°, możesz w ogóle nie zobaczyć powierzchni Ziemi.) |
Przykład
Oto przykład <Placemark>
zawierający element <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>
A oto oznaczenie miejsca widoczne w Google Earth:
Jeśli kierunek widoku przecina planetę, użyj elementu <LookAt>
, ponieważ jest on nieco łatwiejszy do określenia niż <Camera>
.
Elementy podrzędne elementu <Camera>
Element <Camera>
umożliwia umieszczanie punktu patrzenia w dowolnym miejscu i obracanie widoku w dowolnym kierunku. Oto składnia tego elementu:
<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>
Element <Camera>
określa odpowiedzi na te pytania:
Pytanie |
Specyfikacja: <Camera> |
Gdzie w kosmosie znajduje się kamera? | Ustaw kamerę w miejscu określonym przez wartości < ustalona długość geograficzna, <szerokość>, <wysokość> i <altitudeMode>. Ogólnie rzecz biorąc, nie jest łatwo ustawić kamerę na poziomie ziemi. |
Czy kamera jest ustawiona w orientacji północnej? | Jeśli tak, użyj domyślnej wartości <nagłówka> 0. Jeśli nie, zgodnie z punktami kompasu odwróć aparat z zakresu 0–360°. |
Czy kamera patrzy prosto w stronę Ziemi? | Jeśli tak, użyj domyślnej wartości <tilt> 0. Jeśli nie, obróć aparat od 0 do 180°, aby określić kąt obrotu wokół osi X. Wartości ujemne dla <tilt> są dozwolone, ale skutkują wyświetleniem do góry nogami. |
Czy poziom kamery jest widoczny podczas oglądania wydarzenia? | Jeśli tak, użyj domyślnej wartości <roll> 0. Uwaga: wartość tagu <roll> w przypadku tagu podrzędnego (<Camera> ) zwykle wynosi 0. Możesz zastosować wartość od -180 do +180°, ale jest to rzadkie. |
Poniższy diagram przedstawia osie X, Y i Z, które są dołączone do kamery wirtualnej.
- Oś Xkieruje w prawo i nazywa się prawy wektor.
- Oś Y definiuje kierunek „w górę” względem ekranu i nosi nazwę wektora w górę.
- Oś Z od środka ekranu do punktu oka. Kamera patrzy w oś -Z, co jest nazywane wektorem widoku.
Oto przykład konfiguracji elementu <Camera>
jako punktu początkowego w narzędziu <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>
Ten punkt widokowy wyświetla się w Google Earth:
Czas w widokach abstrakcyjnych
<Camera>
i <LookAt>
mogą zawierać informacje o czasie, które mają wpływ na zdjęcia historyczne, światło słoneczne i wszystkie obiekty oznaczone tagami czasu. <gx:TimeSpan>
i <gx:TimeStamp>
są używane w AbstractView i są zawarte w przestrzeni nazw rozszerzeń Google. Więcej informacji znajdziesz w sekcji Time with AbstractViews w rozdziale Time and Entertainment.
Przykłady
Te przykłady pokazują różne obroty w <Camera>
.
Nagłówek
W tym przykładzie widać kolumnę <Camera>
z nagłówkiem 90 stopni (wschód) i przechyleniem o 90 stopni (patrzący w kierunku horyzontu). Kamera jest umieszczona na wysokości 100 metrów.
<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>
Oto efekt w Google Earth:
Pochylenie
W poniższym przykładzie zastosowano zasadę <Camera>
z pochyleniem równym 90 stopni i skierującej na horyzont. Używa wartości domyślnych dla <heading>
, <altitude>
, <altitudeMode>
i <roll>
.
<Camera>
zawiera wartość <gx:TimeStamp>
. Ma to wpływ na zdjęcia historyczne i słońce, a także na wszelkie obiekty z tagami czasowymi. Na ilustracji poniżej widać, że słońce jest włączone, a <Camera>
wyświetla lokalizację 1 stycznia 2009 r. o godzinie 15:29 czasu UTC (7:30 czasu lokalnego).
<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>
Ten punkt widokowy wyświetla się w Google Earth:
Obrót
W tym przykładzie widać element <roll>
o wartości 45 stopni, który powoduje, że kamera jest obracana w lewo.
<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>
Kolejność przekształceń
Kolejność rotacji jest ważna. Domyślnie aparat patrzy prosto w kierunku osi -Z w stronę Ziemi. Przed wykonaniem rotacji aparat zostanie przetłumaczony wzdłuż osi Z do <altitude>
. Kolejność przekształceń wygląda tak:
- <wysokość> – przetłumacz wzdłuż osi Z na <wysokość>
- <heading> – obróć wokół osi Z
- <tilt> – obróć wokół osi X.
- <roll> – ponownie obróć wokół osi Z (ponownie).
Za każdym razem, gdy stosowana jest obrót, dwie osie kamery zmieniają orientację.