¿Convertir KML a shapefile sin perder atributos usando QGIS?


29

Tengo un archivo KML con cientos de puntos. Para cada punto hay información, como Nombre, Potencia, Edad (es un mapa de centrales hidroenergéticas). Si importo ese archivo KML a QGIS, esta información se pierde.

¿Hay alguna manera de mantener esta información?

La información se ve así:

<ExtendedData>
 <SchemaData schemaUrl="#vorlage">
  <SimpleData name="Name">Test</SimpleData>
  <SimpleData name="Power">10895</SimpleData>
  <SimpleData name="Location">L</SimpleData>
 </SchemaData>
</ExtendedData>

¿Hay algún problema con mi código?


1
¿Cómo está importando .kmla QGIS? Este formato es compatible como uno de los formatos básicos, por lo que debería ser un proceso relativamente sencillo agregar un kmlarchivo como capa. Si proporciona más detalles, alguien puede ayudarlo a descubrir qué está sucediendo mal. También puede ser útil la información sobre la fuente del archivo.
Obtener espacial

1
¿tienes un enlace en vivo al kml?
Mapperz

Creo que sería posible a través de FME, o si te sientes un poco aventurero, podrías escribir un script de Python que analizaría el kml (xml!) Y lo exportaría a shapefile. (bibliotecas para usar: biblioteca de archivos de forma de python, cualquier XML de python)
U2ros

2
RK sí, he visto ese. Aunque decidí hacer una nueva pregunta con una mejor descripción del problema porque no hay una solución satisfactoria. También después de otro círculo de tratar el problema puede ser que los humedales archivos KML KML no son válidos cuando se prueba de validación KML en línea y vienen con muchos errores ...
Miro

1
U2ros He intentado FME en línea sin éxito. Tal vez el escritorio FME, puedo probarlo en la próxima "ronda de instalación" ... Definitivamente no me siento lo suficientemente aventurero como para programar el script que convertirá kml a shp :-). Pero en el peor de los casos, me imagino escribiendo un script que pasará por KML, encuentre "ExtendedData" para cada entidad y cree una tabla / csv que pueda unir a través de "nombre" para convertir KML en QGIS / ArcGIS / Mapinfo ...
Miro

Respuestas:


15

ExtendedData no tiene valores correctos de "nombre".

Por ejemplo

<Data><displayName>System</displayName><value>Riverine</value></Data>

GDAL y Qgis Master no importan, mientras que

<Data name="System"><displayName>System</displayName><value>Riverine</value></Data>

se importa

Puede cambiar eso con un buen editor de texto.

------------------- Agregado por Miro ---------------------

Para la edición KML es necesario usar un editor de texto que permita la "Expresión regular" en la función Reemplazar como PSPad (o Notepad ++ y muchos otros editores de texto libre)

Encontrar: <Data><displayName>(.*)</displayName>

Reemplazar: <Data name="$1"><displayName>$1</displayName>

Después de esto simplemente use QGIS (la clave es la versión "nueva" - incluida la versión 1.9.2 de GDAL en adelante) y "Agregar capa vectorial" y la capa se cargará con todos los "Datos extendidos".


Gracias, esa fue la información CLAVE. Traté de reemplazarlo en un archivo de prueba y funcionó perfectamente. Todos los "ExtendedData" ahora están en la tabla como columnas. Nuevamente muchas gracias.
Miró

3
En realidad, Qgis no usa DisplayName. Por lo tanto, se puede reemplazar sin RegExp reemplazando <Data> <DisplayName> con <Data name = "y reemplazando </DisplayName> con">.
AndreJ

1
Mi archivo KML también contenía una etiqueta <SchemaData> que tuve que comentar para abrirlo en QGIS. Pero por lo demás, el truco funcionó a la perfección.
Djana

8

Convertí uno de los humedales con globalmapper para dar forma: adjunto dos capturas de pantalla de archivos dbf convertidos (áreas y líneas): ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

con suerte esto es lo que quieres ...


Gracias, sí, eso es exactamente lo que necesito. Es bueno saber que hay software que puede manejar estos KML que no cumplen con el estándar KML. Como ya hay otra respuesta sobre cómo hacerlo con QGIS gratis, no voy a probar Global Mapper, pero definitivamente puede ayudar a alguien más. Gracias de nuevo.
Miró

Realmente un convertidor fantástico, genial !!
SIslam

6

Puede usar el software Global Mapper en el que puede exportar / importar fácilmente archivos kml / kmz + adjuntar datos y muchos formatos vectoriales y ráster ... Es uno de los mejores programas ...

http://www.bluemarblegeo.com/global-mapper/product/formats.php


Gracias por la propina. Creo que puede importar / exportar archivos kml / kmz, pero ya he probado más de 5 aplicaciones que pueden hacerlo. Y ninguno de ellos puede leer atributos ("ExtendedData"). Entonces, ¿puede Global Mapper hacer eso?
Miró

5

Parece que libkml de Google no se incluye con GDAL 1.9.2 en Ubuntu, específicamente gdal-bin 1.9.2-2 ~ precisa4:

$ ogrinfo --formats | grep -i kml
  -> "KML" (read/write)

Para obtener una versión que funcione con libkml y ExtendedDatasoporte, tuve que construir GDAL desde svn trunk (r25473) después de construir libkml desde svn trunk (r864), señalando específicamente que la versión 1.2.0 aparentemente no es suficiente, como se documenta en el sitio web de GDAL . Tenga en cuenta que la instalación libkml0en Ubuntu preciso (actualmente 1.2.0-1ubuntu6) no ayudará. Realmente necesitas 1.3 o svn trunk, para lo cual no pude encontrar un PPA.

Finalmente no pude incluso construir libkml en Ubuntu precisa; hay errores de tipo en la versión de boost que viene con él, y hay errores al ejecutar libtool ya que las dependencias están fuera de servicio. Por alguna razón, estos no fueron un problema en la compresión de Debian, donde tuve éxito:

$ ogrinfo --formats | grep -i kml
  -> "LIBKML" (read/write)
  -> "KML" (read/write)

Una vez que lo puse en marcha, correr ogr2ogr -f "ESRI Shapefile" foo.shp foo.kmlme dio un archivo de forma que qgis pudo importar, preservando los ExtendedDataatributos.


5

El controlador Ogr2ogr kml utilizado por Qgis 1.8.0 Lisboa no admite etiquetas kml ExtendedData.

El controlador LIBKML lo hace, está incorporado en GDAL Versión 1.9.2 en adelante, paquetes OSGEO4W, MS4W y Qgis Master.

Sus datos no son incorrectos, pero el controlador LIBKML en OSGeo4W tuvo algunos problemas con SchemaData. Alternativamente, lo siguiente funciona:

<ExtendedData>
 <Data name="Name"><value>Test</value></Data> 
 <Data name="Power"><value>10895</value></Data>
 <Data name="Location"><value>L</value></Data> 
</ExtendedData>

EDITAR: El error SchemaData ahora está corregido en el paquete GDAL 1.9.2-2 de OSGEO4W.


4

Usando FME 2012 (SP4)

Cargue el lector KML

Seleccione un escritor (Shapefile)

conectar los elementos y en la selección de escritura ( copiar atributos de los tipos de características )

Ejecute el espacio de trabajo

ingrese la descripción de la imagen aquí


Gracias, he descargado fme_install.msi pero hay un error en la instalación y debido a que ya hay una solución de trabajo diferente para esta pregunta, no voy a continuar de esta manera. De todos modos, gracias de nuevo.
Miró


1

No sé si puedes lograr eso con QGIS. Sin embargo, MapWindow tiene un complemento KML2Shapefile .

KML2Shapefile es un complemento para MapWindow GIS que convierte los archivos KML y KMZ de Google Earth en archivos shape para su uso en un SIG.

KML2Shapefile dividirá cada tipo de geometría KML en un archivo de forma separado. Admite geometrías complejas y puede presentar gran parte del KML como datos de atributo.

MapWindow es un paquete SIG gratuito y de código abierto, por cierto. Puede descargarlo e instalarlo de forma gratuita. Puede convertir el archivo KML a shapefile utilizando el complemento KML2Shapefile en MapWindow y simplemente cargar el archivo de forma resultante en QGIS. Asumiendo que estás en Windows de todos modos.

La mejor solución que se me ocurre por ahora. Sin embargo, espero que alguien sepa de un complemento para hacerlo en QGIS.


1
Gracias por tu ayuda. Lo intenté, pero aún así se pierden los datos. La información se ve así: <ExtendedData> <SchemaData schemaUrl = "# vorlage"> <SimpleData name = "Name"> Test </SimpleData> <SimpleData name = "Power"> 10895 </SimpleData> <SimpleData name = "Location"> L </SimpleData> </SchemaData> </ExtendedData> ¿hay algún problema con mi código?
Felix

Oh, perdon por eso. Esperaba que funcionara.
RK

1
@Felix: la información que proporcionó en su comentario es realmente útil. Recomendaría editar su pregunta y agregarla allí para obtener contexto y claridad adicionales.
Obtener espacial

@AndreJoost - Parece que se te ocurrió una buena respuesta. Valdría la pena agregarlo como una respuesta real para que aparezca en los resultados de búsqueda de cualquier otra persona con el mismo problema.
Obtenga espacial

1

Obtenga Global Mapper, todo lo que tiene que hacer es traer KMZ o KML y luego exportar Vector IMG (archivo ESRI SHP). El mapeador global puede leer la mayoría de los tipos de archivos. Luego abra la forma en ARC, Global mapper, Manifold, QGIS, ect y vea la tabla de atributos. Toda la información estará allí. También puede abrir el archivo DBF desde el SHP con Microsoft Excel en este punto y luego guardarlo como extensión de archivo XLXS si así lo desea.


1

En QGIS 3.2.0, la conversión se puede hacer fácilmente usando Toolbox.

Seleccione en Caja de herramientas -> GDAL -> Conversión de vectores -> Convertir formato .... (Caja de Herramientas de Procesos -> GDAL -> Conversión vectorial -> Convertir formato)

Seleccione el archivo KML, guárdelo como archivo SHP. También tuve que cambiar el archivo resultante ("Convertido") en Propiedades -> Fuente (pestaña) -> Codificación de fuente de "UTF-8" a "Windows-1258" para ver correctamente los caracteres españoles.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.