¿Qué son KML y KMZ?
KML — Keyhole Markup Language — es un formato de archivo basado en XML para expresar anotaciones geográficas y visualizaciones en mapas bidimensionales y navegadores terrestres tridimensionales. Creado originalmente por Keyhole Inc. para su aplicación EarthViewer 3D, KML se convirtió en un formato de referencia cuando Google adquirió Keyhole en 2004 e integró soporte KML en Google Earth. En 2008, el Open Geospatial Consortium (OGC) adoptó KML como estándar internacional (OGC KML 2.2), consolidando su posición junto a GeoJSON y Shapefile como pilares del intercambio de datos geoespaciales.
KMZ es un archivo comprimido ZIP que contiene uno o varios archivos KML más cualquier recurso referenciado — imágenes de iconos, texturas incrustadas, archivos de modelos 3D COLLADA. KMZ es el formato de intercambio preferido porque agrupa todo en un único contenedor portátil y reduce el tamaño entre un 50 y un 80% en comparación con KML sin comprimir que enlaza imágenes externas.
Elementos Principales de KML
Los documentos KML describen características geográficas mediante una jerarquía de elementos XML.
Placemarks
La unidad fundamental de anotación — una ubicación con geometría y descripción opcional:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Mis Ubicaciones</name>
<Placemark>
<name>Torre Eiffel</name>
<description>Construida para la Exposición Universal de 1889 en París.</description>
<Point>
<coordinates>2.2945,48.8584,324</coordinates>
</Point>
</Placemark>
</Document>
</kml>
Las coordenadas se especifican como longitud,latitud,altitud — nótese el orden: longitud primero. La altitud es opcional y se expresa en metros sobre la superficie de referencia definida por altitudeMode.
Tipos de Geometría
| Tipo | Elemento KML | Caso de uso |
|---|---|---|
| Punto | <Point> |
Marcadores de ubicación, chinchetas, waypoints |
| Línea | <LineString> |
Rutas, trayectorias, tuberías, carreteras |
| Polígono | <Polygon> |
Áreas, límites administrativos, zonas |
| Multigeometría | <MultiGeometry> |
Formas compuestas que combinan los anteriores |
| Modelo | <Model> |
Objetos 3D que referencian archivos COLLADA .dae |
Modos de Altitud
| Modo | Comportamiento |
|---|---|
clampToGround |
Característica anclada a la superficie del terreno (predeterminado) |
relativeToGround |
Altitud sobre el terreno local en esa latitud/longitud |
absolute |
Altitud sobre el nivel del mar del elipsoide WGS84 |
clampToSeaFloor |
Anclado al fondo oceánico (extensión gx:) |
Estilos e Iconos
KML separa la geometría de la presentación mediante elementos Style con nombre:
<Style id="marcadorAzul">
<IconStyle>
<color>ffff0000</color>
<scale>1.3</scale>
<Icon>
<href>http://maps.google.com/mapfiles/kml/paddle/blu-circle.png</href>
</Icon>
</IconStyle>
<LabelStyle>
<color>ffffffff</color>
<scale>0.9</scale>
</LabelStyle>
<LineStyle>
<color>ffff0000</color>
<width>4</width>
</LineStyle>
<PolyStyle>
<color>7fff0000</color>
<fill>1</fill>
<outline>1</outline>
</PolyStyle>
</Style>
<Placemark>
<styleUrl>#marcadorAzul</styleUrl>
<Point><coordinates>2.2945,48.8584,0</coordinates></Point>
</Placemark>
Los colores en KML usan el orden AABBGGRR (alfa, azul, verde, rojo) — el inverso del hexadecimal web RGB. Un rojo totalmente opaco es ff0000ff; un rojo con 50% de transparencia es 7f0000ff. El canal alfa ff = totalmente opaco, 00 = totalmente transparente.
Los elementos StyleMap permiten estilos separados para los estados normal y resaltado, habilitando efectos de hover en Google Earth.
NetworkLink: Fuentes de Datos Dinámicas
NetworkLink permite que los documentos KML carguen datos KML/KMZ remotos bajo demanda o según un temporizador:
<NetworkLink>
<name>Feed de Terremotos en Tiempo Real</name>
<Link>
<href>https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_hour.kml</href>
<refreshMode>onInterval</refreshMode>
<refreshInterval>300</refreshInterval>
</Link>
</NetworkLink>
Esto permite superposiciones de datos en tiempo real — alertas de terremotos, posiciones de seguimiento de vuelos, radar meteorológico — todos extrayendo datos de una URL que se regenera cada N segundos. NetworkLink es el mecanismo detrás de las capas de datos en vivo de Google Earth: tráfico, clima, fronteras y marcadores de la comunidad.
viewRefreshMode combinado con viewRefreshTime activa recargas cada vez que cambia la vista de la cámara — crítico para conjuntos de datos grandes cargados en teselas espaciales, donde solo se solicitan datos para el viewport actual.
GroundOverlay: Superposición de Imágenes Raster
Drapeado de imágenes raster (imágenes de satélite, mapas personalizados, mapas de calor, mapas históricos) sobre el terreno 3D:
<GroundOverlay>
<name>Extensión de Inundación — 2024-03-15</name>
<color>aaffffff</color>
<Icon>
<href>extension_inundacion.png</href>
</Icon>
<LatLonBox>
<north>40.850</north>
<south>40.700</south>
<east>-73.900</east>
<west>-74.050</west>
<rotation>0</rotation>
</LatLonBox>
</GroundOverlay>
El elemento <color> controla la opacidad global. GroundOverlay se usa ampliamente en gestión de emergencias para superponer imágenes de levantamientos aéreos y mapas de evaluación de daños sobre Google Earth durante desastres.
Carpetas, Listas de Reproducción y Tours
Los elementos Folder organizan las características jerárquicamente — exactamente como un sistema de archivos. Google Earth los muestra como capas plegables en el panel Lugares.
Los elementos gx:Tour (del espacio de nombres de Google Extensions) definen secuencias de vuelo animadas:
<gx:Tour>
<name>Tour por Capitales Europeas</name>
<gx:Playlist>
<gx:FlyTo>
<gx:duration>4.0</gx:duration>
<LookAt>
<longitude>2.3522</longitude>
<latitude>48.8566</latitude>
<altitude>1500</altitude>
<range>3000</range>
<tilt>55</tilt>
<heading>0</heading>
</LookAt>
</gx:FlyTo>
<gx:Wait><gx:duration>2.0</gx:duration></gx:Wait>
</gx:Playlist>
</gx:Tour>
El prefijo de espacio de nombres gx: indica elementos de extensiones de Google — válidos en Google Earth pero potencialmente ignorados en implementaciones OGC estrictas. Los tours se usan extensamente en periodismo, educación y visualización inmobiliaria.
Creación y Conversión de KML
Crear KML con Python usando simplekml:
import simplekml
kml = simplekml.Kml()
# Añadir un marcador de punto
pnt = kml.newpoint(name="Coliseo, Roma")
pnt.coords = [(12.4924, 41.8902, 0)]
pnt.description = "Construido entre 70 y 80 d.C. Aforo: ~50.000 espectadores."
pnt.style.iconstyle.icon.href = (
"http://maps.google.com/mapfiles/kml/paddle/grn-circle.png"
)
# Añadir un polígono
pol = kml.newpolygon(name="Huella aproximada")
pol.outerboundaryis = [(12.4915, 41.8896),
(12.4935, 41.8896),
(12.4935, 41.8910),
(12.4915, 41.8910),
(12.4915, 41.8896)]
pol.style.polystyle.color = "7f00ff00" # verde 50% transparente
kml.save("coliseo.kml")
kml.savekmz("coliseo.kmz") # versión comprimida
Convertir entre formatos con ogr2ogr (GDAL):
# KML → GeoJSON
ogr2ogr -f GeoJSON salida.geojson entrada.kml
# KML → ESRI Shapefile
ogr2ogr -f "ESRI Shapefile" carpeta_salida/ entrada.kml
# GeoJSON → KML
ogr2ogr -f KML salida.kml entrada.geojson
# Simplificar geometría (reducir número de vértices)
ogr2ogr -f KML simplificado.kml entrada.kml -simplify 0.0001
GDAL's ogr2ogr es la navaja suiza universal para la conversión de formatos vectoriales. GDAL 3.x incluye soporte de lectura/escritura KML habilitado por defecto, reconociendo automáticamente las extensiones .kml y .kmz.
KML vs GeoJSON
| Característica | KML | GeoJSON |
|---|---|---|
| Sintaxis | XML | JSON |
| Estilos integrados | Sí (IconStyle, LineStyle, PolyStyle) | No (requiere spec externa) |
| Soporte 3D | Completo (altitud, extrusión, modelos) | Limitado (solo coordenada Z) |
| Google Earth nativo | Sí | Mediante conversión |
| Leaflet / MapboxGL | Requiere plugin | Nativo |
| Estándar OGC | Sí (KML 2.2, 2008) | Sí (RFC 7946, 2016) |
| Compresión típica | KMZ (ZIP) | FlatGeobuf / GeoPackage |
| Streaming/teselas | NetworkLink + LOD de Region | Teselas vectoriales (MVT) |
GeoJSON ha reemplazado en gran medida a KML en aplicaciones de cartografía web porque se integra nativamente con entornos JavaScript, APIs REST y bibliotecas de mapas modernas. KML sigue dominando en flujos de trabajo de Google Earth para escritorio, entregables de levantamientos aéreos, presentaciones ante organismos de aviación y cualquier escenario que requiera visualización 3D rica, animaciones de tours o superposiciones dinámicas temporizadas.
Validación de KML
KML 2.2 tiene un esquema XML (XSD) formal descargable de OGC:
xmllint --schema ogckml22.xsd --noout tuarchivo.kml
Errores comunes en KML:
- Error en el orden de coordenadas: escribir
latitud,longituden lugar delongitud,latitud— sitúa París en el Océano Atlántico - Anillo de polígono no cerrado: el límite exterior debe repetir la primera coordenada como última
- altitudeMode no válido: erratas como
relativeToTerrainen lugar derelativeToGround - Declaración de espacio de nombres faltante:
xmlns="http://www.opengis.net/kml/2.2"en el elemento raíz<kml>
Google Earth es tolerante con muchos errores de validación; las implementaciones OGC estrictas los rechazan directamente.
Aplicaciones del Mundo Real
- Gestión de emergencias: FEMA publica archivos KML de zonas de evacuación durante huracanes e incendios; los gestores de emergencias los cargan en Google Earth para briefings de equipos de campo
- Aviación: las Restricciones de Vuelo Temporales (TFR) de la FAA y las zonas de vuelo de drones se distribuyen como KML a través del Sistema de Distribución de Datos UAS de la FAA
- Inmobiliaria: superposiciones de límites de propiedades y mapas de zonas de desarrollo para due diligence e inversión
- Conservación: WWF, NPS e IUCN distribuyen conjuntos de datos de límites de áreas protegidas como KMZ para equipos de campo sin conocimientos de SIG
- Planificación urbana: los departamentos de planificación municipal publican mapas de zonificación, corredores de tránsito y superposiciones de infraestructuras como KML para consulta pública
- Agricultura de precisión: mapas de límites de campo, cuadrículas de muestreo de suelo y zonas de aplicación a tasa variable distribuidos a maquinaria agrícola mediante KML
Nota de rendimiento: Google Earth comienza a degradarse con aproximadamente 10.000 características visibles simultáneamente. Para conjuntos de datos grandes, usa NetworkLink combinado con elementos Region y configuraciones de Nivel de Detalle (LOD) para cargar datos progresivamente a medida que el usuario hace zoom.
Conversiones relacionadas
Conversiones frecuentes del catálogo: