Was ist ein Shapefile und welche Dateien braucht es?
Ein Shapefile ist ein GIS-Vektorformat, das Esri Anfang der 1990er-Jahre geschaffen hat. Es ist eine Gruppe von Dateien mit einem gemeinsamen Namen: .shp enthält die Geometrie, .shx einen Index und .dbf die Attribute. Eine .prj-Datei gibt das Koordinatensystem an, eine .cpg-Datei die Textkodierung. FileReshape kann ein Shapefile in Ihrem Browser anzeigen oder in GeoJSON, KML oder GeoPackage umwandeln, ohne es hochzuladen.
Woher das Shapefile kommt
Esri führte das Shapefile Anfang der 1990er-Jahre mit seinem Desktop-Programm ArcView ein, als einfache Möglichkeit, Punkte, Linien und Polygone zusammen mit einer Attributtabelle zu speichern. 1998 veröffentlichte Esri die ESRI Shapefile Technical Description, ein White Paper, das den Aufbau der Geometrie- und Indexdateien dokumentiert. Weil die Beschreibung öffentlich und das Format einfach war, konnte andere Software es ohne Lizenz lesen und schreiben, und das Shapefile wurde zum gemeinsamen Austauschformat der Desktop-GIS.
Darin liegt bis heute seine größte Stärke. Open-Data-Portale von Behörden, Vermessungsbüros, Planungsämter und Versorgungsunternehmen veröffentlichen Shapefiles, weil fast jedes GIS-Programm sie lesen kann, von QGIS und ArcGIS Pro über GDAL und PostGIS-Ladeprogramme bis zu vielen CAD-Programmen. Das Format zeigt aber auch sein Alter, und die unten beschriebenen Grenzen sind der Grund, warum es neuere Formate gibt.
Die Dateien, aus denen ein Shapefile besteht
Ein Shapefile ist ein Satz von Dateien mit demselben Basisnamen, etwa parcels.shp, parcels.shx und parcels.dbf. Drei davon sind Pflicht. Die .shp-Datei speichert die Geometrie jedes Objekts als Liste von Koordinaten. Die .shx-Datei ist ein Index mit der Position jedes Datensatzes in der .shp-Datei, damit Programme direkt zu Objekt Nummer 5.000 springen können, statt alles davor zu lesen. Die .dbf-Datei ist die Attributtabelle im dBASE-Format, mit einer Zeile pro Objekt in derselben Reihenfolge wie die Geometrien. Die Verbindung zwischen einer Geometrie und ihrer Zeile ist nichts anderes als diese Reihenfolge.
Die übrigen Dateien sind optional. Die .prj-Datei enthält das Koordinatensystem als eine Zeile Well-known Text (WKT) in dem Dialekt, den Esri verwendet. Die .cpg-Datei ist eine winzige Textdatei, die die Zeichenkodierung der .dbf-Datei nennt, etwa UTF-8 oder 1252. Die Dateien .sbn und .sbx sind ein räumlicher Index, den Esri-Software verwendet, und .qix ist ein anderer räumlicher Index, den GDAL und MapServer schreiben; beide beschleunigen nur das Zeichnen und Suchen in großen Dateien. Die Datei .shp.xml trägt Metadaten wie eine Beschreibung, den Autor und das Datum. Manchmal sehen Sie auch .atx-Dateien für Attributindizes. Fehlt eine optionale Datei, können Programme die Daten trotzdem lesen, aber ohne .prj ist die Lage Ratespiel, und ohne .cpg können Sonderzeichen falsch dargestellt werden.
Die Basisnamen müssen exakt übereinstimmen, auf Systemen, die darauf achten, auch in Groß- und Kleinschreibung. Wenn Sie nur roads.shp in streets.shp umbenennen, ist der Satz kaputt. Benennen, kopieren und verschicken Sie alle Teile gemeinsam; am einfachsten halten Sie sie mit einer .zip-Datei des ganzen Satzes zusammen.
Ein Geometrietyp pro Shapefile
Jedes Shapefile legt in seinem Kopf einen Geometrietyp fest, und jedes Objekt muss diesen Typ haben oder leer sein. Die wichtigsten Typen sind Point, MultiPoint, PolyLine (Linien) und Polygon, jeweils in einer einfachen 2D-Version, einer Version mit Z-Werten für die Höhe und einer Version mit M-Werten für Messwerte, etwa die Entfernung entlang einer Route. Ein selten genutzter Typ MultiPatch beschreibt 3D-Oberflächen. Eine Datei kann keine Punkte mit Polygonen mischen; ein Datensatz mit Gebäuden und ihren Eingängen muss also als zwei Shapefiles gespeichert werden.
Polygone werden als Ringe gespeichert. Nach der veröffentlichten Beschreibung verläuft die äußere Grenze im Uhrzeigersinn und Löcher gegen den Uhrzeigersinn, und ein Polygon mit mehreren getrennten Teilen, etwa ein Land mit Inseln, ist ein einziges Objekt mit mehreren Ringen. Das Format speichert keine Topologie: Zwei benachbarte Flurstücke speichern ihre gemeinsame Grenze jeweils getrennt, und nichts in der Datei garantiert, dass die Linien übereinstimmen.
Grenzen der .dbf-Attributtabelle
Viele Eigenheiten des Shapefiles stammen aus dem dBASE-Tabellenformat, das aus den 1980er-Jahren stammt. Feldnamen dürfen höchstens 10 Zeichen haben, aus Population_2020 muss also etwa POP_2020 werden, und manche Programme schreiben sie außerdem in Großbuchstaben. Textfelder fassen höchstens 254 Zeichen. Auch die Zahl der Felder ist begrenzt; meist wird 255 genannt.
Es gibt nur wenige Datentypen. Text wird als Zeichenfelder fester Breite gespeichert, Zahlen als numerische oder Gleitkommafelder mit fester Breite und Zahl der Nachkommastellen, wahr und falsch als logische Felder und Datumsangaben als Datumsfelder in der Form Jahr, Monat, Tag. Es gibt keine Uhrzeit und keine Zeitzone; ein Zeitstempel muss also als Text gespeichert oder auf mehrere Felder aufgeteilt werden. Einen echten Nullwert gibt es auch nicht: Eine leere Zahl wird je nach Programm meist als Leerzeichen oder als Null geschrieben, und manche Leseprogramme zeigen dann 0, wo der Wert eigentlich unbekannt war. Listen, verschachtelte Werte oder Binärfelder gibt es nicht.
Grenzen der Dateigröße
Die Köpfe der .shp- und .shx-Dateien speichern Offsets und Längen als 32-Bit-Zahlen, woraus die übliche Regel folgt, dass jeder Teil eines Shapefiles, insbesondere die .shp- und die .dbf-Datei, unter 2 GB bleiben muss. Manche Programme, darunter GDAL, können auf Anweisung Dateien bis etwa 4 GB lesen und schreiben, aber andere Software lehnt sie unter Umständen ab. Ein noch größerer Datensatz muss auf mehrere Shapefiles aufgeteilt oder in einem anderen Format gespeichert werden. In der Praxis erreicht oft die .dbf-Datei zuerst die Grenze, weil jedes Textfeld in jeder Zeile seine volle Breite belegt, auch wenn die meisten Werte kurz sind.
Textkodierung und die .cpg-Datei
Das .dbf-Format ist älter als Unicode. Text wird als Bytes gespeichert, und der Kopf hat ein Byte, oft Language Driver ID genannt, das eine Codepage wie Windows-1252 oder eine DOS-Codepage benennen kann. Viele Programme lassen es leer oder setzen es falsch. Die .cpg-Datei kam später hinzu, um die Kodierung eindeutig anzugeben, und moderne Software schreibt UTF-8 zusammen mit einer .cpg-Datei, die das angibt.
Wenn weder die .cpg-Datei noch das Byte im Kopf stimmt, muss ein Programm raten, und Namen wie Malmö, Ærø oder São Paulo werden zu Ketten seltsamer Zeichen. In dem Fall sind die Daten meist intakt. Teilen Sie Ihrem GIS-Programm beim Öffnen des Layers mit, welche Kodierung es verwenden soll, zum Beispiel in den Layereigenschaften in QGIS, oder legen Sie eine .cpg-Datei mit dem richtigen Namen an. Wenn Sie selbst Shapefiles schreiben, wählen Sie UTF-8 und lassen Sie die .cpg-Datei bei den anderen Teilen.
Koordinatensysteme und die .prj-Datei
Die .shp-Datei speichert einfache Zahlen, ohne anzugeben, was sie bedeuten. Es können Längen- und Breitengrade in Grad sein, Meter in einer UTM-Zone oder Fuß in einem US-State-Plane-System. Nur die .prj-Datei teilt Programmen mit, welches Koordinatenbezugssystem gilt, und zwar als WKT-Text statt als EPSG-Code. Die meisten Programme können gängige Definitionen einem EPSG-Code zuordnen, aber ungewöhnliche oder von Hand bearbeitete .prj-Dateien führen manchmal zu einer leicht abweichenden Interpretation.
Ohne .prj-Datei nimmt ein Programm unter Umständen WGS84 an oder fragt Sie. Werte zwischen -180 und 180 und zwischen -90 und 90 sind wahrscheinlich Grad; große Werte im Bereich von Hunderttausenden oder Millionen sind projizierte Meter oder Fuß. Ein Koordinatensystem zuzuweisen, beschriftet die Daten nur. Umprojizieren berechnet die Koordinaten tatsächlich neu, und beides sollte man nicht verwechseln.
Alternativen zum Shapefile
GeoPackage ist ein offener Standard des Open Geospatial Consortium, aufgebaut auf einer SQLite-Datenbank in einer einzigen .gpkg-Datei. Es fasst mehrere Layer, lange Feldnamen, echte Datums- und Zeitangaben, Nullwerte und große Datensätze, und es ist das Standardformat von QGIS. Es eignet sich gut, um ein ganzes Projekt zu übergeben. GeoJSON ist ein JSON-Textformat, standardisiert als RFC 7946. Es lässt sich leicht in einem Texteditor lesen und ist das natürliche Format für Webkarten und APIs, aber der Standard erwartet WGS84-Koordinaten, und die Dateien werden groß. FlatGeobuf ist ein neueres binäres Einzeldateiformat mit eingebautem räumlichem Index, entworfen für schnelles Lesen und zum Streamen über das Web; die Unterstützung wächst, ist aber noch nicht so universell wie bei den anderen.
Keines davon passt in jedem Fall. Das Shapefile bleibt die sicherste Wahl, wenn Sie nicht wissen, welche Software der Empfänger verwendet, oder wenn ein System oder ein Auftraggeber es ausdrücklich verlangt. Wenn seine Grenzen im Weg stehen, etwa gekürzte Feldnamen, verlorene Zeitstempel oder Dateien nahe 2 GB, ist die Umwandlung in GeoPackage meist der schmerzloseste Schritt.
Mit Shapefiles im Browser arbeiten – mit FileReshape
Die Shapefile-Werkzeuge von FileReshape lesen die Teile mit GDAL, das für das Web kompiliert wurde; die Dateien werden also auf Ihrem eigenen Gerät verarbeitet und nicht hochgeladen. „Shapefile online anzeigen“ zeigt die Objekte auf einer Karte und die Attributtabelle mit dem Typ jedes Feldes. Die Konverter „Shapefile in GeoJSON umwandeln“, „Shapefile in KML umwandeln“ und „Shapefile in GeoPackage umwandeln“ schreiben dieselben Daten in diesen Formaten; GeoJSON und KML werden in WGS84 geschrieben, und das GeoPackage behält das Koordinatensystem. „KML in Shapefile umwandeln“ geht den umgekehrten Weg und schreibt eine .zip-Datei mit .shp-, .shx-, .dbf-, .prj- und .cpg-Dateien, ein Shapefile pro Geometrietyp. Sie können eine .zip-Datei in das Feld ziehen oder die Teile gemeinsam auswählen, und Namen, die bereits auf 10 Zeichen gekürzt wurden, kann keine Umwandlung wiederherstellen.
Häufige Fragen
Welche Dateien eines Shapefiles sind Pflicht?
Die Dateien .shp, .shx und .dbf sind Pflicht. Die Dateien .prj und .cpg sind optional, aber empfohlen, und .sbn, .sbx, .qix und .shp.xml sind Indizes und Metadaten, die fehlen dürfen.
Kann ein Shapefile Punkte, Linien und Polygone zusammen enthalten?
Nein. Jedes Shapefile hat in seinem Kopf einen einzigen Geometrietyp. Gemischte Daten müssen auf ein Shapefile pro Typ aufgeteilt oder in einem Format wie GeoPackage oder GeoJSON gespeichert werden.
Warum zeigt mein Shapefile seltsame Zeichen statt Umlauten und Akzenten?
Das Programm hat die .dbf-Datei mit der falschen Kodierung gelesen. Wählen Sie beim Öffnen des Layers die richtige Kodierung, oder legen Sie eine .cpg-Datei mit dem richtigen Namen an, etwa UTF-8 oder 1252.
Kann ein Shapefile Datum und Uhrzeit speichern?
Es kann ein Datum speichern, aber keine Uhrzeit. Zeitstempel werden daher meist als Textfelder gespeichert, oder die Daten werden in GeoPackage überführt, das einen echten Datums- und Zeittyp hat.
Ist das Shapefile ein offenes Format?
Seine Geometrie- und Indexdateien sind in einer technischen Beschreibung dokumentiert, die Esri 1998 veröffentlicht hat, und die Attributtabelle verwendet das weithin bekannte dBASE-Format; daher lesen und schreiben viele freie und kommerzielle Programme Shapefiles.