KML es un formato de archivo que se utiliza para mostrar datos geográficos en un navegador terrestre, como Google Earth, Google Maps y Google Maps para móviles. KML utiliza una estructura basada en etiquetas con atributos y elementos anidados y está basado en el estándar XML. Todas las etiquetas distinguen entre mayúsculas y minúsculas y deben aparecer exactamente como aparecen en la Referencia de KML. En esta referencia se indica qué etiquetas son opcionales. Dentro de un elemento determinado, las etiquetas deben aparecer en el mismo orden en el que aparecen en la referencia. Si no conoces KML, consulta este documento y los archivos de ejemplo que lo acompañan (SamplesInEarth y SamplesInMaps) para empezar a familiarizarte con la estructura básica de un archivo KML y las etiquetas que se utilizan con mayor frecuencia. En la primera sección se describen los recursos que se pueden crear con la interfaz de usuario de Google Earth. Entre estos recursos se incluyen marcas de posición, descripciones, superposiciones de suelo, rutas y polígonos. En la segunda sección se describen los recursos que requieren la creación de KML con un editor de texto. Cuando un archivo de texto se guarda con las extensiones .kml o .kmz, los navegadores terrestres saben cómo reproducirlo. |
Sugerencia: Para ver el "código" KML de un recurso (Feature) en Google Earth, solo tienes que hacer clic con el botón derecho en el recurso en el visor 3D de Google Earth y seleccionar la opción "Copiar". A continuación, pega el contenido del portapapeles en cualquier editor de texto. El recurso visual de Google Earth se convertirá en su equivalente en texto KML. No olvides experimentar con este recurso.
Todos los ejemplos descritos aquí se incluyen en este archivo de ejemplos de KML. Comienza por descargar este archivo para ver los ejemplos en Google Earth.
Para obtener más información
La referencia de KML 2.2 proporciona detalles sobre el formato de archivo KML. Si ya estás familiarizado con el lenguaje XML, también te interesará consultar el esquema de KML 2.2.
Para ver un análisis del uso de algunos de los recursos clave de KML, consulta la Guía para desarrolladores.
Índice
Documentos KML básicos
El modelo más simple de documento KML es el que se puede crear directamente en Google Earth; es decir, no es necesario editar ni crear ningún archivo KML en un editor de texto. Las marcas de posición, las superposiciones de suelo, las rutas y los polígonos se pueden crear directamente en Google Earth.
Marcas de posición
Las marcas de posición (Placemark) son uno de los recursos más utilizados en Google Earth. Permiten marcar una posición en la superficie de la Tierra con un icono de chincheta amarilla. La marca de posición (Placemark) más sencilla incluye solo un elemento de punto (<Point>), que especifica la ubicación de la marca de posición. Puedes especificar un nombre y un icono personalizado para una marca de posición y, si quieres, le puedes añadir otros elementos geométricos.
Abre el archivo de ejemplos de KML en Google Earth y despliega la subcarpeta de marcas de posición (Placemark). Esta carpeta contiene tres tipos diferentes de marcas de posición: simple, flotante y sobresaliente. El código KML para la marca de posición simple es el siguiente:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Placemark>
<name>Marca de posición simple</name>
<description>Pegada al suelo. Se coloca de forma inteligente a la altura del relieve subyacente.</description>
<Point>
<coordinates>-122.0822035425683,37.42228990140251,0</coordinates>
</Point>
</Placemark> </kml>
Este archivo tiene la siguiente estructura:
- Un encabezado XML. Es la línea número 1 de todos los archivos KML. Antes de esta línea no puede haber caracteres ni espacios.
- Una declaración de espacio de nombres de KML. Es la línea número 2 de todos los archivos KML 2.2.
- Un objeto de marca de posición (Placemark) que contiene los siguientes elementos:
- un nombre (name) que se utiliza como etiqueta para la marca de posición,
- una descripción (description) que aparece en una "viñeta" junto a la marca de posición,
- un punto (Point) que especifica la posición de la marca de posición en la superficie de la Tierra (la longitud, la latitud y, opcionalmente, la altitud).
Por si te estabas preguntando dónde está colocada la marca de posición, está justo encima del edificio 41 de Google, donde desarrollamos Google Earth.
Lo que los usuarios suelen pensar que es una "marca de posición" en Google Earth es en realidad un elemento de marca de posición (<Placemark>) con un elemento secundario de punto (<Point>) en KML. Una marca de posición (Placemark) con un elemento de punto (Point) es la única forma de dibujar un icono y una etiqueta en el visor 3D de Google Earth. De forma predeterminada, el icono es la famosa chincheta amarilla. En KML, una marca de posición (<Placemark>) puede incluir uno o varios elementos geométricos como, por ejemplo, una cadena de líneas (LineString), un polígono (Polygon) o un modelo (Model). Pero únicamente una marca de posición (<Placemark>) con un punto (Point) puede tener un icono y una etiqueta. El punto (Point) se usa para colocar el icono, pero no hay representación gráfica del punto en sí.
HTML descriptivo en las marcas de posición
El archivo de ejemplos de KML contiene un ejemplo de casi todo lo que puedes hacer con el texto de una marca de posición (Placemark). Se pueden añadir enlaces, tamaños de fuentes, estilos y colores, además de especificar alineaciones de texto y tablas. Si quieres ver la lista completa, copia y pega en un editor de texto el ejemplo de marca de posición "HTML descriptivo" (en la carpeta de estilos y marcado, "Styles and Markup").
Marcado automático en Google Earth (versión 4.0 y posteriores)
Google Earth 4.0 cuenta con una función de marcado automático que convierte texto como www.google.com en hiperenlaces activos de forma automática en los que el usuario puede hacer clic. El texto de la etiqueta de descripción (<description>), la etiqueta de fragmento (<Snippet>) y el elemento de texto (<text>) del estilo de viñeta (<BalloonStyle>) se transforman automáticamente en hiperenlaces HTTP estándar. No es necesario que añadas etiquetas de referencia de hipertexto (<a href= ...>).
Cómo utilizar el elemento CDATA
Si quieres escribir código HTML estándar dentro de una etiqueta de descripción (<description>), puedes hacerlo dentro de una etiqueta CDATA. Si no, es necesario escribir los paréntesis angulares como referencias a entidades para evitar que Google Earth analice el HTML de manera incorrecta (por ejemplo, el símbolo > se escribe > y el símbolo < se escribe <). Este es un recurso estándar de XML, no es exclusivo de Google Earth.
Observa la diferencia entre las marcas HTML con etiquetas CDATA y sin ellas. En primer lugar, el elemento de descripción (<description>) con etiquetas CDATA.
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <Placemark> <name>Ejemplo de CDATA</name> <description> <![CDATA[ <h1>¡Las etiquetas CDATA son útiles!</h1> <p><font color="red">El texto es <i>más fácil de leer</i> y <b>más fácil de escribir</b> cuando se evita usar referencias de entidad.</font></p> ]]> </description> <Point> <coordinates>102.595626,14.996729</coordinates> </Point> </Placemark> </Document> </kml>
Y este es el elemento de descripción (<description>) sin etiquetas CDATA, por lo que los caracteres especiales deben usar referencias de entidades:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <Placemark> <name>Ejemplo de referencias de entidad</name> <description> <h1>¡Las referencias de entidad son difíciles de escribir!</h1> <p><font color="green">El texo es <i>más fácil de leer</i> y <b>más fácil de escribir</b> cuando puedes evitar el uso de referencias de entidad.</font></p> </description> <Point> <coordinates>102.594411,14.998518</coordinates> </Point> </Placemark> </Document> </kml>
Superposiciones de suelo
Las superposiciones de suelo permiten "colocar" una imagen sobre el relieve de la Tierra. El elemento de icono (<Icon>) incluye el enlace al archivo .jpg que contiene la imagen de superposición. A continuación se ofrece un ejemplo de superposición de suelo que aparece en el archivo de ejemplos de KML, en el que se muestra la erupción del volcán Etna en el año 2001:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Folder>
<name>Superposiciones de suelo</name>
<description>Ejemplos de superposiciones de suelo</description>
<GroundOverlay>
<name>Superposición a gran escala sobre relieve</name>
<description>La superposición muestra la erupción del Etna el 13 de julio de 2001.</description>
<Icon>
<href>http://developers.google.com/kml/documentation/images/etna.jpg</href>
</Icon>
<LatLonBox>
<north>37.91904192681665</north>
<south>37.46543388598137</south>
<east>15.35832653742206</east>
<west>14.60128369746704</west>
<rotation>-0.1556640799496235</rotation>
</LatLonBox>
</GroundOverlay>
</Folder> </kml>
Fíjate en que el archivo empieza con las mismas dos líneas que el primer ejemplo: el encabezado XML y la declaración de espacio de nombres KML.
En este ejemplo se utiliza una carpeta (Folder) llamada "Ground Overlays" (superposiciones de suelo) como mecanismo para agrupar y etiquetar el contenido. Observa cómo aparece la carpeta en el panel "Lugares" cuando se carga el archivo de ejemplos de KML en Google Earth.
La posición de una superposición de suelo está determinada por la etiqueta de cuadro de latitud/longitud (<LatLonBox>). Se establecen los valores de delimitación para las latitudes Norte y Sur y para las longitudes Este y Oeste. Además, se establecen los valores de giro para las imágenes cuyo eje y no coincida con el norte de la cuadrícula. En este ejemplo se usa una imagen JPEG para la superposición. Google Earth también admite los formatos BMP, GIF, TIFF, TGA y PNG.
Rutas
Se pueden crear muchos tipos de rutas en Google Earth y es fácil ser creativo con los datos. En KML, las rutas se crean con el elemento de cadena de líneas (<LineString>). Observa el ejemplo con relieve absoluto (Absolute Extruded) que se incluye en la carpeta de rutas (Paths) para ver cómo se ha generado la forma con el siguiente código:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document>
<name>Rutas</name>
<description>Ejemplos de rutas. Observa que la etiqueta tessellate se establece de forma predeterminada
en 0. Si quieres crear líneas teseladas, deben crearse
(o editarse) directamente en KML.</description> <Style id="yellowLineGreenPoly">
<LineStyle>
<color>7f00ffff</color>
<width>4</width>
</LineStyle>
<PolyStyle>
<color>7f00ff00</color>
</PolyStyle>
</Style> <Placemark>
<name>Relieve absoluto</name>
<description>Pared verde transparente con contornos amarillos</description>
<styleUrl>#yellowLineGreenPoly</styleUrl>
<LineString>
<extrude>1</extrude>
<tessellate>1</tessellate>
<altitudeMode>absoluto</altitudeMode>
<coordinates> -112.2550785337791,36.07954952145647,2357
-112.2549277039738,36.08117083492122,2357
-112.2552505069063,36.08260761307279,2357
-112.2564540158376,36.08395660588506,2357
-112.2580238976449,36.08511401044813,2357
-112.2595218489022,36.08584355239394,2357
-112.2608216347552,36.08612634548589,2357
-112.262073428656,36.08626019085147,2357
-112.2633204928495,36.08621519860091,2357
-112.2644963846444,36.08627897945274,2357
-112.2656969554589,36.08649599090644,2357 </coordinates>
</LineString> </Placemark>
</Document> </kml>
Observa que en realidad se trata solo de una línea dibujada a cierta altitud sobre el suelo. La etiqueta <tessellate> descompone la línea en porciones pequeñas y la etiqueta <extrude> extiende la línea hasta el suelo.
Polígonos
Los polígonos (Polygon) se pueden utilizar para crear edificios simples y otras formas. Busca ejemplos en la carpeta de polígonos (Polygons) en el archivo de ejemplos de KML.
El ejemplo del pentágono se genera dibujando la estructura interna y externa y, a continuación, haciéndola sobresalir hasta el suelo. Este es el código:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Placemark>
<name>El pentágono</name>
<Polygon>
<extrude>1</extrude>
<altitudeMode>relativeToGround</altitudeMode>
<outerBoundaryIs>
<LinearRing>
<coordinates>
-77.05788457660967,38.87253259892824,100
-77.05465973756702,38.87291016281703,100
-77.05315536854791,38.87053267794386,100
-77.05552622493516,38.868757801256,100
-77.05844056290393,38.86996206506943,100
-77.05788457660967,38.87253259892824,100
</coordinates>
</LinearRing>
</outerBoundaryIs>
<innerBoundaryIs>
<LinearRing>
<coordinates>
-77.05668055019126,38.87154239798456,100
-77.05542625960818,38.87167890344077,100
-77.05485125901024,38.87076535397792,100
-77.05577677433152,38.87008686581446,100
-77.05691162017543,38.87054446963351,100
-77.05668055019126,38.87154239798456,100
</coordinates>
</LinearRing>
</innerBoundaryIs>
</Polygon>
</Placemark> </kml>
2 Documentación KML avanzada
En esta sección se describen algunos de los elementos KML que se deben crear con un editor de texto como, por ejemplo, los estilos compartidos para figuras geométricas, los iconos resaltados para las marcas de posición y las superposiciones de pantalla. Crear KML "a mano" es un poco más complicado que utilizar la interfaz de Google Earth para crear y modificar recursos pero, con un poco de práctica, la mayoría de los usuarios llega a dominar la técnica para editar archivos KML y añadirles estos efectos.
Estilos para elementos geométricos
Cuando hayas creado los recursos en Google Earth y hayas examinado el código KML que genera Google Earth, observarás que los estilos son una parte importante para determinar cómo se muestran los datos. Los usuarios más avanzados querrán aprender a definir sus propios estilos.
Si defines un estilo al principio de un documento KML y también estableces un ID, podrás usar dicho estilo en elementos geométricos, marcas de posición y superposiciones que se definan en cualquier parte del documento. Un estilo se define una única vez y después se puede hacer referencia a él muchas veces gracias al elemento de URL de estilos compartidos (shared styles). Un estilo se define una única vez y después se puede hacer referencia a él muchas veces gracias al elemento de URL de estilo (<styleUrl>). Si la definición de estilo está dentro del mismo archivo, el ID de estilo deberá estar precedido del signo #. Por el contrario, si la definición de estilo se encuentra en un archivo externo, habrá que incluir la dirección URL completa en el elemento <styleUrl>.
El archivo de ejemplos de KML contiene varios estilos compartidos, cada uno de ellos definido con un ID al principio del archivo. Es mucho más fácil si los ID son cadenas descriptivas que indiquen el tipo de efecto que aplican. Este es un ejemplo de un estilo (transBluePoly) que define un color azul transparente para las caras del polígono y una línea con un ancho de 1,5 (del color blanco predeterminado) para los bordes del polígono. Es el estilo que se usa en el edificio 41 (Building 41) del ejemplo del campus de Google (Google Campus) incluido en la carpeta de polígonos (Polygons):
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<Style id="transBluePoly">
<LineStyle>
<width>1.5</width>
</LineStyle>
<PolyStyle>
<color>7dff0000</color>
</PolyStyle>
</Style> <Placemark>
<name>Building 41</name>
<styleUrl>#transBluePoly</styleUrl>
<Polygon>
<extrude>1</extrude>
<altitudeMode>relativeToGround</altitudeMode>
<outerBoundaryIs>
<LinearRing>
<coordinates> -122.0857412771483,37.42227033155257,17
-122.0858169768481,37.42231408832346,17
-122.085852582875,37.42230337469744,17
-122.0858799945639,37.42225686138789,17
-122.0858860101409,37.4222311076138,17
-122.0858069157288,37.42220250173855,17
-122.0858379542653,37.42214027058678,17
-122.0856732640519,37.42208690214408,17
-122.0856022926407,37.42214885429042,17
-122.0855902778436,37.422128290487,17
-122.0855841672237,37.42208171967246,17
-122.0854852065741,37.42210455874995,17
-122.0855067264352,37.42214267949824,17
-122.0854430712915,37.42212783846172,17
-122.0850990714904,37.42251282407603,17
-122.0856769818632,37.42281815323651,17
-122.0860162273783,37.42244918858722,17
-122.0857260327004,37.42229239604253,17
-122.0857412771483,37.42227033155257,17 </coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
</Document>
</kml>
Observa que el elemento de estilo (<Style>) es secundario con respecto al elemento de marca de posición (<Placemark>), no con respecto al geométrico (Geometry) al que afecta.
Estilos para iconos destacados
El icono resaltado (Highlighted Icon) de la carpeta de estilos y marcado (Styles and Markup) muestra cómo se crea con KML un efecto de visualización de un elemento al pasar el cursor por encima de él. El documento define dos estilos: uno para la marca de posición normal (normalPlacemark) y otro para la marca resaltada (highlightPlacemark). El elemento de asignación de estilo (<StyleMap>) tiene dos pares clave/valor que asignan cada estilo de icono a un estado de icono. Hay dos estados de icono: normal y highlight.
A continuación se muestran los pasos básicos:
- Define un estilo (<Style>) para el icono normal de la marca de posición y asígnale un ID (que en este caso es "normal Placemark"). El estilo (<Style>) incluye un icono (<Icon>) con una referencia de hipertexto (<href>) a la imagen actual que se va a utilizar, tal y como se muestra a continuación.
- Define un estilo (<Style>) para el icono resaltado de la marca de posición y asígnale un ID (que en este caso es "highlightPlacemark").
- Crea el elemento de asignación de estilo (<StyleMap>) y asígnale un ID ("exampleStyleMap"). La marca de posición (Placemark) hará referencia a este ID.
- En el elemento de asignación de estilo (<StyleMap>), especifica el ID "#normalPlacemark" para el estado normal.
- En el elemento de asignación de estilo (<StyleMap>), especifica el ID "#highlightPlacemark" para el estado highlight.
- En la marca de posición, añade un elemento de URL de estilo (<styleUrl>) que haya referencia al ejemplo de asignación de estilo ("#exampleStyleMap").
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Icono destacado</name>
<description>Coloca el ratón sobre el icono para ver si muestra el nuevo icono</description>
<Style id="highlightPlacemark">
<IconStyle>
<Icon>
<href>http://maps.google.com/mapfiles/kml/paddle/red-stars.png</href>
</Icon>
</IconStyle>
</Style>
<Style id="normalPlacemark">
<IconStyle>
<Icon>
<href>http://maps.google.com/mapfiles/kml/paddle/wht-blank.png</href>
</Icon>
</IconStyle>
</Style>
<StyleMap id="exampleStyleMap">
<Pair>
<key>normal</key>
<styleUrl>#normalPlacemark</styleUrl>
</Pair>
<Pair>
<key>highlight</key>
<styleUrl>#highlightPlacemark</styleUrl>
</Pair>
</StyleMap>
<Placemark>
<name>Pasa por encima de este icono</name>
<styleUrl>#exampleStyleMap</styleUrl>
<Point>
<coordinates>-122.0856545755255,37.42243077405461,0</coordinates>
</Point>
</Placemark>
</Document>
</kml>
Superposiciones de pantalla
Las superposiciones de pantalla no se pueden crear directamente en Google Earth y, en consecuencia, son más difíciles de crear que las superposiciones de suelo. Puedes encontrar una amplia gama de ejemplos en la carpeta de superposiciones de pantalla (Screen Overlays) en el archivo de ejemplos de KML.
Como ejemplo, habilita la carpeta "Absolute Positioning: Top left" (Posicionamiento absoluto: arriba a la izquierda) en el archivo de ejemplos de KML para ver una superposición de pantalla en la parte superior izquierda de la ventana de la vista. Esto se ha creado con el siguiente código KML:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<ScreenOverlay>
<name>Absolute Positioning: Top left</name>
<Icon>
<href>http://developers.google.com/kml/documentation/images/top_left.jpg</href>
</Icon>
<overlayXY x="0" y="1" xunits="fraction" yunits="fraction"/>
<screenXY x="0" y="1" xunits="fraction" yunits="fraction"/>
<rotationXY x="0" y="0" xunits="fraction" yunits="fraction"/>
<size x="0" y="0" xunits="fraction" yunits="fraction"/>
</ScreenOverlay>
</kml>
El posicionamiento está controlado por la asignación de un punto de la imagen especificado por la superposición <overlayXY> a un punto de la pantalla especificado por <screenXY>. En este caso, la esquina superior izquierda de la imagen (0,1) se ha hecho coincidir con el mismo punto de la pantalla.
Consulta los demás ejemplos de la carpeta para ver cómo se pueden obtener otras posiciones fijas y crear imágenes con un tamaño dinámico con respecto al tamaño de la pantalla. Ten en cuenta que las unidades de x (xunits) y las unidades de y (yunits) también se pueden especificar en "píxeles" para conseguir un control preciso. Para obtener información más detallada, consulta la Referencia de KML 2.2.
Enlaces en la red
Un enlace de red contiene un elemento de enlace (<Link>) con una referencia de hipertexto (<href>) que carga un archivo. Un enlace de red contiene un elemento de enlace (<Link>) con una referencia de hipertexto (<href>) que carga un archivo. A pesar del nombre "enlace de red" (<NetworkLink>), los archivos que se cargan no han de proceder necesariamente de una red.
La referencia de hipertexto (<href>) de un enlace especifica la ubicación de alguno de los siguientes elementos:
- Un archivo de imagen usado por los iconos en los estilos de icono, las superposiciones de suelo y las superposiciones en pantalla.
- Un archivo de modelo usado en el elemento de modelo (<Model>).
- Un archivo KML o KMZ cargado por un enlace de red.
El archivo especificado puede ser un archivo local o uno que esté ubicado en un servidor remoto. En su forma más sencilla, los enlaces de red constituyen una forma útil de dividir un archivo KML grande en archivos más pequeños y manejables en el mismo ordenador.
Hasta ahora, para todos nuestros ejemplos, el código KML se ha tenido que suministrar a Google Earth desde un ordenador local. Los enlaces de red te permiten proporcionar el contenido desde una ubicación remota y se utilizan normalmente para distribuir datos a un amplio número de usuarios. De esta forma, si es necesario corregir datos, solo hay que cambiarlos en la ubicación de origen, de forma que todos los usuarios recibirán los datos actualizados de manera automática.
Secuencias de comandos de CGI para KML
Además de hacer referencia a archivos que contienen datos estáticos, una referencia de hipertexto (<href>) de un enlace de red puede hacer referencia a datos generados de forma dinámica (por ejemplo, mediante una secuencia de comandos de CGI que se encuentre en un servidor de red). Con algo de conocimiento de un lenguaje de secuencias de comandos como, por ejemplo, PHP, Python o Perl, se pueden crear secuencias de comandos que proporcionen un flujo (o un archivo) de datos KML a cada enlace de red.
Hay dos cosas que son necesarias para enviar KML a través de una secuencia de comandos de CGI de red:
Cuando se hace una llamada desde el cliente (Google Earth) al servidor: el servidor debe 1) devolver un código de respuesta 200 de HTTP y 2) establecer el tipo de contenido de la respuesta en text/plain
o application/vnd.google-earth.kml+xml.
La respuesta debe tener un formato KML válido. Para las aplicaciones complejas, es muy importante que los errores se gestionen correctamente.
Sugerencia: Una manera sencilla de gestionar los errores es analizar el error del servidor como el texto de un nombre de carpeta. Por ejemplo, puedes tener la respuesta del servidor de base de datos inaccesible (<Folder><name>database inaccessible</name></Folder>
) como una cadena. Esto proporciona más información y es más cómodo para el usuario que dejar que la conexión se corte.
En los ejemplos siguientes se utiliza Python, pero son igualmente válidos en otros lenguajes de secuencias de comandos.
Cómo generar una marca de posición aleatoria
La siguiente secuencia de comandos escrita en Python genera valores enteros aleatorios para la latitud (latitude) y la longitud (longitude) y, a continuación, inserta dichos valores en el elemento de coordenadas (<coordinates>) de un punto (<Point>). Cada vez que se actualice el enlace de red, la secuencia de comandos escrita en Python se ejecutará de nuevo y generará KML con nuevos valores de latitud y longitud.
#!/usr/bin/python import random latitude = random.randrange(-90, 90) longitude = random.randrange(-180, 180) kml = ( '<?xml version="1.0" encoding="UTF-8"?>\n' '<kml xmlns="http://www.opengis.net/kml/2.2">\n' '<Placemark>\n' '<name>Marca de posición aleatoria</name>\n' '<Point>\n' '<coordinates>%d,%d</coordinates>\n' '</Point>\n' '</Placemark>\n' '</kml>' ) %(longitude, latitude) print 'Content-Type: application/vnd.google-earth.kml+xml\n' print kml
Este es un ejemplo de archivo KML que contiene un enlace de red que carga esta secuencia de comandos escrita en Python:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Folder>
<name>Enlaces de red</name>
<visibility>0</visibility>
<open>0</open>
<description>Enlace de red, ejemplo 1</description>
<NetworkLink>
<name>Marca de posición aleatoria</name>
<visibility>0</visibility>
<open>0</open>
<description>Un lenguaje de comandos sencillo del servidor que genera una nueva
marca de posición aleatoria en cada llamada</description>
<refreshVisibility>0</refreshVisibility>
<flyToView>0</flyToView>
<Link>
<href>http://yourserver.com/cgi-bin/randomPlacemark.py</href>
</Link>
</NetworkLink>
</Folder>
</kml>
Consultas de actualización basada en la vista
Un enlace de red estándar es un enlace unidireccional: solo hay flujo de datos desde el servidor hacia Google Earth. Los datos actualizados basados en la vista permiten la comunicación bidireccional. Cuando está activa la actualización basada en la vista, Google Earth devuelve las coordenadas de la vista al servidor en el momento especificado. Puede ser cada n segundos, minutos, horas o una vez cada cierta cantidad de tiempo transcurrido desde que la vista dejó de moverse. Consulta el modo de actualización de la vista (<viewRefreshMode>) en la Referencia de KML 2.2.
Las coordenadas se devuelven al servidor mediante la instrucción GET HTTP que anexa las coordenadas de la siguiente forma (esta es la información predeterminada del cuadro delimitador):
GET /path/to/sever/script/query?BBOX=[longitude_west, latitude_south, longitude_east, latitude_north] HTTP/1.1
Si la solicitud se hiciera mientras el usuario está mirando la ciudad de San Francisco, las coordenadas serían:
GET /path/to/server/script/query?BBOX=-122.497790,37.730385,-122.380087,37.812331 HTTP/1.1
Este recurso se puede usar para aplicaciones muy creativas pero, para que vayas empezando, te ofrecemos este sencillo ejemplo.
Cómo realizar el seguimiento de un punto que está justo en el punto de mira
La siguiente secuencia de comandos del servidor escrita en Python analiza el mensaje de devolución enviado por Google Earth y responde con una marca de posición en el centro de la pantalla. Cada vez que se actualiza el enlace de red, se genera una nueva marca de posición.
#!/usr/bin/python import cgi url = cgi.FieldStorage() bbox = url['BBOX'].value bbox = bbox.split(',') west = float(bbox[0]) south = float(bbox[1]) east = float(bbox[2]) north = float(bbox[3]) center_lng = ((east - west) / 2) + west center_lat = ((north - south) / 2) + south kml = ( '<?xml version="1.0" encoding="UTF-8"?>\n' '<kml xmlns="http://www.opengis.net/kml/2.2">\n' '<Placemark>\n' '<name>View-centered placemark</name>\n' '<Point>\n' '<coordinates>%.6f,%.6f</coordinates>\n' '</Point>\n' '</Placemark>\n' '</kml>' ) %(center_lng, center_lat) print 'Content-Type: application/vnd.google-earth.kml+xml\n' print kml
Este es el código KML para el enlace de red que carga la secuencia de comandos escrita en Python:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Folder>
<name>Enlaces de red</name>
<visibility>0</visibility>
<open>0</open>
<description>Enlace de red, ejemplo 2</description>
<NetworkLink>
<name>Marca de posición centrada en la vista</name>
<visibility>0</visibility>
<open>0</open>
<description>La actualización basada en la vista permite que el servidor remoto calcule
el centro de tu pantalla y presente una marca de posición.</description>
<refreshVisibility>0</refreshVisibility>
<flyToView>0</flyToView>
<Link>
<href>http://yourserver.com/cgi-bin/viewCenteredPlacemark.py</href>
<refreshInterval>2</refreshInterval>
<viewRefreshMode>onStop</viewRefreshMode>
<viewRefreshTime>1</viewRefreshTime>
</Link>
</NetworkLink>
</Folder>
</kml>
El principio que se ilustra en este ejemplo se puede usar para aplicaciones muy complejas. Por ejemplo, si tienes una base de datos de información geográfica, podrás extraer las coordenadas del visor, hacer una llamada a la base de datos para obtener los datos específicos de la vista y devolverlos a Google Earth como KML.
3 Tipos MIME para KML
Al responder a una petición de Google Earth (o de cualquier navegador terrestre), un servidor KML debe seguir una serie de reglas de forma que Google Earth pueda interpretar correctamente sus respuestas.
Si el proceso es correcto, el servidor debe devolver un código de respuesta de HTTP 200 y establecer el tipo de contenido de la respuesta en un tipo MIME adecuado, tal y como se describe aquí.
Google Earth puede leer archivos KML y KMZ. El tipo MIME para archivos KML es:
application/vnd.google-earth.kml+xml
El tipo MIME para archivos KMZ es:
application/vnd.google-earth.kmz
Para Apache, hay que añadir estas líneas al archivo httpd.conf:
AddType application/vnd.google-earth.kml+xml .kml
AddType application/vnd.google-earth.kmz .kmz
Consulta la documentación de Microsoft para obtener información detallada sobre la configuración de tipos MIME en los servicios de información de Internet (IIS) de Microsoft.
El cuerpo de la respuesta debe contener datos KML válidos, incluida la declaración XML (<?xml version="1.0" encoding="UTF-8"?>
). Si el servidor devuelve KML no válido, el enlace de red se detendrá, quedará desactivado y emitirá un mensaje de error.
Más información
¿Quieres saber más? Consulta la Guía para desarrolladores, en la que se describen los recursos principales de KML. También puedes consultar la Referencia de KML para obtener información sobre elementos específicos.