Da .shp a .kml a .shp senza perdere attributi


10

Ho convertito un file di forma con attributi in un .kml per un client. Il .kml e gli attributi sono stati quindi modificati all'interno di Google Earth. Ho ricevuto il .kml aggiornato e ora devo riportarlo su .shp. Il problema è: tutti i miei attributi sono ora in formato html, il che rende la finestra informativa popup in google earth. Quando provo a riconvertire in .shp i miei attributi vengono raggruppati in un campo "Descrizione" (creato da Google). E TUTTI i miei attributi e informazioni sono raggruppati in una singola cella. Esiste un modo per estrarre i dati dal campo "Descrizione". Anche se lo faccio, c'è un modo semplice per sbarazzarsi del formato html e renderlo utilizzabile?

Questo è quello che ottengo usando il metodo "Fusion Table" che ho trovato su alcuni forum. Puoi vedere l'html a sinistra, continua oltre quello che mostra.

http://s6.postimg.org/uf7jeuksh/problems.png

Sto usando ArcGIS Desktop 10.2.


Cosa usi per convertire tra i formati? Puoi provare ogr2ogr o QGIS invece?
bugmenot123

Risposte:


3

Ho appena confermato che uno strumento ETL spaziale creato utilizzando l'estensione di interoperabilità dei dati riporterà gli attributi del tuo file KML / KMZ in un file di forma con lo schema intatto. Basta selezionare l' opzione Schema dinamico nella procedura guidata di creazione dello strumento:

Passaggio ETL spaziale


una soluzione sarebbe quella di analizzare il campo della descrizione per i valori dei vari campi degli attributi necessari e copiarli nei campi appropriati. E la prossima volta, fai in modo che il tuo cliente aggiunga attributi in un foglio di calcolo Excel o qualcosa del genere in modo da poterlo semplicemente ricollegare al tuo file di forma per l'aggiornamento.


1
Penso che sia la mia unica soluzione a questo punto. Ma la prossima volta includerò sicuramente un foglio di calcolo Excel!
Katie B.

Hai accesso all'estensione di interoperabilità dei dati per ArcGIS? Non ho esperienza con questo problema, ma potrebbero esserci degli scrittori che possono rimappare i tuoi compagni
Adam

Anche FME di Safe Software (su cui si basa l'interoperabilità dei dati) farà ciò di cui hai bisogno, ma è anche costoso.
Adam,

3

Ho dovuto prima aprire il kml in QGIS e salvarlo come file di forma e ha mantenuto gli attributi. In QGIS, Aggiungi dati vettoriali e in Sfoglia, imposta i file di tipo su "Keyhole Markup Language (KML)" Cerca il KML che desideri importare, quindi fai clic su Apri. Salvare gli oggetti importati da KML in uno Shapefile. Durante l'importazione del file di forma in ArcMap, vedrai tutti gli attributi mantenuti.


2

Questo strumento, Export to KML sviluppato da Kevin Martin, fa il lavoro.

Ci sono alcuni problemi con gli stili, ma almeno i colori e gli attributi sono corretti, ed è un sacco di opzioni per giocare con gli attributi, le etichette, ecc ...


2

Avevo solo bisogno di uno dei campi, che conteneva una stringa di date. Usando arcMap, sono stato in grado di risolverlo usando il calcolatore di campo per estrarlo. Se hai solo bisogno di estrarre un paio di campi, questo potrebbe funzionare per te, anche se un po 'noioso:

I seguenti passaggi ti aiuteranno a creare una linea di VB da utilizzare nel calcolatore di campo per tagliare una sottostringa dal campo della descrizione basato sui tag HTML e sulla legenda dei dati memorizzati nella tabella.

  1. In Google Earth, apri il tuo KML / KMZ, fai clic su una funzione per aprire il popup. Identifica il nome esatto del campo che desideri recuperare. Il mio si chiama "DATE"
  2. In ArcMap, apri la tabella degli attributi del layer che hai creato durante l'importazione di KML / KMZ.
  3. Identificare il campo della descrizione. Nei miei dati si chiama "PopupInfo"
  4. Nel primo record, fai clic con il pulsante destro del mouse sulla cella "PopupInfo" e fai clic su "copia"
  5. Apri Blocco note e incolla il contenuto della cella. Ora vedrai l'HTML per il pop-up.
  6. Usa ctrl-F per trovare il nome del campo da KML / KMZ (nel mio caso, "DATA"). Ecco uno screenshot che mostra solo la linea dell'HTML che mi interessa. inserisci qui la descrizione dell'immagine
  7. Contare il numero di caratteri, inclusi gli spazi dall'inizio del nome del campo fino all'inizio dei dati. Nel mio caso ci sono 15 caratteri.
  8. Determina quanti caratteri vuoi estrarre. Per la mia sottostringa, ho bisogno di 19. Ad esempio, se hai solo bisogno di codici di stato come AZ e WY, potresti aver bisogno solo di 2. Se i tuoi dati non hanno voci di lunghezza coerenti in questo campo, sbaglia sul lato del più lungo. Modifica: è possibile rimuovere i caratteri aggiuntivi in ​​un secondo momento manualmente o utilizzando le funzioni VB instr () e rtrim (). Pubblica o inviami un messaggio se hai bisogno di aiuto.
  9. In arcMap, aggiungi un nuovo campo TEXT al tuo livello e assicurati di assegnargli almeno tutti i caratteri necessari per i tuoi dati. L'impostazione predefinita è 50.

  10. Quindi, apri il calcolatore di campo per il tuo nuovo campo. L'inizio dei dati viene rilevato utilizzando la funzione InStr () e i dati vengono estratti utilizzando la funzione Mid (). Digita il seguente comando VB:

    Mid([PopupInfo],InStr([PopupInfo],"DATE")+15,19)

Naturalmente, scambia i miei nomi di campo per i tuoi (dai passaggi 3 e 6) e modifica la lunghezza dei numeri 15 e 19 in base alla lunghezza delle sottostringhe (che si trovano nei passaggi 7 e 8).

Nella riga VB sopra:

  • [PopupInfo] è il nome del campo fastidioso che contiene l'HTML per il pop-up KML.
  • "DATE" è il nome del campo KML e il tag HTML che contiene i dati che voglio estrarre.
  • 15 è il numero di caratteri dall'inizio del tag della data all'inizio dei dati della data effettiva.
  • 19 è il numero di caratteri nella stringa della data che vogliamo conservare.

1

Ecco una guida che ho scoperto che ti guida attraverso alcuni passaggi utilizzando ArcMap, Google Drive Fusion Tables e MS Excel per convertire i file KML in file .shp preservando gli attributi.

Link al sito che ha la guida .


Sì, ma questo non risolve il mio problema. I miei attributi vengono comunque raggruppati nel campo "Descrizione" nel formato html. Lo strumento KML to Layer non funziona per la mia situazione. Ho anche provato altri script.
Katie B.

Vedi la mia risposta modificata.
Cameron Sloan,

Ancora una volta, l'immagine che ho collegato nella mia domanda originale è il mio risultato quando si utilizza il metodo della tabella di fusione. Non funziona per la mia situazione.
Katie B.,

L'hai portato in Excel?
Cameron Sloan,

Sì, stesso problema. Ho appena trovato un altro sito del forum in cui qualcun altro ha lo stesso problema. Sembra che dovrò passare attraverso le 1000 righe di script ed eliminare il codice o provare a fare un "trova e sostituisci" Apprezzo il tuo aiuto.
Katie B.,

1

Sono stato in grado di farlo funzionare usando cursori ed elenchi per dividere il campo xml PopupInfo in valori utili

  1. utilizzare il KML arcpy per sovrapporre lo strumento e gli strumenti di progetto per accedere al sistema di coordinate desiderato (ho riscontrato problemi durante l'aggiunta di campi all'output di conversione originale, che potrebbe essere dovuto al file di livello associato ad esso)

  2. Utilizzare .da.SearchCursor per ottenere la stringa PopupInfo dalla prima riga. Quindi suddividilo in un elenco basato su '<', elimina i primi due valori (il campo etichetta da Google Earth) e inserisci i valori rimanenti che hanno il tag 'td>' ma non il tag di chiusura 'td>' in un nuovo elenco di nomi di campo (indici pari) e valori di campo (indici dispari)

  3. Scorri l'elenco dei nomi dei campi con arcpy.AddField_management per aggiungere tutti i campi (salta se esistono già)

  4. Usa .da.UpdateCursor per ottenere PopupInfo per tutte le righe, quindi dividi e crea nuovi elenchi proprio come con il cursore di ricerca

  5. questa volta, usa tutti i valori di indice dispari per aggiornare le righe (se i% 2 <> 0: row [(i-1) / 2] = list [i]) e cursore.updateRow (riga)



0

AGGIORNAMENTO: se ti imbatti in questo thread con lo stesso problema, c'è uno strumento là fuori per te! Dai un'occhiata a https://mygeodata.cloud/

Funziona davvero bene. Sono stato in grado di caricare il mio KML e lo shapefile esportato aveva correttamente tutti i miei attributi nei propri campi. L'unico aspetto negativo è che esiste un numero limitato di conversioni "gratuite".


-3

Non esiste ancora una soluzione semplice a questo problema di conversione. È stato chiesto qui più volte negli ultimi anni:

kml-in-qgis-con-addizionale-dati

preservando-attributi-durante-kml2shp-conversione-in-arcgis-per-desktop

convert-kml-to-shapefile-senza-perdere-attribute-dati

spiegazione di esri per il loro strumento di conversione KmltoLayer:

"Come" proprietario "dello strumento KML in Esri posso dire: gli elementi ExtendedData all'interno di un KML non si traducono in attributi di campo quando si utilizza lo strumento da KML a Layer con ArcGIS in qualsiasi versione (9.3-10.3). Ciò include ArcMap su Windows o ArcGIS Server su Linux. Esiste una richiesta di miglioramento per supportare ciò che stiamo prendendo in considerazione per una versione futura. "


2
Ehi, offendo personalmente la tua risposta. Se hai intenzione di copiare e incollare i miei commenti e metterli tra virgolette, la certezza NON aggiungere il tuo commento personale sull'acquisto di un'estensione.
KHibma,

@sirgeo esiste sicuramente una soluzione a questo problema, nell'estensione di interoperabilità dei dati. Sembra che questa non sia una soluzione che ti piace.
Adam,
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.