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>
):
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:
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:
- <altitude>: se traslada a lo largo del eje Z hacia el elemento <altitude>.
- <heading>: gira alrededor del eje Z.
- <tilt>: gira alrededor del eje X.
- <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.