Mehr

Verlustfreie Konvertierung von Shapefiles in XML/JSON/Text

Verlustfreie Konvertierung von Shapefiles in XML/JSON/Text


Ich bin Softwareentwickler und muss ein benutzerdefiniertes Tool erstellen, das ESRI-Shapefiles (shp + shx + dbf) importiert, den Inhalt manipuliert und dann neue Shapefiles exportiert. Um ein komplexes binäres Lesen der 3 Formate zu vermeiden, möchte ich die Eingabedateien in ein "bekanntes" Textformat (JSON, XML, Klartext,…) konvertieren und die Konvertierung rückgängig machen.

Ich habe versucht, gdal/ogr2ogr zu verwenden, um die Shapefiles in CSV zu konvertieren, aber die Ausgabe scheint nur den Inhalt der Datenbank (dbf-Datei) zu enthalten. Das bedeutet, dass ich alle Polygonkoordinaten verliere, wenn ich versuche, die CSV-Datei wieder in Shapefiles zu konvertieren.

Ich habe dann versucht, in GeoJSON zu konvertieren, was viel besser war, aber ein paar Daten scheinen wieder zu fehlen (wie Formgrenzen und Polygonindizes).

Gibt es in gdal eine Option für eine "verlustfreie" Konvertierung zwischen Shapefiles und jedem menschenlesbaren Format?


Alle von GDAL/OGR unterstützten Vektorformate sind hier aufgelistet. Sehen Sie sich bei jedem Treiber die Erstellungsoptionen an, um die Ausgabe zu steuern. Diese werden mit an ogr2ogr übergeben-dcound-lcoFlaggen.

Gute textbasierte Ausgabetreiber umfassen:

  • CSV - unbedingt verwenden-lco GEOMETRIE=AS_WKTum die bekannte Textgeometrie zu erhalten
  • GeoJSON
  • GML
  • KML
  • LIBKML.

Was Sie suchen, ist die Geographic Markup Language (GML). Es ist für Menschen lesbar und sollte alles beibehalten.

-f gml

in gdal / ogr.

Übersehen Sie KML auch nicht. Beide sind von Menschen lesbare Vektor-OGC-Standards, die in gdal / ogr unterstützt werden.

Sie können beide in Texteditoren öffnen.


Ich glaube nicht, dass Sie eine Zeilenfolge oder eine Polgon-Zeichenfolge mit x- und y-Werten in CSV erhalten. Ich glaube, dass Sie nur Punktwerte erhalten, wenn Sie csv auswählen. Sie haben eine Spalte für x und eine Spalte für y.

Die gdal-Bibliotheken, die Shapefiles lesen, behandeln die drei Dateien als ein Tier. Diese Bibliotheken übernehmen bereits die gesamte Arbeit des Lesens der drei komplexen Dateiformate, wenn Sie deren Header-Dateien in Ihr Projekt einbinden. GeoJSON, GML und KML wären gute Zwischenformate für das, was Sie tun möchten.

"Importieren" ist das Schlagwort in Ihrer Frage. Abhängig von Ihrem Importziel verfügt gdal/ogr möglicherweise über eine unterstützende Zieldatenbank oder ein zusätzliches Dateiformat. Das würde das Schreiben von Code ersparen, den andere bereits überprüft haben. Typ

ogr2ogr --formate

auf der Kommandozeile. Die Option Formate listet alle Dateiformate auf, die in Ihre Version der von Ihnen verwendeten gdal/ogr-Anwendung kompiliert wurden. Vorkompilierte Versionen können mehr oder weniger der verfügbaren Dateiformate bieten. Überprüfen Sie auch die von Ihnen verwendete Version, da von Release zu Release neue Formate zur Verfügung gestellt werden. Auch hier hängen die verfügbaren Formate davon ab, was für Sie zusammengestellt wurde.

Was Ihre Ausrichtungsprobleme angeht, stellen Sie sicher, dass Sie ein räumliches Bezugssystem oder SRS verwenden. Benutzen-x_srsoptions wobei x auf eine der benannten srs-Optionen verweist. Dies ist eine Sicherheitsmaßnahme, um sicherzustellen, dass Sie im Referenzsystem explizit angeben, das gdal während der Konvertierung verwenden soll. Ich habe genug von Problemen und Haarrissen gehört, bei denen die SRS-Optionen nicht explizit verwendet wurden, dass ich sie immer nutze, um diese Schmerzen und Leiden zu vermeiden. Davon abgesehen kann es bei jeder von Ihnen durchgeführten Konvertierung zu Verzerrungen kommen. Dies ist jedoch ein Teil davon, Werte auf einer runden Kugel zu nehmen und zu versuchen, sie auf einer 2D-Koordinatenebene gleich aussehen zu lassen.


Schau das Video: JSON, XML и другие форматы текстовых файлов