Come posso convertire un file Excel con colonne x, y in un file di forma?


26

Come posso convertire un file Excel con colonne x, y in un file shapefile?

Esistono alcuni requisiti in qualche modo opzionali oltre alla corretta creazione di uno shapefile:

  1. I tipi di colonna (secondo gli identificatori di formato di Excel) devono essere mantenuti (in particolare i tipi di data)
  2. I nomi delle colonne dovrebbero essere presi dall'intestazione
  3. Mi piacerebbe fare questo dalla riga di comando
  4. Se posso includere riferimenti spaziali eterogenei per i punti in una terza colonna, sarei molto felice :)

Risposte:


24

Consiglio di utilizzare OGR / GDAL , che fa parte di libreria GDAL . OGR supporta un formato virtuale che consente la specifica tramite un file XML. Se converti il ​​tuo foglio di lavoro Excel in un CSV, puoi generare un VRT per accedere ai dati.

Supponendo che tu abbia qualcosa del genere example.csv :

Lat,Long,Year,Name
34.0,-120.0,2010-05-01,Off Santa Rosa Island

Puoi creare un VRT example.vrt come segue:

<OGRVRTDataSource>
    <OGRVRTLayer name="example">
        <SrcDataSource>example.csv</SrcDataSource>
        <GeometryType>wkbPoint</GeometryType>
        <LayerSRS>WGS84</LayerSRS>
        <GeometryField encoding="PointFromColumns" x="Long" y="Lat"/>
    </OGRVRTLayer>
</OGRVRTDataSource>

A partire da GDAL 1.7, è possibile specificare ulteriormente i tipi di dati dei campi degli attributi usando il <Field> elemento all'interno di <OGRVRTLayer>, in questo modo:

    <Field name="date" src="Year" type="Date" />

Tenere presente che gli shapefile memorizzano gli attributi nel DBASE IV formato che ha meno flessibilità nei tipi di dati rispetto a Excel. Dopo aver specificato il tuo file VRT, puoi utilizzare la normale toolchain OGR per convertire i dati in uno Shapefile:

ogr2ogr -f "ESRI Shapefile" example.shp example.vrt

Sfortunatamente, il numero 4 non è possibile: la specifica dello shapefile consente una singola proiezione (visualizzabile qui example.prjdopo l'ultimo passaggio).


L'unico lato negativo di questo è che devo capire i tipi di dati delle colonne a livello di codice per poter scrivere il <Field>tag. Immagino che lo scoprirò da solo :)
segna il

Destra. Se desideri una soluzione automatizzata e hai accesso ad ArcGIS, puoi farlo con lo strumento Aggiungi coordinate XY tinyurl.com/38jm55k , che dovrebbe fare questo passo per te.
scw,

Un'importante considerazione sta nel portare il tuo file Excel in un formato adatto per lo shapefile ESRI prima - ci sono limitazioni sui nomi delle colonne, la lunghezza dei nomi e se stai usando lo strumento Aggiungi XY il modo in cui ESRI automatizza il tipo di campo che potrebbe causare problemi. webhelp.esri.com/arcgisdesktop/9.2/…
spg

3
Servizio online per aiutare a costruire un file vrt correttamente formattato: vrtbuilder.appspot.com
matt wilkie

9

È possibile utilizzare il plug-in Delimited Text fornito con QGIS (http://qgis.org ) per caricare il file di testo e quindi salvarlo come file di forma.


Sono spesso afflitto da errori del parser usando questo strumento. Qualche consiglio?
fmark

1
Hai esempi specifici?
gsherman,

@fmark - Ottengo anche questi errori, e di solito è dovuto al fatto che MS Excel gestisce il CSV
dassouki,

6

Anche se non dalla riga di comando, è possibile farlo nell'app ArcGIS. Da 9.3.1, basta aggiungere XLS direttamente in ArcMap. Crea uno XY Event Layer da XLS (es. Scegli le X, Y Columns e imposta il tuo riferimento spaziale) Quindi esporta questo XY Event Layer in un nuovo .shp Questo potrebbe essere facilmente automatizzato con un semplice script Python / VBA o un modello in modelbuilder . Felice di aiutarti su questo flusso di lavoro di base se hai bisogno di maggiori informazioni.


1
Se usi Python, puoi eseguire uno strumento di geoprocessing dalla riga di comando.
jswise,

6

Ho cercato ma non sono riuscito a trovare una pagina di aiuto su Visualizza dati XY nella guida in linea, ma il processo è semplice.

  1. Usa Aggiungi dati (o trascina e rilascia dalla finestra del Catalogo) per cercare il tuo foglio di lavoro (all'interno del foglio di calcolo) e aggiungerlo alla tua mappa
  2. Fare clic con il tasto destro del mouse per scegliere e utilizzare Visualizza dati XY per aggiungere un livello evento
  3. Fare clic con il pulsante destro del mouse sul livello evento appena creato e utilizzare Dati | Esporta dati per creare un file di forma

Per fare ciò è necessario solo il livello di licenza ArcView (Basic) di ArcGIS (per) Desktop.


Devo fare qualcosa con le colonne superiori che non fanno parte dei dati?
Zoran,

Quali due colonne non fanno parte dei tuoi dati? La procedura che ho descritto dovrebbe usare qualunque colonna long / lat scelta per generare le geometrie dei punti e, quindi, penso, memorizzare il resto come attributi di esse. La cosa migliore è provarlo e se il risultato non è come previsto, allora descrivi il tuo osservato rispetto al previsto.
PolyGeo

Penso di aver letto male la cima per due - e presumo che tu intenda la prima fila (di titoli). Dovrebbero semplicemente diventare nomi di campo dopo Aggiungi dati.
PolyGeo

Non sono sicuro se questo è ancora il caso, ma gli spazi nei nomi delle intestazioni nel file Excel erano un vero mal di testa per Aggiungi XY.
Chad Cooper,

1
Il caricamento di file Excel direttamente in ArcGIS funziona meravigliosamente bene, tranne quando non lo è! Cose da guardare: date alterate, numeri troncati. Il primo passaggio per la risoluzione dei problemi è sempre quello di esportare in CSV con tutte le colonne definite come testo e caricarle, invece di vedere che il problema persiste. A parte questo avvertimento. Visualizza come X / Y funziona molto bene.
matt wilkie,

4

C'è sempre l'opzione avventurosa. Puoi scrivere tu stesso il file di forma. ESRI pubblica le specifiche per gli shapefile, che puoi leggere qui:

http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf

Probabilmente dovrai anche scrivere un file DBF. Puoi leggere il formato qui:

http://www.clicketyclick.dk/databases/xbase/format/dbf.html#DBF_STRUCT

Questo è senza dubbio eccessivo, ma ti darebbe il vantaggio di avere il controllo su tutto il processo.


In realtà sto tendendo in quel modo - userò OGR invece di scrivere direttamente lo shapefile!
fmark

2
Probabilmente Excel può scrivere direttamente il DBF, anche se ho avuto vari livelli di successo usando quei DBF come componente DBF di uno shapefile.
mwalker,

Excel non scrive i file dbf.
user30184,

3

Personalmente preferisco usare FME da Safe Software (http://www.safe.com), che non solo mi consente di tracciare punti da valori XY, ma mi offre la flessibilità di trasformare le coordinate da una proiezione all'altra prima di tracciare, specifica il tipo di delimitatore, riga iniziale (nel caso in cui il file di testo abbia informazioni di intestazione), allegare gli attributi nel caso in cui il file di testo abbia X, Y, informazioni sugli attributi per i dati punto. Nel caso in cui desideri visualizzare questi dati in Google Earth, puoi scriverli in formato KML specificando anche lo stile del punto KML. ~ SRG


2

Se si desidera eseguire qualche altra elaborazione sui dati x, y, è possibile caricare i dati in postgres, utilizzare geomfromtext con concatenazione per creare un tipo di dati della geometria e quindi utilizzare pgsql2shp per esportare in forma. Questo approccio ti consentirà anche di conservare i dati eterogenei del sistema di riferimento spaziale in un'altra colonna, che potrai quindi utilizzare per convertire tutti i tuoi punti in un sistema di riferimento comune all'interno del db prima di esportarli in forma. Mi rendo conto che ciò comporta più passaggi di ogr / gdal ma ti darà molta più flessibilità.


Ho usato questo approccio in passato ed è buono. Penso che il mio costante ostacolo stia rilevando i tipi di dati Excel in modo affidabile ....
fmark

1
Suppongo che potresti scrivere qualcosa in Excel VBA per riorganizzare prima le tue colonne in modo che la data, x, y siano sempre state le prime 3 colonne. Senza una sorta di convenzioni di denominazione delle colonne, penso che sarebbe difficile automatizzare completamente ciò che hai in mente, però.
John Powell,

1

Che ne dici di caricare i tuoi file CSV in spatiallite e quindi usare OGR o QGIS per esportare in un file di forma.

http://www.gaia-gis.it/spatialite-2.2/index.html

Puoi persino esportare direttamente dalla spatialite in uno shapefile.

http://www.gaia-gis.it/spatialite-2.2/spatialite-2.2_tutorial.html#t3.1


Spatialite può importare direttamente i file Excel se sono nel vecchio formato .xls (Excel 97-2003). Le coordinate X e Y devono essere convertite in geometrie inte con SQL dopo l'importazione iniziale.
user30184,

Se non ti dispiace usare Java, potresti usare il progetto POI per strappare i file Excel e quindi usare GeoTools per scrivere il nuovo shapefile
TheSteve0

0

Per una trasformazione più basilare è possibile utilizzare il trasformatore 2Dpointreplacer in FME 2013. È necessario indicare in quali colonne si trovano i valori X e Y e quindi FME trasformerà questi valori in ad esempio un file di forma con punti.
Nomi e tipi di colonne possono essere impostati come richiesto

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.