Tutorial de KML
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="[Link] <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 [Link] 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="[Link] <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="[Link] <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="[Link] <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>[Link]
g</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="[Link] <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="[Link] <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="[Link]
<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:
1. 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.
2. 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").
3. 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.
4. En el elemento de asignación de estilo (<StyleMap>), especifica el ID
"#normalPlacemark" para el estado normal.
5. En el elemento de asignación de estilo (<StyleMap>), especifica el ID
"#highlightPlacemark" para el estado highlight.
6. 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="[Link]
<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>[Link]
[Link]</href>
</Icon>
</IconStyle>
</Style>
<Style id="normalPlacemark">
<IconStyle>
<Icon>
<href>[Link]
[Link]</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="[Link]
<ScreenOverlay>
<name>Absolute Positioning: Top left</name>
<Icon>
<href>[Link]
[Link]</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/[Link]+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 = [Link](-90, 90)
longitude = [Link](-180, 180)
kml = (
'<?xml version="1.0" encoding="UTF-8"?>\n'
'<kml xmlns="[Link]
'<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/[Link]+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="[Link]
<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>[Link]
</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 = [Link]()
bbox = url['BBOX'].value
bbox = [Link](',')
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="[Link]
'<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/[Link]+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="[Link]
<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>[Link]
bin/[Link]</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/[Link]+xml
El tipo MIME para archivos KMZ es:
application/[Link]
Para Apache, hay que añadir estas líneas al archivo [Link]:
AddType application/[Link]+xml .kml
AddType application/[Link] .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.
Except as otherwise noted, the content of this page is licensed under the Creative Commons
Attribution 3.0 License, and code samples are licensed under the Apache 2.0 License. For
details, see our Site Policies. Java is a registered trademark of Oracle and/or its affiliates.