Cámaras

Actualización de febrero de 2009: Se agregó la mención de <gx:altitudeMode>, <gx:TimeStamp> y <gx:TimeSpan>.

<Camera>, que se introdujo con KML 2.2, proporciona una forma adicional de especificar el punto de vista del observador y los parámetros de vista asociados. <Camera> es similar a <LookAt>, ya que ambos elementos definen la ubicación y orientación de una cámara virtual que está viendo la Tierra. La diferencia radica en que LookAt especifica la vista en términos del lugar de interés que se está viendo. La cámara, en cambio, especifica la vista en términos de la posición y orientación del espectador.

<LookAt> y <Camera> se extienden desde el elemento <AbstractView>, que es un tipo abstracto base. <Camera> y <LookAt> tienen la misma forma en que se usan en un archivo KML, es decir, como elemento secundario de cualquier elemento derivado de <Feature> (Placemark, ScreenOverlay, GroundOverlay, PhotoOverlay, Folder, Document, NetworkLink) o como elemento secundario de <NetworkLinkControl>. Puedes usar un objeto <Camera> o <LookAt> dentro de una función, pero no ambos al mismo tiempo (es decir, solo una cámara virtual puede especificar el punto de vista actual).

Diferencias entre <Camera> y <LookAt>

El nuevo elemento <Camera> proporciona flexibilidad adicional para especificar la vista. Y, lo más importante, puedes inclinar la vista de la cámara para observar en el cielo hacia el cielo. <Camera> proporciona un control total de seis grados de libertad sobre la vista, de modo que puedas colocar la cámara en el espacio y luego girarla alrededor de los ejes x, y y z. Si no se especifican rotaciones, los dos elementos son 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>

En la siguiente sección, se ofrece una breve revisión del elemento <LookAt> para que puedas contrastar su uso con el del nuevo elemento <Camera>.

Opinión sobre <LookAt>

El elemento <LookAt> especifica el punto de la Tierra que se ve, la distancia desde el punto de interés y el ángulo de visión. Esta es la sintaxis de este 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>

En el siguiente diagrama, se ilustra cómo se construye el punto de vista <LookAt>:

diagrama que muestra los parámetros del elemento LookAt

El elemento <LookAt> especifica las respuestas a las siguientes preguntas:

Pregunta
Especificación en <LookAt>
¿Qué aspecto estoy mirando? <longitud>, <latitud>,<altitude>, <altitudeMode>
¿A qué distancia está el mirador del punto de interés? <range>
¿La vista está orientada al Norte hacia la parte superior? Si la respuesta es sí, use el valor predeterminado <heading> de 0. Si la respuesta es "No", especifique una rotación <heading> de >0 a 360°
¿La vista se mira directamente hacia la Tierra? Si la respuesta es sí, usar el valor predeterminado<tilt>. Si la respuesta es No, la cámara se inclina hacia arriba en el horizonte. Especifica una rotación <inclinada> ≤ 90°.
90° apunta directamente al horizonte. (Es posible que no veas la superficie de la Tierra en ningún momento si estás muy lejos y <tilt> es igual a 90°).

Ejemplo

Este es un <Placemark> de muestra que contiene 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>

Y esta es la marca de posición que se muestra en Google Earth:

captura de pantalla de la marca de posición Machu Picchu en Google Earth

Si la dirección de la vista se cruza con el planeta, usa un elemento <LookAt>, ya que es un poco más fácil de especificar que <Camera>.

Elementos secundarios de <Camera>

El elemento <Camera> ofrece la capacidad de colocar el punto de vista en cualquier lugar del espacio y rotar la vista en cualquier dirección. Esta es la sintaxis de este 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> 

El elemento <Camera> especifica las respuestas a las siguientes preguntas:

Pregunta
Especificación en <Camera>
¿Dónde se encuentra la cámara en el espacio? Coloca la cámara en el punto especificado por <longitude>, <latitude>, <altitude> y <altitudeMode>. En general, no es una buena opción colocar la cámara en el suelo.
¿La cámara está orientada para que el norte quede en la parte superior de la vista? Si la respuesta es sí, use el valor predeterminado <heading> de 0. De lo contrario, rota la cámara de >0 a 360°, según los puntos de la brújula.
¿La cámara mira directamente hacia la Tierra? Si la respuesta es sí, use el valor predeterminado <tilt> de 0. De lo contrario, rota la cámara de 0 a 180° para especificar el ángulo de rotación alrededor del eje X. (Se permiten valores negativos para <tilt>, pero estos generan una vista invertida).
¿La cámara mira a nivel de la escena? Si la respuesta es sí, usa el valor predeterminado <roll> de 0. Nota: El valor de <roll> cuando se usa como elemento secundario de <Camera> suele ser 0. Puedes especificar un valor entre −180 y +180°, pero es poco frecuente.

En el siguiente diagrama, se muestran los ejes X, Y y Z, que están conectados a la cámara virtual.

  • El eje X apunta hacia la derecha de la cámara y se llama el vector derecho.
  • El eje Y define la dirección “hacia arriba” en relación con la pantalla y se llama vector vectorial hacia arriba.
  • El eje Z apunta desde el centro de la pantalla hacia el punto de los ojos. La cámara mira hacia abajo en el eje −Z, que se llama vector de vista.

A continuación, se muestra un ejemplo de la configuración de un objeto <Camera> como punto de partida dentro de un elemento <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>

Esto es lo que muestra este punto de vista en Google Earth:

Hora en AbstractViews

<Camera> y <LookAt> pueden contener información sobre la hora, que afecta las imágenes históricas, la luz solar y los objetos con etiquetas de tiempo. <gx:TimeSpan> y <gx:TimeStamp> se usan dentro de AbstractViews y están dentro del espacio de nombres de extensiones de Google. Para obtener más información, consulta la sección Tiempo con AbstractViews del capítulo Tiempo y animación.

Ejemplos

En los siguientes ejemplos, se ilustran diferentes rotaciones de <Camera>.

Encabezado

En este ejemplo, se muestra un <Camera> con una orientación de 90 grados (este) y una inclinación de 90 grados (hacia el horizonte). La cámara se ubica a una altitud 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 es el resultado en Google Earth:

Inclinación

En el siguiente ejemplo, se usa una <Camera> con una inclinación igual a 90 grados, que apunta hacia el horizonte. Usa valores predeterminados para <heading>, <altitude>, <altitudeMode> y <roll>.

<Camera> contiene un valor <gx:TimeStamp> que afecta las imágenes históricas y la luz solar, así como la visualización de los objetos etiquetados en el tiempo. En la siguiente imagen, se activó la luz solar y <Camera> está viendo la ubicación a las 3:29 p.m., UTC, el 1 de enero de 2009 (7:30 a.m., hora 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>

Esto es lo que muestra este punto de vista en Google Earth:

Giro

En este ejemplo, se incluye un elemento <roll> con un valor de 45 grados, que hace que la cámara gire a la izquierda.

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

Orden de transformaciones

El orden de rotación es importante. De forma predeterminada, la cámara apunta directamente hacia abajo, hacia el eje −Z, en dirección a la Tierra. Antes de realizar las rotaciones, la cámara se traduce a lo largo del eje Z a <altitude>. El orden de las transformaciones es el siguiente:

  1. <altitude> - traducir del eje Z a <altitude>
  2. <heading>: Gira alrededor del eje Z.
  3. <tilt>: Gira el eje X.
  4. <roll>: gira alrededor del eje Z (otra vez).

Ten en cuenta que, cada vez que se aplica una rotación, dos de los ejes de la cámara cambian de orientación.

Volver al principio