Câmeras

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:

diagrama que mostra os parâmetros para o elemento LookAt

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:

captura de tela do marcador Machu Picchu 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:

  1. <altitude> - converte ao longo do eixo Z em <altitude>
  2. <heading> - gira em torno do eixo Z.
  3. <tilt> - gira em torno do eixo X.
  4. <roll> - gira em torno do eixo Z (novamente).

Sempre que uma rotação é aplicada, dois dos eixos da câmera mudam suas orientações.

Voltar ao início