Atualizado em fevereiro de 2009: acréscimo de menção a <gx:altitudeMode>, <gx:TimeStamp> e <gx:TimeSpan>.
Introduzido com o KML 2.2, o elemento <Camera>
fornece uma maneira adicional de especificar o ponto de visualização do observador e os parâmetros de visualização associados. <Camera>
é parecido com <LookAt>
, uma vez que ambos os elementos definem o posicionamento e a orientação de uma câmera virtual que está visualizando a Terra. A diferença é que LookAt especifica a visualização em termos do ponto de interesse que está sendo visualizado. Por outro lado, Camera especifica a visualização em termos da posição e orientação do visualizador.
<LookAt>
e <Camera>
são extensões do elemento <AbstractView>
, que é um tipo abstrato básico. <Camera>
e <LookAt>
são idênticos na forma como são usados em um arquivo KML, ou seja, como um filho de qualquer elemento derivado de <Feature>
(Placemark, ScreenOverlay, GroundOverlay, PhotoOverlay, Folder, Document, NetworkLink) ou como filho de <NetworkLinkControl>
. É possível usar um <Camera>
ou <LookAt>
em um Feature, mas não ambos ao mesmo tempo (ou seja, apenas uma câmera virtual pode especificar o ponto de visualização atual).
Diferenças entre <Camera>
e <LookAt>
O novo elemento <Camera>
fornece mais flexibilidade na forma como você especifica a visualização. Mais importante, é possível inclinar a visualização da câmera de modo que você veja acima do horizonte no céu. <Camera>
fornece controle total com seis graus de liberdade sobre a visualização, de modo que você possa posicionar a câmera no espaço e girá-la ao redor dos eixos x, y e z. Se nenhuma rotação for especificada, os dois elementos serão equivalentes:
<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>
A seção a seguir oferece uma breve revisão do elemento <LookAt>
para que você possa comparar seu uso com o do novo elemento <Camera>
.
Revisão de <LookAt>
O elemento <LookAt>
especifica o ponto na Terra que está sendo visualizado, a distância entre o ponto de visualização e o ponto de interesse e o ângulo da visualização. Veja a sintaxe para esse 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>
O diagrama a seguir ilustra como o ponto de visualização de <LookAt>
é construído:
O elemento <LookAt>
especifica respostas para as seguintes perguntas:
Pergunta | Especificação em <LookAt> |
Para qual ponto estou olhando? | <longitude>, <latitude>,<altitude>, <altitudeMode> |
Qual a distância entre o ponto de visualização e o ponto de interesse? | <range> |
A visualização está orientada de modo que o Norte esteja na parte superior da visualização? | Se Sim, use o valor padrão de <heading> de 0. Se Não, especifique uma rotação <heading> de >0 a 360° |
A visualização está voltada diretamente para baixo na Terra? | Se Sim, use o valor padrão de <tilt>. Se Não, a câmera será inclinada para cima em direção ao horizonte; especifique uma rotação <tilt> menor ou igual a 90°. 90° está olhando diretamente ao longo do horizonte. Talvez você não veja a superfície da Terra se estiver distante e <tilt> for igual a 90°. |
Exemplo
Veja uma amostra de <Placemark>
contendo um 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>
E aqui está o marcador exibido no Google Earth:
Se a direção de sua visualização cruzar o planeta, use o elemento <LookAt>
, pois ele é um pouco mais fácil de especificar que <Camera>
.
Elementos filho de <Camera>
O elemento <Camera>
permite posicionar o ponto de visualização em qualquer lugar no espaço e girar a visualização em qualquer direção. Veja a sintaxe para esse 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>
O elemento <Camera>
especifica respostas para as seguintes perguntas:
Pergunta | Especificação em <Camera> |
Onde a câmera está localizada no espaço? | Posicione a câmera no ponto especificado por <longitude>, <latitude>, <altitude> e <altitudeMode>. Em geral, é uma péssima escolha colocar a câmera no solo. |
A câmera está orientada de modo que o Norte esteja na parte superior da visualização? | Se Sim, use o valor padrão de <heading> de 0. Se Não, gire a câmera de >0 a 360°, de acordo com os pontos cardeais. |
A câmera está voltada diretamente para baixo na Terra? | Se Sim, use o valor padrão de <tilt> de 0. Se Não, gire a câmera de 0 a 180 ° para especificar o ângulo de rotação ao redor do eixo X. Valores negativos para <tilt> são permitidos, mas resultam em uma visualização de cabeça para baixo. |
A câmera é nivelada à medida que visualiza a cena? | Se Sim, use o valor padrão de <roll> de 0. Observação: o valor de <roll> quando usado como filho de <Camera> é normalmente 0. É possível especificar um valor entre -180 e 180°, mas esse uso é raro. |
O diagrama a seguir mostra os eixos X, Y e Z, que são anexados à câmera virtual.
- O eixo X aponta à direita da câmera e é chamado vetor direito.
- O eixo Y define a direção "para cima" relativa à tela e é chamado vetor superior.
- O eixo Z aponta do centro da tela para o ponto de visualização. A câmera olha pelo eixo −Z, que é chamado vetor de visualização.
Veja um exemplo de configuração de um <Camera>
como o ponto de visualização inicial em um <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>
Veja o que esse ponto de visualização mostra no Google Earth:
Tempo em AbstractViews
<Camera>
e <LookAt>
podem conter informações sobre o tempo, que afetam as imagens históricas, a luz do sol e quaisquer objetos com marcação de tempo. <gx:TimeSpan>
e <gx:TimeStamp>
são usados em AbstractViews e estão contidos no namespace de extensão do Google. Para obter mais informações, consulte a seção Tempo com AbstractViews no capítulo Tempo e animação.
Exemplos
Os exemplos a seguir ilustram diferentes rotações de <Camera>
.
Título
Este exemplo mostra um <Camera>
com uma orientação cabeçalho de 90 graus (leste) e uma inclinação de 90 graus (olhando em direção ao horizonte). A câmera é posicionada em uma altitude de 100 metros.
<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>
Este é o resultado no Google Earth:
Inclinar
O exemplo a seguir usa um <Camera>
com inclinação igual a 90 graus, observando em direção ao horizonte. Ele usa valores padrão para <heading>
, <altitude>
, <altitudeMode>
e <roll>
.
<Camera>
contém um valor <gx:TimeStamp>
; isso afeta imagens históricas e luz do sol, além da exibição de quaisquer objetos com marcação de tempo. Na imagem abaixo, a luz do sol foi ativada e <Camera>
está visualizando o local às 15:29, UTC, no dia 1º de janeiro de 2009 (7h30, horário local).
<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>
Veja o que esse ponto de visualização mostra no Google Earth:
Giro
Este exemplo inclui um elemento <roll>
com valor de 45 graus, o que faz com que a câmera gire para a esquerda.
<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>
Ordem de transformações
A ordem da rotação é importante. Por padrão, a câmera olha diretamente para baixo no eixo -Z em direção à Terra. Antes da execução das rotações, a câmera é convertida junto com o eixo Z em <altitude>
. A ordem das transformações é a seguinte:
- <altitude> - converte ao longo do eixo Z em <altitude>
- <heading> - gira em torno do eixo Z.
- <tilt> - gira em torno do eixo X.
- <roll> - gira em torno do eixo Z (novamente).
Sempre que uma rotação é aplicada, dois dos eixos da câmera mudam suas orientações.