Convertir KML y KMZ a SHP en QGIS conservando atributos y colores
1 / 2

Gabriel Gómez Gómez · Publicado el

Convertir KML y KMZ a SHP en QGIS conservando atributos y colores

  • Al trabajar con archivos KML o KMZ en QGIS, me encontré con un problema bastante común: al convertirlos directamente a Shapefile, parte de la información puede perderse o quedar almacenada de una forma poco útil. En algunos casos, todos los atributos aparecen dentro de una sola columna llamada description, mientras que los colores y estilos originales dejan de visualizarse.

  • Para resolverlo preparé una herramienta en Python para QGIS que automatiza la conversión y trata de conservar tanto las geometrías como los atributos y la información necesaria para reconstruir los colores originales.

  • Descargar la herramienta

  • La herramienta está pensada para ejecutarse directamente dentro de QGIS, utilizando PyQGIS. No es necesario instalar Python por separado.

  • Descargar conversor universal KML/KMZ → SHP para QGIS
  • Cómo utilizarla

  • 1. Abrir QGIS

  • Abre QGIS normalmente. No es necesario cargar previamente el archivo .kml o .kmz que quieres convertir.

  • 2. Abrir la consola de Python

  • Dentro de QGIS entra a Complementos → Consola de Python y después selecciona Mostrar editor.

  • 3. Abrir el script

  • Desde el editor abre el archivo KMZ_KML_a_SHP_Universal_QGIS.py. También puedes copiar su contenido completo y pegarlo directamente en el editor.

  • 4. Ejecutar

  • Presiona Ejecutar script. La herramienta solicitará primero el archivo KML/KMZ y posteriormente una carpeta donde guardar los resultados.

  • Qué problema resuelve

  • Uno de los problemas que encontré es que algunos KML almacenan sus atributos dentro del campo description utilizando una tabla HTML. QGIS puede mostrar toda esa información como un único texto en lugar de convertirla en columnas.

  • description-kml.htmlHTML
    <tr>
      <td>FID</td>
      <td>28</td>
    </tr>
    
    <tr>
      <td>UGA</td>
      <td>33</td>
    </tr>
    
    <tr>
      <td>Politica</td>
      <td>Aprovechamiento-Restauración</td>
    </tr>
    
    <tr>
      <td>area_ha</td>
      <td>107.968646</td>
    </tr>
  • En una importación convencional, lo anterior puede aparecer completo dentro de una sola columna llamada description. La herramienta intenta detectar automáticamente la estructura y convertirla en campos reales.

  • FIDUGAPoliticaarea_ha
    2833Aprovechamiento-Restauración107.968646
  • Los nombres de los campos no están escritos de forma fija dentro de la herramienta. Se detectan a partir del contenido del archivo.

  • Por ejemplo, si otro KML contiene Municipio, Localidad, Poblacion, Categoria y Observacion, la herramienta intentará crear automáticamente esas columnas.

  • Cómo funciona

  • flujo.txtTEXT
    KML / KMZ
       ↓
    Lectura de documentos KML
       ↓
    Detección de Placemark
       ↓
    Lectura de geometrías
       ↓
    Detección de MultiGeometry
       ↓
    Extracción de atributos
       ↓
    description HTML → columnas
       ↓
    ExtendedData → columnas
       ↓
    Lectura de Style / StyleMap
       ↓
    Conversión de colores KML
       ↓
    Validación de entidades
       ↓
    GeoPackage
       ↓
    Shapefile + QML
  • Geometrías compatibles

  • La herramienta está diseñada para reconocer las geometrías vectoriales más comunes utilizadas dentro de KML y KMZ.

    • Point para puntos.
    • LineString para líneas.
    • Polygon para polígonos.
    • MultiGeometry para objetos formados por varias geometrías.
  • Geometrías multipartes

  • Un aspecto importante es que un solo Placemark puede contener varios polígonos. Eso no significa necesariamente que deban generarse varias filas en la tabla.

  • multigeometry.txtTEXT
    Placemark
     ├── Polygon
     ├── Polygon
     └── Polygon
  • En ese caso puede tratarse de una sola entidad multipartes, formada por tres áreas físicamente separadas pero asociadas al mismo registro.

  • Conservación de atributos

  • La herramienta intenta recuperar información almacenada mediante diferentes mecanismos utilizados por KML.

    • description con tablas HTML.
    • ExtendedData.
    • Data y value.
    • SchemaData.
    • SimpleData.
  • extended-data.xmlXML
    <ExtendedData>
      <Data name="Municipio">
        <value>Pachuca de Soto</value>
      </Data>
    </ExtendedData>
  • Esto permite que la herramienta pueda utilizarse con archivos generados por distintas aplicaciones y no únicamente con un esquema específico de atributos.

  • Conservación de colores

  • Otro problema importante durante la conversión es la simbología. Un archivo KMZ puede visualizar correctamente diferentes colores, pero al exportarlo directamente a SHP QGIS puede mostrar todas las entidades con un solo color.

  • KML almacena normalmente los colores utilizando el formato AABBGGRR, mientras que QGIS trabaja de otra forma. La herramienta interpreta esos valores y los transforma para poder reconstruir el estilo.

  • ComponenteSignificado
    AATransparencia
    BBAzul
    GGVerde
    RRRojo
  • Además de generar el estilo QML, los componentes de color se almacenan dentro de la tabla de atributos.

  • campos-color.txtTEXT
    FILL_R
    FILL_G
    FILL_B
    FILL_A
    
    LINE_R
    LINE_G
    LINE_B
    LINE_A
    
    LINE_W
  • Así, aunque posteriormente se pierda el archivo .qml, los valores necesarios para reconstruir la simbología continúan dentro de los datos.

  • Style y StyleMap

  • Los colores de un KML no siempre se encuentran directamente dentro de cada Placemark. Es común que se utilicen referencias a estilos compartidos.

  • style-map.txtTEXT
    Placemark
       ↓
    styleUrl
       ↓
    StyleMap
       ↓
    Style
       ↓
    PolyStyle / LineStyle
  • La herramienta intenta seguir estas referencias para identificar el estilo correspondiente a cada objeto.

    • Style.
    • StyleMap.
    • styleUrl.
    • Estilos definidos directamente dentro del Placemark.
    • PolyStyle.
    • LineStyle.
    • IconStyle.
  • Archivos que genera

  • Si el archivo original se llama UGA_Pach0726.kmz, el resultado puede incluir los siguientes archivos:

  • salida.txtTEXT
    UGA_Pach0726_FINAL.gpkg
    
    UGA_Pach0726_FINAL.shp
    UGA_Pach0726_FINAL.dbf
    UGA_Pach0726_FINAL.shx
    UGA_Pach0726_FINAL.prj
    UGA_Pach0726_FINAL.cpg
    UGA_Pach0726_FINAL.qml
  • GeoPackage

  • Recomiendo utilizar el archivo .gpkg como versión maestra. GeoPackage es más moderno que Shapefile y maneja mejor nombres de campos, textos extensos y diferentes capas.

  • Shapefile

  • El SHP se genera principalmente para mantener compatibilidad con sistemas que todavía requieren este formato.

  • QML

  • El archivo .qml almacena la configuración de simbología de QGIS. Es necesario porque el formato Shapefile no guarda internamente los colores y estilos de representación de la misma forma que KML o KMZ.

  • Archivos con diferentes tipos de geometría

  • Un mismo KML puede contener puntos, líneas y polígonos. Como Shapefile no permite mezclar diferentes tipos de geometría dentro de una misma capa, la herramienta puede separarlos.

  • geometrias-mixtas.txtTEXT
    ARCHIVO_FINAL_POINT.shp
    ARCHIVO_FINAL_LINE.shp
    ARCHIVO_FINAL_POLYGON.shp
  • En GeoPackage, en cambio, es posible conservar varias capas dentro del mismo archivo.

  • geopackage.txtTEXT
    ARCHIVO_FINAL.gpkg
     ├── POINT
     ├── LINE
     └── POLYGON
  • ¿Es realmente universal?

  • La herramienta está diseñada para ser reutilizable y no depender de nombres concretos de archivos, campos o capas.

  • No exige que existan campos llamados FID, UGA, Politica o area_ha. Los campos y estructuras se intentan detectar automáticamente. Esto permite utilizar el mismo script con otros KML y KMZ provenientes de diferentes proyectos.

  • Limitaciones

  • GroundOverlay

  • Los GroundOverlay normalmente representan imágenes georreferenciadas, como mapas escaneados, ortofotos o imágenes satelitales. No son geometrías vectoriales convencionales y no deben convertirse directamente a SHP.

  • Modelos 3D

  • Los elementos Model, archivos COLLADA .dae y otras estructuras 3D requieren un tratamiento diferente. Shapefile no puede conservar toda la información de un modelo tridimensional.

  • NetworkLink

  • Un NetworkLink puede apuntar a información almacenada en otro archivo o incluso en un servidor externo. Si los datos no están incluidos físicamente dentro del KMZ, es posible que no puedan procesarse.

  • SuperOverlay

  • Los SuperOverlay se utilizan principalmente para grandes mosaicos de imágenes y estructuras jerárquicas. No corresponden directamente a capas vectoriales tradicionales.

  • gx:Track y gx:MultiTrack

  • Google Earth permite almacenar recorridos asociados a tiempo y elevación mediante gx:Track y gx:MultiTrack. Algunas variantes requieren un procesamiento especial para conservar correctamente la secuencia temporal.

  • gx:Tour

  • Los recorridos animados gx:Tour pertenecen a funciones de presentación de Google Earth y no representan una capa vectorial convencional.

  • Recursos externos

  • Algunos estilos utilizan iconos, imágenes o recursos alojados fuera del KMZ. Si esos archivos no están disponibles, puede no ser posible reproducir exactamente la apariencia original.

  • KML dañados

  • La herramienta intenta tolerar algunos problemas comunes de XML y namespaces, pero un archivo severamente dañado puede requerir reparación manual antes de procesarlo.

  • Limitaciones propias de Shapefile

  • Nombres de campos

  • Shapefile utiliza un formato DBF antiguo y tradicionalmente limita los nombres de campos aproximadamente a 10 caracteres.

  • campos-shp.txtTEXT
    DescripcionGeneral  →  DescripGen
    Observaciones       →  Observacio
    Identificador       →  Identifica
  • La herramienta intenta generar nombres compatibles y evitar duplicados.

  • Textos largos

  • Los campos de texto del DBF también tienen limitaciones. Cuando un texto es demasiado extenso puede ser necesario dividirlo en varias columnas para evitar pérdida de información.

  • texto-largo.txtTEXT
    OBSERV_1
    OBSERV_2
    OBSERV_3
  • Por esta razón vuelvo a recomendar conservar siempre el GeoPackage como archivo maestro.

  • Simbología

  • El archivo .shp no almacena directamente la simbología de QGIS. La herramienta genera un .qml y además conserva los componentes de color dentro de los atributos para poder reconstruir posteriormente la representación.

  • Mi recomendación de uso

  • FormatoUso recomendadoMotivo
    KML/KMZFuente originalConservar siempre el archivo recibido o generado originalmente.
    GeoPackageArchivo maestro de trabajoTiene menos limitaciones y conserva mejor la información.
    ShapefileCompatibilidad y entregaÚtil cuando otro sistema exige específicamente SHP.
    QMLSimbología en QGISPermite reconstruir los colores del Shapefile.
  • flujo-recomendado.txtTEXT
    KML / KMZ ORIGINAL
            ↓
    GEOPACKAGE MAESTRO
            ↓
    SHAPEFILE PARA COMPATIBILIDAD
  • Consideraciones finales

  • Esta herramienta surgió a partir de un problema práctico: tener un KMZ que visualmente parecía contener toda la información, pero que al convertirlo de manera convencional perdía atributos, estilos o partes de sus geometrías.

  • El objetivo fue automatizar tareas que de otra manera tendría que realizar manualmente: separar description, crear campos, interpretar MultiGeometry, recuperar estilos y preparar archivos compatibles con QGIS.

    • Evitar crear cada campo manualmente.
    • Recuperar atributos almacenados dentro de HTML.
    • Mantener entidades multipartes.
    • Conservar la información de color.
    • Generar automáticamente GeoPackage y Shapefile.
    • Reducir la necesidad de uniones o reprocesamientos posteriores.
  • No pretende sustituir todas las herramientas de conversión existentes en QGIS, sino servir como una alternativa para KML y KMZ donde una exportación convencional no conserva correctamente toda la información.

  • Descargar herramienta KML/KMZ → SHP Universal
“La idea no fue solamente convertir un archivo, sino conservar la mayor cantidad posible de su estructura, atributos y representación para poder seguir trabajando con él dentro de un SIG.”