Wie kann ich eine Excel-Datei mit XY-Spalten in ein Shapefile konvertieren?

26

Wie kann ich eine Excel-Datei mit XY-Spalten in ein Punkt-Shapefile konvertieren?

Zusätzlich zur korrekten Erstellung eines Shapefiles gibt es einige optionale Anforderungen:

  1. Spaltentypen (gemäß den Formatangaben in Excel) sollten beibehalten werden (insbesondere Datumstypen)
  2. Spaltennamen sollten aus der Kopfzeile entnommen werden
  3. Ich würde gerne diese von der Kommandozeile tun
  4. Wenn ich heterogene Raumbezüge für die Punkte in eine dritte Spalte aufnehmen kann, würde ich mich sehr freuen :)
fmark
quelle
werfen Sie einen Blick auf diese gis.stackexchange.com/questions/86369/…
AndroidNijx

Antworten:

24

Ich würde empfehlen, OGR / GDAL zu verwenden , das Teil der GDAL- Bibliothek ist. OGR unterstützt ein virtuelles Format, das die Spezifikation über eine XML-Datei ermöglicht. Wenn Sie Ihr Excel-Arbeitsblatt in eine CSV-Datei konvertieren, können Sie eine VRT generieren, um auf die Daten zuzugreifen.

Vorausgesetzt, Sie haben so etwas example.csv:

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

Sie können eine VRT example.vrtwie folgt erstellen :

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

Ab GDAL 1.7 können Sie zusätzlich die Datentypen von Attributfeldern mithilfe des <Field>Elements in <OGRVRTLayer>wie folgt angeben :

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

Beachten Sie, dass Shapefiles Attribute im DBASE IV- Format speichern, das in Bezug auf Datentypen weniger flexibel ist als Excel. Sobald Sie Ihre VRT-Datei angegeben haben, können Sie die Daten mit der normalen OGR-Toolchain in ein Shapefile konvertieren:

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

Leider ist # 4 nicht möglich - die Shapefile-Spezifikation ermöglicht eine einzelne Projektion (hier example.prjnach dem letzten Schritt sichtbar ).

scw
quelle
Der einzige Nachteil dabei ist, dass ich die Datentypen der Spalten programmgesteuert ermitteln muss, um das <Field>Tag zu schreiben . Ich denke, ich werde das selbst herausfinden :)
fmark
Recht. Wenn Sie eine automatisierte Lösung wünschen und Zugriff auf ArcGIS haben, können Sie dies stattdessen mit dem Tool "XY-Koordinaten hinzufügen" (tinyurl.com/38jm55k) tun, das diesen Schritt für Sie ausführen sollte.
Scw
Eine wichtige Überlegung ist, Ihre Excel-Datei zuerst in ein für ESRI-Shapefile geeignetes Format zu bringen. Es gibt Einschränkungen hinsichtlich der Spaltennamen, der Länge der Namen und der Art und Weise, wie ESRI den verursachenden Feldtyp automatisiert, wenn Sie das Werkzeug XY hinzufügen verwenden Probleme. webhelp.esri.com/arcgisdesktop/9.2/…
spg
3
Online-Dienst zum Erstellen einer ordnungsgemäß formatierten vrt-Datei: vrtbuilder.appspot.com
matt wilkie
9

Sie können das in QGIS enthaltene Delimited Text-Plugin (http://qgis.org ) verwenden, um die Textdatei zu laden und sie dann als Shapefile zu speichern.

gsherman
quelle
Ich werde oft von Parser-Fehlern geplagt, die mit diesem Tool auftreten. Irgendein Rat?
27.07.10
1
Haben Sie konkrete Beispiele?
Gsherman
@ fmark - Ich bekomme diese Fehler auch, und es ist normalerweise auf MS Excel zurückzuführen, das die
CSV behandelt
6

Obwohl dies nicht über die Befehlszeile erfolgt, können Sie dies in ArcGIS App tun. Fügen Sie die XLS-Datei seit 9.3.1 direkt in ArcMap hinzu. Erstellen Sie eine XY-Ereignisebene aus dem XLS (dh wählen Sie die XY-Spalten aus und legen Sie Ihren Raumbezug fest). Exportieren Sie dann diese XY-Ereignisebene in eine neue .shp-Datei. Dies kann problemlos mit einem einfachen Python / VBA-Skript oder einem Modell in Modelbuilder automatisiert werden . Gerne helfen wir Ihnen bei diesem grundlegenden Workflow, wenn Sie weitere Informationen benötigen.

Simon
quelle
1
Wenn Sie Python verwenden, können Sie ein Geoverarbeitungswerkzeug über die Befehlszeile ausführen.
Jswise
6

Ich habe nach einer Hilfeseite zum Anzeigen von XY-Daten in der Webhilfe gesucht, konnte sie jedoch nicht finden, aber der Vorgang ist einfach.

  1. Verwenden Sie Daten hinzufügen (oder ziehen und ablegen aus dem Katalogfenster), um nach Ihrem Arbeitsblatt (innerhalb der Tabelle) zu suchen und es Ihrer Karte hinzuzufügen
  2. Klicken Sie mit der rechten Maustaste, um XY-Daten anzeigen auszuwählen und zu verwenden, und fügen Sie eine Ereignisebene hinzu
  3. Klicken Sie mit der rechten Maustaste auf die eben erstellte Ereignisebene und verwenden Sie Daten | Daten exportieren, um ein Shapefile zu erstellen

Dazu benötigen Sie nur die ArcView (Basic) -Lizenz von ArcGIS (for) Desktop.

PolyGeo
quelle
Muss ich irgendetwas mit den oberen Spalten tun, die nicht Teil der Daten sind?
Zoran,
Welche zwei Spalten sind nicht Teil Ihrer Daten? Die von mir beschriebene Prozedur sollte die von Ihnen ausgewählten langen / lat-Spalten verwenden, um die Punktgeometrien zu generieren, und dann, wie ich finde, den Rest als Attribute davon speichern. Versuchen Sie es am besten, und wenn das Ergebnis nicht den Erwartungen entspricht, beschreiben Sie Ihr beobachtetes vs. erwartetes Ergebnis.
PolyGeo
Denke, ich habe Top 2 falsch gelesen - und nehme an, Sie meinen die oberste Zeile (von Überschriften). Sie sollten nur Feldnamen nach dem Hinzufügen von Daten werden.
PolyGeo
Ich bin mir nicht sicher, ob dies immer noch der Fall ist, aber Leerzeichen in den Kopfzeilennamen in der Excel-Datei bereiteten Add XY bisher echte Kopfschmerzen.
Chad Cooper
1
Das direkte Laden von Excel-Dateien in ArcGIS funktioniert hervorragend - außer wenn dies nicht der Fall ist! Dinge, auf die man achten sollte: Datteln verstümmelt, Zahlen abgeschnitten. Der erste Fehlerbehebungsschritt besteht immer darin, alle als Text definierten Spalten in CSV zu exportieren und zu laden, um festzustellen, ob das Problem weiterhin besteht. Diese Einschränkung beiseite. Anzeige als X / Y funktioniert sehr gut.
Matt Wilkie
4

Es gibt immer die abenteuerliche Möglichkeit. Sie können die Formdatei auch selbst schreiben. ESRI veröffentlicht die Spezifikation für Shapefiles, die Sie hier lesen können:

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

Sie müssten wahrscheinlich auch eine DBF-Datei schreiben. Über das Format können Sie hier lesen:

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

Dies ist zweifellos übertrieben, bietet Ihnen jedoch den Vorteil, die Kontrolle über den gesamten Prozess zu haben.

Scott Wisniewski
quelle
Eigentlich neige ich dazu - ich verwende OGR, anstatt das Shapefile direkt zu schreiben!
Markieren Sie den
2
Excel kann den DBF wahrscheinlich direkt schreiben, obwohl ich mit der Verwendung dieser DBFs als DBF-Komponente eines Shapefiles unterschiedliche Erfolge erzielt habe.
Wanderer
Excel schreibt keine DBF-Dateien aus.
user30184
3

Ich persönlich bevorzuge die Verwendung von FME von Safe Software (http://www.safe.com), mit der ich nicht nur Punkte aus XY-Werten plotten kann, sondern auch die Möglichkeit habe, die Koordinaten vor dem Plotten von einer Projektion in eine andere zu transformieren Typ des Begrenzers, Anfangszeile (falls die Textdatei Header-Informationen enthält), Attribute anhängen, falls die Textdatei X, Y, Attribut-Informationen für die Punktdaten enthält. Wenn Sie diese Daten in Google Earth visualisieren möchten, können Sie sie in das KML-Format schreiben und gleichzeitig den KML-Punktstil festlegen. ~ SRG

SRG
quelle
2

Wenn Sie die XY-Daten auf andere Weise verarbeiten möchten, können Sie die Daten in Postgres laden, Geomfromtext mit Verkettung verwenden, um einen Geometriedatentyp zu erstellen, und dann mit pgsql2shp exportieren, um sie zu formen. Dieser Ansatz ermöglicht es Ihnen auch, heterogene Daten des räumlichen Bezugssystems in einer anderen Spalte zu speichern, die Sie dann verwenden können, um alle Ihre Punkte in ein gemeinsames Bezugssystem innerhalb der Datenbank zu konvertieren, bevor Sie sie in eine Form exportieren. Mir ist klar, dass dies mehr Schritte erfordert als ogr / gdal, aber es gibt Ihnen viel mehr Flexibilität.

John Powell
quelle
Ich habe diesen Ansatz in der Vergangenheit verwendet und er ist gut. Ich glaube , mein konsequent Stein des Anstoßes ist hier die Excel - Datentypen zuverlässig zu erkennen ....
fmark
1
Ich nehme an, Sie könnten etwas in Excel VBA schreiben, um Ihre Spalten zuerst neu anzuordnen, sodass das Datum x, y immer die ersten drei Spalten waren. Ohne eine Art von Konventionen zur Spaltenbenennung wäre es meiner Meinung nach schwierig, das, was Sie vorhaben, vollständig zu automatisieren.
John Powell
1

Was ist mit dem Laden Ihrer CSV-Dateien in Spatiallite und dem anschließenden Export in ein Shapefile mithilfe von OGR oder QGIS?

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

Sie können sogar direkt aus Spatialite in ein Shapefile exportieren.

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

TheSteve0
quelle
Spatialite kann Excel-Dateien direkt importieren, wenn sie das alte XLS-Format (Excel 97-2003) haben. X- und Y-Koordinaten müssen nach dem ersten Import mit SQL inte-Geometrien konvertiert werden.
user30184
Wenn Sie nichts dagegen haben, Java zu verwenden, können Sie das POI-Projekt verwenden, um die Excel-Dateien zu zerreißen, und dann GeoTools verwenden, um das neue Shapefile zu schreiben
TheSteve0,
0

Für eine grundlegendere Transformation können Sie den 2Dpointreplacer-Transformator in FME 2013 verwenden. Sie müssen angeben, in welchen Spalten sich die X- und Y-Werte befinden, und dann wandelt FME diese Werte in beispielsweise eine Formdatei mit Punkten um.
Spaltennamen und -typen können nach Bedarf festgelegt werden

Einfrieren
quelle