Warum ein Shapefile in GeoJSON umwandeln
Wenn Sie sich schon einmal gefragt haben, wie man ein Shapefile in GeoJSON umwandelt: Die kurze Antwort ist, dass ein "Shapefile" gar nicht eine einzelne Datei ist. Was die meisten Leute "ein Shapefile" nennen, ist tatsächlich ein Bündel aus mindestens drei Dateien mit demselben Namen und unterschiedlichen Endungen: `.shp` für die Geometrie, `.shx` für einen Positionsindex in diese Geometrie und `.dbf` für die Attributtabelle. Ein realer Shapefile-Export enthält oft zusätzlich eine `.prj`-Datei für das Koordinatenreferenzsystem und eine `.cpg`-Datei für die Textkodierung. Öffnet man nur die `.shp`-Datei in einem Texteditor, erhält man binäres Rauschen; öffnet man nur die `.dbf`, erhält man Attribute ohne Formen, denen sie zugeordnet werden könnten.
GeoJSON dagegen ist eine einzige, in sich geschlossene JSON-Datei, definiert durch eine einzige Spezifikation (RFC 7946), die das Koordinatenreferenzsystem fest auf WGS84 Länge/Breite legt. Genau dieses Ein-Datei-, Ein-CRS-Design ist der Grund, warum so viele Webkarten, JavaScript-Bibliotheken und moderne GIS-APIs GeoJSON als Eingabe erwarten statt eines Shapefile-Bündels. Die Umwandlung von Shapefiles in GeoJSON ist meist der erste Schritt, bevor ein Datensatz in Leaflet, Mapbox GL, eine von GitHub gerenderte Kartenvorschau oder fast jedes andere browserbasierte Kartenwerkzeug geladen werden kann.
Dieses Tool existiert, um genau diesen ersten Schritt schmerzfrei zu machen. Statt GDAL zu installieren, eine Desktop-GIS-Software zu öffnen oder ein Python-Skript nur für eine Datei zu schreiben, zippen Sie Ihre `.shp` / `.shx` / `.dbf` (und `.prj`, falls vorhanden) zusammen, laden das Zip in Ihrem Browser hoch und erhalten in wenigen Klicks eine funktionierende `.geojson`-Datei zurück. Die Umwandlung läuft vollständig clientseitig, sodass das Tool bei zehn Features genauso funktioniert wie bei hunderttausend, und Ihre Daten werden niemals irgendwohin gesendet.
Das Shapefile-Format: Geschichte und Struktur
Das Shapefile-Format wurde im Juli 1998 von ESRI (Environmental Systems Research Institute) in einem Dokument namens "ESRI Shapefile Technical Description" veröffentlicht. Obwohl es fast drei Jahrzehnte alt ist und standardmäßig keine Attributfeldnamen über 10 Zeichen, mehrere Geometrie-Layer pro Datei oder Unicode unterstützt, bleibt es eines der weltweit meistgenutzten Vektor-GIS-Formate in Behörden-, Versorgungs- und Forschungsdatensätzen, vor allem weil es so früh und so gründlich übernommen wurde, bevor modernere Formate existierten.
Die .shp-Datei beginnt mit einem festen 100-Byte-Header: Bytes 0 bis 3 sind ein Big-Endian-"Dateicode", der immer die Ganzzahl 9994 ist, Bytes 24 bis 27 geben die Dateilänge in 16-Bit-Wörtern an (Big-Endian), Bytes 28 bis 31 geben die Shapefile-Version an (Little-Endian, immer 1000), Bytes 32 bis 35 geben den Shape-Typ als Ganzzahlcode an (1 = Punkt, 3 = PolyLine, 5 = Polygon, 8 = MultiPoint, mit +10- oder +20-Varianten für Z- und M-Koordinatenwerte), und Bytes 36 bis 67 geben die Bounding Box der gesamten Datei als vier Little-Endian-Doubles an: Xmin, Ymin, Xmax, Ymax. Nach diesem Header folgt eine Sequenz von Datensätzen variabler Länge, jeder mit einem eigenen kleinen Header, der die Datensatznummer und die Inhaltslänge vor den eigentlichen Geometrie-Bytes angibt.
Die .dbf-Datei ist eine dBase-III/dBase-IV-Tabelle: ein Header-Block, der jedes Feld beschreibt (Name, Typ, Byte-Länge, Dezimalstellenanzahl), gefolgt von je einem Datensatz fester Breite pro Zeile. Die Zeilenreihenfolge in der .dbf entspricht exakt der Datensatzreihenfolge in der .shp-Datei, Position für Position, da es zwischen ihnen keinen expliziten Fremdschlüssel gibt. Die .shx-Datei existiert rein als Abkürzung: Sie speichert pro Datensatz ein 8-Byte-Paar (Offset, Länge), damit ein Reader direkt zu jeder Form springen kann, ohne alle vorangehenden Datensätze zu scannen, was bei einem 500-MB-Shapefile weit mehr zählt als bei einem kleinen.
Eine strukturelle Eigenart wirkt sich direkt auf die Umwandlungslogik aus: Ein Shapefile-Polygon-Datensatz kennt kein Konzept von "dieser Ring ist ein Loch in jenem Ring". Es ist schlicht eine flache Liste geschlossener Ringe. Die Konvention (laut Spezifikation) ist, dass im Uhrzeigersinn verlaufende Ringe äußere Grenzen sind und gegen den Uhrzeigersinn verlaufende Ringe Löcher, und ein Reader muss selbst herausfinden, welches Loch zu welchem äußeren Ring gehört. GeoJSON-Polygone folgen derselben Windungskonvention (RFC 7946 empfiehlt dieselbe Regel, verlangt sie aber nicht strikt), doch ein Shapefile-zu-GeoJSON-Konverter muss trotzdem jeden Ring durchgehen, klassifizieren und die Verschachtelung neu zusammensetzen, bevor er eine gültige Polygon- oder MultiPolygon-Geometrie ausgeben kann.
Schritt-für-Schritt-Anleitung: shp zu geojson konvertieren

Zippen Sie Ihre `.shp`-, `.shx`- und `.dbf`-Dateien zusammen (fügen Sie auch die `.prj` hinzu, falls vorhanden), wählen Sie diese Zip-Datei dann im Konverter aus, oder klicken Sie auf „Try sample“, um ein kleines fertiges Beispiel-Shapefile zu laden. Das Shapefile wird sofort eingelesen und als graue „Source shapefile“-Ebene auf der Karte angezeigt.

Das Layers-Panel listet das Quell-Shapefile mit seiner Feature-Anzahl auf. Prüfen Sie auf der Karte, ob die richtigen Daten geladen wurden, und klicken Sie dann auf „Convert to GeoJSON“, sobald Sie bereit sind.

Eine zweite Ebene „Converted GeoJSON“ wird über der Quellebene hinzugefügt, und eine Zusammenfassung erscheint: wie viele Features umgewandelt wurden, welche Geometrietypen gefunden wurden, die Bounding Box, die Attributspalten und die resultierende GeoJSON-Dateigröße.

Verwenden Sie die Kontrollkästchen im Layers-Panel, um die Quell- und die konvertierte Ebene unabhängig voneinander ein- und auszublenden, und aktivieren Sie „Show basemap“, wenn Sie eine Straßenkarte als Hintergrund für beide möchten.

Klicken Sie auf „Download converted.geojson“, um die fertige, standardkonforme GeoJSON-Datei auf Ihrem Computer zu speichern.
Sechs Praxisbeispiele
Wo die Umwandlung von Shapefiles in GeoJSON in der täglichen GIS-Arbeit tatsächlich vorkommt.
- Veröffentlichung behördlicher Open Data im Web. Viele kommunale, regionale und nationale Open-Data-Portale liefern Flurstücks-, Zonierungs- und Grenzdatensätze weiterhin als Shapefiles. Die Umwandlung von Shapefiles in GeoJSON macht aus diesem Download etwas, das eine Webkarte oder eine JavaScript-App direkt laden kann, ganz ohne serverseitige Verarbeitung.
- Vermessungs- oder Felddaten in eine Webkarte laden. Feld-GPS-Geräte und ältere Desktop-GIS-Workflows exportieren häufig Shapefiles. Eine schnelle shp-zu-geojson-Umwandlung ist oft der einzige Schritt zwischen der Ausgabe eines Vermessers und einer teilbaren Leaflet- oder Mapbox-GL-Karte.
- Daten für GitHub- oder GitLab-Kartenvorschauen vorbereiten. GitHub stellt `.geojson`-Dateien automatisch als interaktive Karte dar, rendert Shapefiles aber überhaupt nicht. Ein Shapefile vor dem Commit umzuwandeln macht den Unterschied zwischen einer gerenderten Karte und vier unlesbaren Binärdateien im Repository.
- Daten in JavaScript-Kartenbibliotheken einspeisen. Leaflet, Mapbox GL JS, OpenLayers und deck.gl verarbeiten alle nativ GeoJSON. Keine davon kann ein Shapefile direkt im Browser lesen, daher ist ein shp-zu-geojson-Konverter ein notwendiger Schritt in jeder clientseitigen Karten-Pipeline, die von Shapefile-Daten ausgeht.
- Alte GIS-Archive in moderne Formate migrieren. Organisationen, die alte Desktop-GIS-Systeme abschalten, besitzen oft jahrelange Shapefile-Archive. Die Umwandlung von Shapefiles in GeoJSON (oder weiter zu GeoParquet oder GeoPackage) ist meist der erste Migrationsschritt, da GeoJSON von praktisch jedem modernen Tool gelesen werden kann.
- Schnelle Einzelprüfungen ohne Desktop-GIS-Installation. Manchmal möchten Sie nur sehen, was in einer `.shp`-Datei steckt, die Ihnen jemand geschickt hat. Sie in GeoJSON umzuwandeln und auf einer Karte anzusehen ist schneller, als QGIS oder ArcGIS für eine einzelne Datei zu installieren.
Der Umwandlungsalgorithmus, Schritt für Schritt
Die Umwandlung eines Shapefiles in GeoJSON ist keine einzelne Operation, sondern eine kleine Pipeline klar definierter Parsing- und Geometrie-Rekonstruktionsschritte. Hier ist genau, was mit Ihren Daten passiert, in der richtigen Reihenfolge.
1. Entpacken und den passenden Dateisatz finden
Das hochgeladene .zip wird im Arbeitsspeicher entpackt, und der Konverter gruppiert Dateien nach ihrem gemeinsamen Basisnamen, um ein passendes Tripel aus .shp / .shx / .dbf zu finden (plus optional .prj und .cpg). Enthält ein Zip mehr als ein solches Tripel, wird es als Mehrschicht-Shapefile-Export behandelt und jeder Layer unabhängig umgewandelt.
2. Den festen 100-Byte-`.shp`-Header parsen
Der Header wird zuerst gelesen, um zu bestätigen, dass der Dateicode 9994 entspricht, um den Shape-Typ zu lesen (der dem Parser sagt, welche Datensatzstruktur als Nächstes zu erwarten ist), und um die Bounding Box auf Dateiebene zu lesen. Das Layout der für die Umwandlung relevanten Felder ist:
Bytes 0-3 File code big-endian int, always 9994 Bytes 24-27 File length big-endian int, in 16-bit words Bytes 28-31 Version little-endian int, always 1000 Bytes 32-35 Shape type little-endian int (1=Point, 3=PolyLine, 5=Polygon, 8=MultiPoint) Bytes 36-67 Bounding box 4 little-endian doubles: Xmin, Ymin, Xmax, Ymax
Alles nach Byte 100 wird als Strom variabler Länge von Datensätzen gelesen, jeder mit einem eigenen kleinen Header, der Datensatznummer und Inhaltslänge in 16-Bit-Wörtern angibt, was dann durch Multiplikation mit zwei in eine Byteanzahl umgerechnet wird.
3. Ringe zu Polygon- und MultiPolygon-Geometrien rekonstruieren
Bei Datensätzen vom Typ Polygon wird jeder Ring im Datensatz als flaches Array von (x, y)-Paaren gelesen. Der Konverter berechnet dann die vorzeichenbehaftete Fläche jedes Rings mit der Gaußschen Trapezformel (Schnürsenkel-Formel), Fläche = 0.5 * Σ(x[i] * y[i+1] - x[i+1] * y[i]). Ein positives Ergebnis (in der uhrzeigersinn-positiven Konvention des Shapefiles) markiert einen äußeren Ring; ein negatives Ergebnis markiert ein Loch. Jeder Loch-Ring wird dann dem kleinsten äußeren Ring zugeordnet, dessen Bounding Box ihn vollständig enthält, und beide werden zu einem einzigen coordinates-Array eines GeoJSON-Polygon kombiniert, mit dem äußeren Ring zuerst und jedem Loch-Ring danach. Enthält ein Datensatz mehr als einen äußeren Ring, wird das Ergebnis stattdessen ein MultiPolygon.
4. Koordinaten reprojizieren und Attribute anhängen
Ist eine .prj-Datei vorhanden und ihr Koordinatenreferenzsystem nicht bereits WGS84, wird jedes im vorherigen Schritt erzeugte Koordinatenpaar nach WGS84 Länge/Breite reprojiziert, da dies das von RFC 7946 für gültiges GeoJSON geforderte Koordinatensystem ist. Parallel dazu wird die .dbf-Tabelle Feld für Feld geparst, und Datensatz i in der .dbf wird als properties-Objekt der aus Datensatz i der .shp-Datei erstellten Geometrie angehängt, da die beiden Dateien rein positionsbasiert und nicht über einen expliziten Schlüssel zugeordnet werden.
Der letzte Schritt verpackt jede umgewandelte Geometrie und ihre Eigenschaften in ein GeoJSON-Feature, sammelt jedes Feature in einer einzigen FeatureCollection und serialisiert diese Struktur zu Text, bereit zum Herunterladen als .geojson-Datei. Da jeder obige Schritt eine deterministische, klar definierte Transformation ist, erzeugt die zweifache Umwandlung desselben Shapefiles immer bytegleiche GeoJSON-Ausgabe.
Die GIS-Bibliotheken hinter der Shapefile-Umwandlung
Ein shp-zu-geojson-Konverter ist nur so gut wie der darunterliegende Shapefile-Parser. Hier ist, was tatsächlich die Arbeit erledigt, in diesem Tool und anderswo.
- shpjs: Die Engine hinter diesem Tool. shpjs ist eine reine JavaScript-Bibliothek, die das Archiv entpackt, die binäre `.shp`-Geometrie und die `.dbf`-Attributtabelle parst, Koordinaten bei Vorhandensein von `.prj`-Daten reprojiziert und das Ergebnis zu GeoJSON zusammensetzt, alles ohne den Browser oder einen Node.js-Prozess zu verlassen.
- GDAL / OGR (ogr2ogr): Die C/C++-Bibliothek, die den meisten Desktop- und serverseitigen GIS-Programmen zugrunde liegt. Der Befehl `ogr2ogr -f GeoJSON output.geojson input.shp` ist der De-facto-Standardweg, Shapefiles per Kommandozeile in GeoJSON umzuwandeln, und dieselbe Engine ruft QGIS intern auf, wenn Sie den Dialog "Export Features" nutzen.
- Fiona und GeoPandas: Pythons Geodaten-I/O-Stack. Fiona umschließt GDAL/OGR direkt, und GeoPandas baut auf Fiona auf, sodass `gpd.read_file('data.shp')` gefolgt von `gdf.to_file('data.geojson', driver='GeoJSON')` eine der gängigsten Arten ist, wie Entwickler Shapefiles innerhalb einer Datenpipeline in GeoJSON umwandeln.
- Mapshaper: Ein weit verbreitetes Kommandozeilen- und browserbasiertes Tool (von Matthew Bloch), das Shapefiles mit einem eigenen Parser liest und Geometrie beim Umwandeln vereinfachen kann, nützlich wenn ein Shapefile für eine Webkarte zu detailliert ist und sowohl Umwandlung als auch Vereinfachung in einem Durchgang benötigt werden.
- QGIS und ArcGIS: Beide Desktop-GIS-Anwendungen können ein Shapefile nativ öffnen und über eine Menüaktion als GeoJSON exportieren, QGIS' "Export Features" und ArcGIS' "Feature Class to GeoJSON" oder ähnliche Tools, die beide unter der Benutzeroberfläche GDAL/OGR oder eine gleichwertige Bibliothek aufrufen.
Alle diese Tools stimmen in derselben zugrunde liegenden Shapefile-Spezifikation und demselben GeoJSON-Ausgabeformat überein, sodass eine von jedem von ihnen umgewandelte Datei strukturell gleichwertig sein sollte. Der Unterschied liegt darin, wo die Arbeit stattfindet: GDAL, Fiona und Desktop-GIS-Software laufen alle auf einem Rechner mit installierter Software, während die shpjs-basierte Engine dieses Tools direkt in Ihrem Browser-Tab läuft, weshalb hier niemals eine Installation oder ein Datei-Upload auf einen Server nötig ist.
Technische Fragen und Antworten
Zehn häufige Fragen dazu, wie man ein Shapefile in GeoJSON umwandelt, direkt beantwortet.
1. Wie wandle ich ein Shapefile in GeoJSON um?
Packen Sie die Dateien .shp, .shx und .dbf (plus .prj, falls vorhanden) in ein einziges .zip-Archiv, laden Sie dieses Zip in diesen Konverter hoch und klicken Sie auf „Convert to GeoJSON“. Das Tool liest die binäre Geometrie des Shapefiles, gleicht sie mit der Attributtabelle ab und erzeugt eine standardkonforme .geojson-Datei, die Sie sofort herunterladen können, alles innerhalb Ihres Browsers.
2. Warum verlangt dieses Tool eine Zip-Datei statt direkt die .shp-Datei?
Eine .shp-Datei allein enthält nur Geometrie, ohne Attribute und, entscheidend, ohne ein Feld, das beschreibt, was jede Form eigentlich darstellt. Ein gültiges Shapefile besteht aus mindestens drei Dateien (.shp, .shx, .dbf), die zusammen gelesen werden müssen, daher benötigt dieser Konverter, wie jeder andere shp-zu-geojson-Konverter, alle gleichzeitig, und ein Zip ist die einfachste Art, einen zusammenpassenden Satz zu übergeben.
3. Ist diese shp-zu-geojson-Umwandlung kostenlos, und gibt es ein Dateigrößenlimit?
Ja, sie ist völlig kostenlos, ohne Anmeldung. Es gibt keine künstliche Dateigrößenbegrenzung, allerdings brauchen sehr große Shapefiles (mehrere hundert MB) länger zum Einlesen, da alles auf Ihrem eigenen Gerät statt auf einem Server passiert.
4. Bleiben meine Attributdaten bei der Umwandlung erhalten?
Ja. Jedes Feld der .dbf-Tabelle wird gelesen und dem passenden Feature als GeoJSON-properties-Objekt zugeordnet, wobei Feldnamen und -werte, einschließlich Zahlen, Text und Daten, erhalten bleiben.
5. Was passiert mit dem Koordinatenreferenzsystem?
Wenn Ihr Zip eine .prj-Datei enthält, liest der Konverter das darin beschriebene Koordinatenreferenzsystem. GeoJSON ist gemäß RFC 7946 immer in WGS84 Länge/Breite, daher werden die Koordinaten bei der Umwandlung nach WGS84 reprojiziert, falls das Quell-Shapefile eine andere Projektion verwendet (häufig bei nationalen Gitternetzsystemen). Ist keine .prj-Datei vorhanden, wird angenommen, dass die Koordinaten bereits in WGS84 vorliegen.
6. Kann es Polygon-Shapefiles mit Löchern korrekt verarbeiten?
Ja. Shapefile-Polygon-Datensätze speichern Ringe als flache Liste ohne explizite Eltern-Kind-Beziehung und verlassen sich auf die Windungsrichtung der Ringe, um äußere Grenzen von Löchern zu unterscheiden. Der Konverter klassifiziert jeden Ring anhand seiner vorzeichenbehafteten Fläche, ordnet Löcher ihrem korrekten übergeordneten Ring zu und erzeugt korrekte GeoJSON-Polygon- oder MultiPolygon-Geometrien.
7. Welche Geometrietypen werden unterstützt?
Point, MultiPoint, PolyLine (umgewandelt in LineString oder MultiLineString) und Polygon (umgewandelt in Polygon oder MultiPolygon), einschließlich ihrer Z- (Höhe) und M- (Maß) Varianten. Datensätze vom Typ Null werden übersprungen, da sie keine umzuwandelnde Geometrie enthalten.
8. Kann ein Shapefile mit mehr als einem Layer umgewandelt werden?
Eine einzelne .shp-Datei enthält immer genau einen Geometrie-Layer. Enthält Ihr Zip also mehrere .shp-Dateien (ein Mehrschicht-Export), wird jede separat umgewandelt und im Ergebnis klar gekennzeichnet, sodass Sie erkennen können, welche Features aus welchem ursprünglichen Shapefile stammen.
9. Warum sehen manche Textattribute nach der Umwandlung verstümmelt aus?
Das .dbf-Format speichert Text mit einer bestimmten Codepage (Zeichenkodierung), und ältere Shapefiles enthalten nicht immer eine .cpg-Datei, die angibt, welche das ist. Ist keine Kodierung angegeben, greift der Konverter auf einen gängigen Standard zurück; wenn Ihre Quelldaten eine ungewöhnliche regionale Kodierung verwendeten, müssen manche akzentuierten Zeichen nach der Umwandlung eventuell manuell korrigiert werden.
10. Wird mein Shapefile auf einen Server hochgeladen?
Nein. Das Entpacken des Archivs, das Parsen der binären .shp-Geometrie, das Lesen der .dbf-Attributtabelle und das Zusammensetzen des finalen GeoJSON geschehen alle lokal in Ihrem Browser mit JavaScript. Ihre Datei verlässt niemals Ihr Gerät.
Die Umwandlung läuft vollständig in Ihrem Browser mit shpjs. Es wird niemals eine Datei auf einen Server hochgeladen. Map tiles © OpenStreetMap contributors.
