Las versiones anteriores de KML permiten incluir pequeñas fotografías en viñetas descriptivas adjuntas a marcas de posición en Google Earth. Existen capas completas, como Panoramio, que constan de fotografías de lugares ubicados geográficamente proporcionadas por los usuarios. Para ver estas fotografías, el usuario debe hacer clic en el icono de la marca de posición (o en el nombre dentro del panel "Lista") para abrir la viñeta en la que se encuentra la fotografía.
Los elementos de superposición de fotografías (PhotoOverlay) son fotografías insertadas directamente en el paisaje de la Tierra. Pueden ser rectángulos en 2D, a modo de "vallas publicitarias" escénicas que expanden la imagen aérea básica de la Tierra. Las superposiciones de fotografías también se pueden proyectar en cilindros o esferas para crear vistas panorámicas virtuales en las que se puede "entrar" para explorarlas e inspeccionarlas en detalle. Por otra parte, KML 2.2 admite superposiciones de fotografías muy grandes, con muchos megapíxeles de datos . Estas imágenes requieren que el autor de KML proporcione un conjunto de versiones submuestreadas de la imagen, de forma que Google Earth pueda cargar correctamente solo la parte de la imagen que encaje en la vista actual y en el nivel de detalle adecuado.
Además de esta página, es recomendable leer la página "Temas relacionados con los archivos KML" sobre las cámaras utilizadas por el objeto PhotoOverlay. Si utilizas una imagen muy grande para el elemento PhotoOverlay, también tendrás que crear un elemento de pirámide de imágenes (<ImagePyramid>).
Qué puedes hacer
El nuevo elemento <PhotoOverlay> permite ubicar geográficamente una fotografía en la Tierra y especificar la colocación y la orientación del elemento Camera que apunta hacia esa superposición de fotografías. Un elemento PhotoOverlay puede ser un simple rectángulo en dos dimensiones, un cilindro parcial o completo o una esfera (para panorámicas esféricas). La superposición se coloca en la ubicación indicada y se orienta hacia el elemento Camera.
Puede que el aspecto más emocionante de este nuevo recurso sea la posibilidad de gestionar fotografías muy grandes, con muchos megapíxeles de datos, así como la de acercar esas imágenes y mostrar una vista panorámica de forma eficaz para ver detalles más sutiles. Esta función avanzada se explica en la sección Cómo añadir fotografías muy grandes.
Conceptos clave
En las siguiente secciones se tratan los siguientes conceptos clave relacionados con el elemento PhotoOverlay:
- Herencia de los elementos de recurso (<Feature>) y de vista abstracta (<AbstractView>)
- Herencia del elemento de superposición (<Overlay>)
- Forma
- Campo de visión
- Cómo ajustar la vista con el elemento de giro (<rotation>)
- Cómo marcar superposiciones de fotografías con iconos
- Pirámide de imágenes (opción avanzada) (consulta la sección Cómo añadir fotografías muy grandes
Sintaxis
A continuación, te proporcionamos la sintaxis del elemento <PhotoOverlay>, para que puedas consultarla mientras lees los conceptos clave relacionados.
<PhotoOverlay> <!-- inherited from Feature element --> <name>...</name> <!-- string --> <visibility>1</visibility> <!-- boolean --> <open>0</open> <!-- boolean --> <atom:author>...<atom:author> <!-- xmlns:atom --> <atom:link>...</atom:link> <!-- xmlns:atom --> <address>...</address> <!-- string --> <AddressDetails xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0">...
</AddressDetails> <!-- string --> <phoneNumber>...</phoneNumber> <!-- string -->
<Snippet maxLines="2">...</Snippet> <!-- string --> <description>...</description> <!-- string --> <AbstractView>...</AbstractView> <!-- Camera or LookAt --> <TimePrimitive>...</TimePrimitive> <styleUrl>...</styleUrl> <!-- anyURI --> <StyleSelector>...</StyleSelector> <Region>...</Region> <ExtendedData>...</ExtendedData> <!-- inherited from Overlay element --> <color>ffffffff</color> <!-- kml:color --> <drawOrder>0</drawOrder> <!-- int --> <Icon> <href>...</href> <!-- anyURI --> ... </Icon> <!-- specific to PhotoOverlay --> <rotation>0</rotation> <!-- kml:angle180 --> <ViewVolume> <leftFov>0</leftFov> <!-- kml:angle180 --> <rightFov>0</rightFov> <!-- kml:angle180 --> <bottomFov>0</bottomFov> <!-- kml:angle90 --> <topFov>0</topFov> <!-- kml:angle90 --> <near>0</near> <!-- double --> </ViewVolume> <ImagePyramid> <tileSize>256</tileSize> <!-- int --> <maxWidth>...</maxWidth> <!-- int --> <maxHeight>...</maxHeight> <!-- int --> <gridOrigin>lowerLeft</gridOrigin> <!-- lowerLeft or upperLeft--> </ImagePyramid> <Point> <coordinates>...</coordinates> <!-- lon,lat[,alt] --> </Point> <shape>rectangle</shape> <!-- kml:shape --> </PhotoOverlay>
Herencia del elemento de recurso (<Feature>)
Dado que el elemento <PhotoOverlay> se deriva del elemento <Feature>, puede contener uno de los dos elementos derivados de <AbstractView>, ya sea el elemento de cámara (<Camera>) o de punto de vista (<LookAt>). El elemento Camera (o LookAt) especifica un punto de vista y una dirección de visualización (que también se conoce como vector de visualización). El elemento PhotoOverlay se ubica con respecto al punto de vista. En concreto, el plano de una imagen rectangular en 2D es ortogonal con respecto al vector de visualización (es decir, está colocado en ángulo recto con respecto a él). El plano normal de este plano (es decir, su anverso, que es donde se ubica la fotografía) está orientado hacia el punto de vista.
Herencia del elemento de superposición (<Overlay>)
La URL de la imagen del elemento PhotoOverlay se especifica en la etiqueta <Icon>, que se hereda del elemento <Overlay>. La etiqueta <Icon> debe incluir un elemento <href> que especifique el archivo de imagen que se debe utilizar para el elemento PhotoOverlay. En el caso de imágenes de uno o varios gigapíxeles, el elemento <href> es una URL especial que sirve de índice en una pirámide de imágenes con distintas resoluciones (consulta la sección Cómo añadir fotografías muy grandes).
Forma
El elemento PhotoOverlay se proyecta en un elemento de forma (shape). A continuación se muestran los valores que puede adoptar el elemento <shape>:
rectangle
: para fotografías normales,cylinder
: para fotografías panorámicas (cilindros parciales o completos),sphere
: para fotografías panorámicas esféricas.
Campo de visión
Una vez colocada y orientada la cámara en el espacio, tendrás que definir qué parte de la escena actual será visible. Determinar el campo de visión es similar a especificar la apertura del objetivo de una cámara física. Un campo de visión pequeño, como en el caso de un teleobjetivo, se centra en una pequeña parte de la escena. Un campo de visión grande, como en el caso de un gran angular, se centra en una parte grande de la escena.
El campo de visión de un elemento PhotoOverlay se define mediante cuatro planos, cada uno de los cuales se especifica mediante un ángulo relativo al vector de visualización. Estos cuatro planos definen los lados derecho, izquierdo, superior e inferior del campo de visión, que tiene forma de pirámide truncada, tal como se muestra a continuación:
En los siguientes diagramas se muestran los ángulos derecho (<rightFov>) e izquierdo (<leftFov>) de la vista lateral (Side View) y los ángulos superior (<topFov>) e inferior (<bottomFov>) de la vista superior (Top View) de esta pirámide:
Una cámara normal en el mundo real tiene un campo de visión simétrico en ambas direcciones, en cuyo caso los valores típicos de
bottomFov = -topFov
y
leftFov = -rightFov
serían los siguientes:
<ViewVolume> <near>1000</near> <leftFov>-60</leftFov> <rightFov>60</rightFov> <bottomFov>-60</bottomFov> <topFov>60</topFov> </ViewVolume>
El elemento <shape> que contiene el elemento PhotoOverlay está colocado en la posición de cerca (<near>), que es la distancia en metros desde el punto de vista (o desde la posición de la cámara). Los cuatro planos del campo de visión seccionan la forma. Cualquier parte de la forma que se encuentre dentro del campo de visión será visible. Cualquier parte de la forma que se quede fuera del campo de visión se considera "recortada" y no se mostrará.
Campo de visión para un rectángulo
Para un rectángulo, el ángulo superior (<topFov>) debe ser menor de 90° y el inferior (<bottomFov>) mayor de -90°. Si se supera alguno de esos límites, el campo del plano de visión no seccionará la imagen en ningún punto. Los elementos <bottomFov> y <leftFov> suelen ser valores negativos.
Campo de visión para un cilindro
En el caso de una imagen cilíndrica, el eje del cilindro coincide con el vector superior (el eje Y) de la vista. El radio del cilindro equivale a la posición de cerca (<near>).
En un cilindro, los intervalos del campo de visión son los siguientes:
-90 < bottomFov < topFov < 90 -180 < leftFov < rightFov < 180
Campo de visión para una esfera
Una imagen esférica está centrada en el origen de la cámara (punto de vista). El radio de la esfera equivale a la posición de cerca (<near>). En una esfera, los intervalos del campo de visión son los siguientes:
-90 < bottomFov < topFov < 90 -180 < leftFov < rightFov < 180
Cómo ajustar la vista con el elemento de giro (<rotation>)
El elemento <rotation> se utiliza como un elemento secundario de <PhotoOverlay> para ajustar la colocación de la fotografía en el campo de visión. Este elemento es útil si la fotografía se ha girado y se desvía levemente de la vista horizontal deseada.
Cómo marcar superposiciones de fotografías con iconos
El elemento <PhotoOverlay> incluye un elemento de punto (<Point>) que se comporta de la misma manera que <Point> cuando se utiliza en un elemento de marca de posición (<Placemark>); es decir, hace que Google Earth dibuje un icono para marcar la posición del elemento PhotoOverlay. El icono dibujado se especifica mediante los campos del elemento <styleUrl> y el selector de estilos (<StyleSelector>), al igual que ocurre con el elemento <Placemark>.
Cómo añadir fotografías muy grandes
En el caso de las imágenes muy grandes, tendrás que crear una pirámide de imágenes, que es un conjunto jerárquico de imágenes, cada una de las cuales es una versión de la imagen original con menor resolución cada vez. Cada imagen de la pirámide se subdivide en mosaicos, para que solo sea necesario cargar las partes que se deseen ver. Google Earth calcula el punto de vista actual y carga los mosaicos adecuados en función de la distancia existente entre el usuario y la imagen. A medida que el punto de vista se acerca al elemento PhotoOverlay, Google Earth carga los mosaicos con mayor resolución. Dado que todos los píxeles de la imagen original no se pueden ver a la vez en la pantalla, este procesamiento previo permite a Google Earth conseguir el máximo rendimiento porque carga solo las partes de la imagen que se muestran en la vista y los detalles de píxeles que puede distinguir el usuario según el punto de vista actual.
Si la imagen es muy grande, se debe crear una pirámide de imágenes y modificar el elemento <href> del elemento <Icon> para incluir especificaciones sobre los mosaicos que se deben cargar. En las siguientes secciones se describe cómo crear la pirámide de imágenes y cómo especificar el elemento <href> para una imagen de un gigapíxel.
El elemento de pirámide de imágenes <ImagePyramid>
El elemento <ImagePyramid> presenta la siguiente sintaxis:
<ImagePyramid> <tileSize>256</tileSize> <!-- int --> <maxWidth>...</maxWidth> <!-- int --> <maxHeight>...</maxHeight> <!-- int --> <gridOrigin>lowerLeft</gridOrigin> <!-- lowerLeft or upperLeft --> </ImagePyramid>
El tamaño en píxeles de la imagen original se especifica en los elementos de ancho máximo (<maxWidth>) y altura máxima (<maxHeight>). El ancho y la altura pueden ser de cualquier tamaño y no tienen que ser potencia de 2. Los píxeles sobrantes se pueden rellenar con píxeles en blanco, tal como se describe en la sección Cómo añadir relleno a la imagen.
Los mosaicos deben ser cuadrados y su tamaño (<tileSize>) debe ser potencia de 2. Se recomienda utilizar un tamaño de 256 (que es el valor predeterminado) o de 512.
Cómo crear la pirámide de imágenes
En estas instrucciones, se asume que la medida en píxeles de la imagen es una potencia de 2 (de lo contrario, primero será necesario añadir relleno, tal como se describe en la sección Cómo añadir relleno a la imagen). A continuación, deberás seguir estos pasos para crear una pirámide de imágenes:
- Divide la imagen original a tamaño completo en fragmentos del tamaño de un mosaico (por ejemplo, en bloques de 256 * 256 píxeles).
- Reduce la imagen por un factor de 2.
- Divide esta nueva imagen en cuadrados del tamaño de un mosaico.
- Repite los pasos 2 y 3 hasta que la imagen final se ajuste al tamaño del mosaico (por ejemplo, 256 * 256 píxeles).
Cómo añadir relleno a la imagen
Si el último mosaico de una fila no es cuadrado, tendrás que añadir píxeles de relleno transparentes para hacer cuadrado el mosaico. Coloca la imagen de forma que el mosaico (0,0) se encuentre en el origen (por ejemplo, si el origen se encuentra en la parte inferior izquierda, coloca la imagen en la parte inferior izquierda de la cuadrícula del mosaico). La fila y las columnas que necesiten relleno deberían quedar en la parte superior y derecha de la imagen. Para que el filtrado sea más efectivo, duplica la última fila (o columna) de la esquina de la imagen. Después añade relleno (por ejemplo, en negro) a los píxeles sobrantes de los mosaicos de la fila (o de la columna).
Ejemplo
Como ejemplo, toma una imagen cuyas dimensiones sean 3600 * 2700 píxeles (aproximadamente 10 megapíxeles). A continuación se indican los pasos necesarios para crear una pirámide de imágenes para esta imagen:
- Con un tamaño de mosaico de 256 píxeles, puedes subdividir la imagen original en una cuadrícula de 16 * 16 mosaicos (esta imagen será la imagen de nivel 4 de la pirámide final).
- Rellena los píxeles para "cuadrar" los mosaicos parcialmente rellenos (tal como se describe en la sección Cómo añadir relleno a la imagen) de la última columna, a la derecha, y de la última fila, en la parte superior, suponiendo que el origen de la cuadrícula (<gridOrigin>) esté en la parte inferior izquierda (lowerLeft).
- Reduce la imagen por un factor de 2.
- Subdivide esta imagen en mosaicos de 256 píxeles. La imagen de este nivel estará compuesta por una cuadrícula de 8 * 8 mosaicos (nivel 3).
- Reduce la imagen del nivel 3 por un factor de 2.
- Subdivídela en mosaicos. La imagen de este nivel estará compuesta por una cuadrícula de 4 * 4 mosaicos (nivel 2).
- Reduce la imagen del nivel 2 por un factor de 2.
- Subdivídela en mosaicos. La imagen de este nivel estará compuesta por una cuadrícula de 2 * 2 mosaicos (nivel 1).
- Reduce la imagen del nivel 1 por un factor de 2.
- La imagen resultante es de 256 * 256 píxeles, por lo que este es el último nivel de la pirámide de imágenes (nivel 0).
La pirámide de imágenes para una imagen de 4096 * 4096 tiene cinco niveles, tal como se muestra en la siguiente tabla:
Nivel | Número de mosaicos | Tamaño de la imagen (píxeles) |
---|---|---|
0 | 1 | 256 * 256 |
1 | 4 (cuadrícula de 2 * 2) | 512 * 512 |
2 | 16 (cuadrícula de 4 * 4) | 1024 * 1024 |
3 | 64 (cuadrícula de 8 * 8) | 2048 * 2048 |
4 | 256 (cuadrícula de 16 * 16) | 4096 * 4096 |
Por lo tanto, el nivel n tiene 2n mosaicos en cada dirección.
En las siguientes ilustraciones se muestran los niveles 0, 1 y 2 de un ejemplo de pirámide de imágenes.
Cómo numerar los mosaicos
Los mosaicos de cada nivel se numeran de forma que Google Earth pueda recuperar solo los mosaicos específicos adecuados para el punto de vista actual. Todos los mosaicos se identifican con tres valores:
- Valor x: posición de la fila en la cuadrícula,
- Valor y: posición de la columna en la cuadrícula,
- Nivel: el nivel en la pirámide de imágenes, donde 0 es el nivel superior.
De forma predeterminada, el origen (0,0) se encuentra en la parte inferior izquierda de la cuadrícula. Si el origen de una imagen se encuentra en la parte superior izquierda, es necesario especificar el valor topLeft
para el elemento de origen de cuadrícula (<gridOrigin>).
En la siguiente imagen se muestra la numeración de los mosaicos en el nivel 2 de una imagen de 10 megapíxeles cuyo origen se encuentra en la parte inferior izquierda:
Cómo especificar la URL de una imagen muy grande
Para imágenes de uno o más gigapíxeles, la especificación <href> del elemento <Icon> incluye entidades especiales para especificar los valores de level
, x
e y
de los mosaicos que Google Earth tiene que recuperar. Por ejemplo, la URL de la imagen debe especificarse del siguiente modo:
http://server.company.com/bigphoto/$[level]/row_$[x]_column_[$y].jpg
Para solicitar el mosaico de la fila 2, columna 1, nivel 3, Google Earth recuperaría la siguiente URL:
http://server.company.com/bigphoto/3/row_2_column_1.jpg
Transparencia
Si la imagen es completamente opaca, utiliza el formato JPEG. Si parte de la imagen es opaca y parte es transparente, puedes mezclar mosaicos con formato PNG y JPEG. Si parte de la imagen es opaca y parte es transparente, puedes mezclar mosaicos con formato PNG y JPEG. Si tienes que mezclar formatos, omite la extensión del archivo para la especificación <href> del archivo de la imagen e incluye la extensión del archivo en el nombre de archivo de cada uno de los mosaicos.