Cámaras

Actualizado en febrero de 2009: se ha añadido una mención a <gx:altitudeMode>, <gx:TimeStamp> y <gx:TimeSpan>.

Junto con KML 2.2, <Camera> proporciona un método adicional para especificar el punto de vista del observador y los parámetros de vista asociados al mismo. El elemento de cámara (<Camera>) es similar al elemento de punto de mira (<LookAt>), ya que ambos definen la ubicación y la orientación de una cámara virtual que visualiza la Tierra. La diferencia radica en que LookAt especifica la vista según el punto de interés que se está visualizando y Camera, por el contrario, especifica la vista en función de la posición y la orientación del usuario.

Tanto <LookAt> como <Camera> se derivan del elemento <AbstractView>, que es un tipo de resumen básico. Los elementos <Camera> y <LookAt> se utilizan de forma idéntica en un archivo KML, concretamente como un elemento secundario derivado del elemento <Feature> (Placemark, ScreenOverlay, GroundOverlay, PhotoOverlay, Folder, Document, NetworkLink) o como un elemento secundario de <NetworkLinkControl>. En un recurso (Feature), puedes utilizar tanto el elemento <Camera> como el elemento <LookAt>, pero no ambos a la vez (es decir, solo una cámara virtual puede especificar el punto de vista actual).

Diferencias entre <Camera> y <LookAt>

El nuevo elemento <Camera> proporciona más flexibilidad a la hora de especificar la vista. Y, lo que es más importante, puedes inclinar la vista de la cámara para mirar hacia el cielo, por encima del horizonte. El elemento <Camera> ofrece un control pleno con seis grados de libertad sobre la vista, de forma que el elemento Camera se puede colocar en el espacio y, a continuación, girarlo sobre los ejes X, Y y Z. Los dos elementos son equivalentes si no se especifica ninguna rotación:

<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 un breve repaso sobre el elemento <LookAt> para que puedas comparar su uso con el del nuevo elemento <Camera>.

Repaso del elemento <LookAt>

El elemento <LookAt> especifica el punto de la Tierra que se está visualizando, la distancia a la que está el punto de vista del punto de interés y el ángulo de visión. Esta es la sintaxis del 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 muestra el proceso con el que se crea el punto de mira (<LookAt>):

Diagrama que muestra los parámetros del elemento LookAt

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

Pregunta
Especificación en el elemento <LookAt>
¿Hacia qué punto estoy mirando? <longitude>, <latitude>,<altitude>, <altitudeMode>
¿A qué distancia está el punto de vista del punto de interés? <range>
¿Está orientada la vista de forma que el Norte quede en la parte superior de la misma? Si la respuesta es afirmativa, utiliza el valor predeterminado 0 para el elemento de encabezado (<heading>). Si la respuesta es negativa, especifica un valor de giro para el elemento <heading> que esté comprendido entre un número mayor que 0º y 360º.
¿La vista mira hacia abajo, directamente hacia la Tierra? Si la respuesta es afirmativa, utiliza el valor predeterminado para la inclinación (<tilt>). Si la respuesta es negativa y la cámara está inclinada hacia arriba, hacia el horizonte, especifica un giro de inclinación (<tilt>) de ≤ 90°.
90° indica que mira directamente hacia el horizonte (si estás lejos y el valor <tilt> es igual a 90°, es posible que no veas la superficie de la Tierra).

Ejemplo

A continuación se muestra un elemento de marca de posición <Placemark> de ejemplo que incluye 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 secciona el planeta, utiliza un elemento <LookAt>, puesto que es un poco más fácil de especificar que el elemento <Camera>.

Elementos secundarios de <Camera>

El elemento <Camera> ofrece la posibilidad de ubicar el punto de enfoque en cualquier lugar del espacio y girar la vista en cualquier dirección. Esta es la sintaxis del 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 el elemento <Camera>
¿En qué lugar del espacio está situada la cámara? Sitúa la cámara en el punto especificado por <longitude>, <latitude>, <altitude> y <altitudeMode>. Por lo general, situar la cámara en el suelo no es una buena opción.
¿Está orientada la cámara de forma que el Norte quede en la parte superior de la vista? Si la respuesta es afirmativa, utiliza el valor predeterminado 0 para el elemento <heading>. Si la respuesta es negativa, gira la cámara entre >0º y 360º, en función de los puntos de la brújula.
¿La cámara mira hacia abajo, directamente hacia la Tierra? Si la respuesta es afirmativa, utiliza el valor predeterminado 0 para el elemento <tilt>. Si la respuesta es negativa, gira la cámara entre 0º y 180° para especificar el ángulo de rotación del eje X (se admiten valores negativos para el elemento <tilt>, pero esto implica que la vista sea desde arriba hacia abajo).
¿El nivel de la cámara es el mismo que el de la visualización de la escena? Si la respuesta es afirmativa, utiliza el valor predeterminado 0 para el giro (<roll>). Nota: el valor para el elemento <roll> normalmente es 0 cuando se utiliza como un elemento secundario de <Camera>. Puedes especificar un valor entre −180 y +180º, pero este uso no es muy común.

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

  • El eje X apunta hacia la derecha de la cámara y se denomina el vector derecho.
  • El eje Y determina la dirección "hacia arriba" relativa a la pantalla y se denomina vector hacia arriba.
  • El eje Z apunta desde el centro de la pantalla hacia el punto de enfoque. La cámara mira hacia abajo sobre el eje −Z, denominado vector de visualización.

A continuación se muestra un ejemplo de cómo se configura el elemento <Camera> como punto de vista inicial en un documento (<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>

Así es como se ve este punto de vista en Google Earth:

El tiempo en vistas abstractas

Tanto el elemento <Camera> como el elemento <LookAt> pueden contener información sobre el tiempo, lo que afecta a las imágenes históricas, a la luz solar y a todo objeto con identificadores de tiempo. En las vistas abstractas (AbstractViews), se utiliza tanto el valor <gx:TimeSpan> como el valor <gx:TimeStamp>, incluidos en el espacio de nombres de extensiones de Google. Para obtener más información, consulta la sección El tiempo con vistas abstractas del capítulo Tiempo y animación.

Ejemplos

Los siguientes ejemplos ilustran varias rotaciones del elemento <Camera>.

Encabezado

Este ejemplo muestra un elemento <Camera> con un encabezado de 90 grados (Este) y una inclinación de 90 grados (mirando hacia el horizonte). El elemento Camera está situado a 100 metros de altura.

<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

El siguiente ejemplo utiliza un elemento <Camera> con una inclinación de 90 grados, mirando hacia el horizonte. Utiliza valores predeterminados para los elementos <heading>, <altitude>, <altitudeMode> y <roll>.

El elemento <Camera> incluye un valor <gx:TimeStamp> lo que afecta a las imágenes históricas y a la luz solar, así como a la visualización de cualquier objeto con identificadores de tiempo. En la siguiente imagen, se ha activado la luz solar y el elemento <Camera> está visualizando la ubicación a las 3:29 p.m. UTC el día 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>

Así es como se ve este punto de vista en Google Earth:

Giro

El siguiente ejemplo incluye un elemento <roll> con un valor de 45 grados que hace que la cámara gire hacia 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 los desplazamientos

El orden de rotación es importante. De forma predeterminada, la cámara mira hacia abajo desde el eje −Z en dirección a la Tierra. Antes de realizar las rotaciones, la cámara se traslada a lo largo del eje Z hacia el elemento <altitude>. Este es el orden de los desplazamientos:

  1. <altitude>: se traslada a lo largo del eje Z hacia el elemento <altitude>.
  2. <heading>: gira alrededor del eje Z.
  3. <tilt>: gira alrededor del eje X.
  4. <roll>: gira alrededor del eje Z (de nuevo).

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