Convertire KML in shapefile senza perdere gli attributi usando QGIS?


29

Ho un file KML con centinaia di punti. Ad ogni punto ci sono informazioni, come Nome, Potenza, Età (è una mappa di centrali idroelettriche). Se importare quel file KML in QGIS, questa informazione viene persa.

C'è un modo per conservare queste informazioni?

Le informazioni si presentano così:

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

C'è qualcosa di sbagliato nel mio codice?


1
Come stai importando .kmlin QGIS? Questo formato è supportato come uno dei formati di base, quindi dovrebbe essere un processo relativamente indolore per aggiungere un kmlfile come livello. Se fornisci maggiori dettagli, qualcuno potrebbe essere in grado di aiutarti a capire cosa non va. Anche le informazioni sulla fonte del file possono essere utili.
Ottieni Spatial

1
hai un link live al kml?
Mapperz

Penso che sarebbe possibile via FME, o se ti senti un po 'avventuroso, potresti scrivere uno script Python che analizzerebbe il kml (xml!) Ed esporterebbe in shapefile. (librerie da usare: libreria Python Shapefile, qualsiasi XML da Python)
U2ros,

2
RK sì, l'ho visto. Tuttavia, ho deciso di porre una nuova domanda con una migliore descrizione del problema perché non esiste una soluzione soddisfacente. Anche dopo un altro giro di prova, il problema può essere che i file KML delle zone umide non sono KML validi quando testati nel validatore KML online e presentano molti errori ...
Miro,

1
U2ros Ho provato FME online senza successo. Forse il desktop FME, posso provarlo nel prossimo "round di installazione" ... Sicuramente non mi sento abbastanza avventuroso da programmare lo script che convertirà kml in shp :-). Ma nel peggiore dei casi posso immaginare di scrivere uno script che passerà attraverso KML, trovare "ExtendedData" per ogni funzione e creare una tabella / csv a cui posso unire tramite "nome" per convertire KML in QGIS / ArcGIS / Mapinfo ...
Miro

Risposte:


15

ExtendedData non ha valori "nome" corretti.

Per esempio

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

non è importato da GDAL e Qgis Master, mentre

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

viene importato.

Puoi cambiarlo con un buon editor di testo.

------------------- Aggiunto da Miro ---------------------

Per la modifica di KML è necessario utilizzare l'editor di testo che consente "Espressione regolare" nella funzione Sostituisci come PSPad (o Notepad ++ e molti altri editor di testo gratuiti)

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

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

Dopodiché basta usare QGIS (la chiave è la "nuova" versione - inclusa la versione GDAL 1.9.2 in poi) e "Aggiungi layer vettoriale" e il layer verrà caricato con tutti "ExtendedData".


Grazie, questa era l'informazione CHIAVE. Ho provato a sostituirlo in un file di test e ha funzionato perfettamente. Tutti "ExtendedData" sono ora nella tabella come colonne. Ancora grazie mille.
Miro,

3
In realtà, DisplayName non è utilizzato da Qgis. Quindi la sostituzione può essere effettuata senza RegExp sostituendo <Dati> <DisplayName> con <Data name = "e sostituendo </DisplayName> con">.
AndreJ,

1
Il mio file KML conteneva anche un tag <SchemaData> che dovevo commentare per aprirlo in QGIS. Ma per il resto il trucco ha funzionato perfettamente!
Djana,

8

Ho convertito uno dei file wetlandfile con globalmapper in forma: racchiuso due schermate da file dbf convertiti (aree e linee): inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

spero che questo sia quello che vuoi ..


Grazie, sì, è esattamente quello di cui ho bisogno. Buono a sapersi che esiste un software in grado di gestire questi KML che non sono conformi allo standard KML. Perché c'è già un'altra risposta su come farlo con QGIS gratuito non ho intenzione di provare Global Mapper, ma può sicuramente aiutare qualcun altro. Grazie ancora.
Miro,

Davvero un convertitore fantastico, fantastico !!
SIslam,

6

Puoi utilizzare il software Global Mapper in cui puoi facilmente esportare / importare file kml / kmz + allegare dati e molti formati vettoriali e raster ... È uno dei migliori software ..

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


Grazie per il suggerimento. Credo che possa importare / esportare file kml / kmz ma ho già provato 5+ app che possono farlo. E nessuno di loro è in grado di leggere gli attributi ("ExtendedData"). Quindi, in realtà, Global Mapper può farlo?
Miro,

5

Sembra che libkml di Google non non fornito con GDAL 1.9.2 su Ubuntu, in particolare GDAL-bin 1.9.2-2 ~ precise4:

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

Per far funzionare una versione con libkml e ExtendedDatasupporto, ho dovuto costruire GDAL da svn trunk (r25473) dopo aver creato libkml da svn trunk (r864), notando specificamente che la versione 1.2.0 non è apparentemente sufficiente, come documentato sul sito GDAL . Attenzione che l'installazione libkml0su Ubuntu precise (attualmente 1.2.0-1ubuntu6) non sarà di aiuto. Hai davvero bisogno del trunk 1.3 o svn, per il quale non sono stato in grado di trovare un PPA.

Alla fine non sono stato nemmeno in grado di creare libkml su Ubuntu preciso; ci sono errori di tipo nella versione di boost fornita con esso e ci sono errori che eseguono libtool poiché le dipendenze sono fuori servizio. Per qualsiasi motivo, questi non erano un problema con Debian Squeeze, dove ho avuto successo:

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

Una volta che l'ho fatto, correre ogr2ogr -f "ESRI Shapefile" foo.shp foo.kmlmi ha dato uno shapefile che qgis è stato in grado di importare, preservandone gli ExtendedDataattributi.


5

Il driver kml Ogr2ogr utilizzato da Qgis 1.8.0 Lisboa non supporta i tag kml ExtendedData.

Il driver LIBKML lo fa, è incorporato nella versione GD.2 1.9.2 in poi, nei pacchetti OSGEO4W, MS4W e Qgis Master.

I tuoi dati non sono sbagliati, ma il driver LIBKML in OSGeo4W ha avuto alcuni problemi con SchemaData. In alternativa, i seguenti lavori:

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

EDIT: il bug SchemaData ora è stato corretto nel pacchetto GDAL 1.9.2-2 di OSGEO4W.


4

Utilizzo di FME 2012 (SP4)

Carica il Reader KML

Seleziona uno scrittore (Shapefile)

collega gli elementi e seleziona in scrittura ( copia gli attributi dai tipi di funzione )

Esegui l'area di lavoro

inserisci qui la descrizione dell'immagine


Grazie, ho scaricato fme_install.msi ma si è verificato un errore nell'installazione e poiché esiste già una soluzione di lavoro diversa a questa domanda, non continuerò in questo modo. Comunque grazie ancora.
Miro,


1

Non so che puoi raggiungerlo con QGIS. MapWindow ha però un plugin KML2Shapefile .

KML2Shapefile è un plug-in per MapWindow GIS che converte i file KML e KMZ di Google Earth in file di forma da utilizzare in un GIS.

KML2Shapefile suddividerà ogni tipo di geometria KML in un file shape separato. Supporta geometrie complesse ed è in grado di presentare gran parte del KML come dati di attributo.

MapWindow è anche un pacchetto GIS gratuito e open source. Puoi scaricarlo e installarlo gratuitamente. Puoi convertire il file KML in shapefile utilizzando il plug-in KML2Shapefile in MapWindow e caricare il file della forma risultante in QGIS. Supponendo che tu sia su Windows comunque.

La migliore soluzione che mi viene in mente per ora. Spero che qualcuno sappia di un plugin per farlo in QGIS.


1
Grazie per l'aiuto. L'ho provato, ma i dati sono ancora persi. Le informazioni sono simili alle seguenti: <ExtendedData> <SchemaData schemaUrl = "# vorlage"> <SimpleData name = "Name"> Test </SimpleData> <SimpleData name = "Power"> 10895 </SimpleData> <SimpleData name = "Location"> L </SimpleData> </SchemaData> </ExtendedData> c'è qualcosa di sbagliato nel mio codice?
Felix,

Oh, scusa per quello. Speravo che avrebbe funzionato.
RK,

1
@Felix - Le informazioni che hai fornito nel tuo commento sono davvero utili. Consiglierei di modificare la tua domanda e di aggiungerla per ulteriore contesto e chiarezza.
Ottieni Spatial il

@AndreJoost - Sembra che tu abbia trovato una buona risposta. Vale la pena aggiungerlo come risposta effettiva in modo che venga visualizzato nei risultati di ricerca di chiunque abbia lo stesso problema.
Ottieni Spatial il

1

Ottieni Global Mapper, tutto ciò che devi fare è inserire KMZ o KML, quindi esportare Vector IMG (ESRI SHP File). Il mapper globale può leggere la maggior parte dei tipi di file. Quindi aprire la forma in ARC, Global mapper, Manifold, QGIS, ect e visualizzare la tabella degli attributi. Tutte le informazioni saranno lì. puoi anche aprire il file DBF dallo SHP con Microsoft Excel a questo punto e quindi salvare l'estensione del file XLXS se lo desideri.


1

In QGIS 3.2.0 è possibile eseguire facilmente la conversione utilizzando la Casella degli strumenti.

Selezionare in Casella degli strumenti -> GDAL -> Conversione vettoriale -> Converti formato .... (Caja de Herramientas de Procesos -> GDAL -> Conversion Vectorial -> Convertir Formato)

Seleziona il file KML, salva come file SHP. Ho anche dovuto cambiare il file resulkting ("Converted") in Properties -> Source (Tab) -> Source Coding da "UTF-8" a "Windows-1258" per vedere correttamente i caratteri spagnoli.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.