Überlegungen zu Shape-Dateien
Im Bereich der Geodaten sind Shape-Dateien mit derzeit 1.340 Datensätzen das häufigste Format. Es handelt sich dabei nicht zur um ein proprietäres Format, sondern auch in Bezug auf Metadaten sind Shape-Dateien leider ziemlich begrenzt. Aber mit Metadaten an anderer Stelle ergeben sich ganz neue Möglichkeiten.
In Shape-Dateien ist schon die Länge der Feldbezeichnungen auf zehn Zeichen begrenzt. Das erklärt dann auch die kryptischen Bezeichnungen, mit denen man als nicht Fachexperte kaum etwas anfangen kann. Platz für Beschreibungen, Wertebegrenzungen oder Codelisten gibt es gar nicht.
Als Beispiel verwende ich diesen Datensatz zu den Flächen für Saatmuschelgewinnungsanlagen im Nationalpark Schleswig-Holsteinisches Wattenmeer 2017 im Umweltportal: https://umweltportal.schleswig-holstein.de/trefferanzeige?docuuid=4c220410-08d1-44df-b06b-2d1f50a69bfa&q=saatmuschelgewinnungsanlagen
Dort werden die Felder genau beschrieben:
Maschinenlesbar gibt es die Metadaten auch, nämlich hier: https://umweltportal.schleswig-holstein.de/csw?REQUEST=GetRecordById&SERVICE=CSW&VERSION=2.0.2&id=4c220410-08d1-44df-b06b-2d1f50a69bfa
Darin sind die Feldbeschreibungen etwas schwer zu lesen. Hier ist der Text für ein Feld:
<gmd:spatialRepresentationInfo>
<igctx:MD_GeometryContext gco:isoType="AbstractMD_SpatialRepresentation_Type">
<igctx:geometryType>
<gco:CharacterString>Polygon</gco:CharacterString>
</igctx:geometryType>
<igctx:geometricFeature>
<igctx:OtherFeature>
<igctx:featureName>
<gco:CharacterString>HA_VO</gco:CharacterString>
</igctx:featureName>
<igctx:featureDescription>
<gco:CharacterString>Hektargröße nach Vorgabe d. Erlaubnis</gco:CharacterString>
</igctx:featureDescription>
<igctx:featureDataType>
<gco:CharacterString>Integer</gco:CharacterString>
</igctx:featureDataType>
</igctx:OtherFeature>
</igctx:geometricFeature>
</igctx:MD_GeometryContext>
</gmd:spatialRepresentationInfo>
Es wird beschrieben, dass die Spalte HA_VO heißt, sie nur ganze Zahlen
(Integer) enthalten darf und HA_VO Hektargröße nach Vorgabe d. Erlaubnis bedeutet.
Wäre da jemand ohne diese Erklärung drauf gekommen?
Bei anderen Feldern ist z.B. noch erklärt, in welchem Bereich Zahlen liegen dürfen oder welche Werte erlaubt sind. Ebenfalls findet hier oft man die Erklärung zu in den Einträgen verwendeten Abkürzungen.
Ein Blick die die Shape-Datei
Die Shape-Datei liegt hier: https://umweltportal.schleswig-holstein.de/documents/lkn/Geodaten/utmsh/mod100/s_musch/samu/samu1704/samu1704.zip
Wenn man sich die heruntergeladen hat, kann man die Felder der Attributtabelle so herausbekommen:
import geopandas
df = geopandas.read_file("zip:///tmp/samu1704.zip!samu1704")
print(df.columns)
Heraus kommen diese elf Feldnamen:
['Id', 'AREA', 'PERIMETER', 'DATUMA', 'POSKEY', 'GRENZE', 'DOCNR', 'SMANR', 'NAME', 'HA_VO', 'geometry']
Es gibt also offenbar weitere Felder, die nicht beschrieben sind. Außerdem ist offenbar die Beschreibung in den ISO-Metadaten in keiner Reihenfolge.
Web Feature Service
Über den Web Feature Service (WFS) kann man auch maschinenlesbare Informationen über die Felder bekommen:
<xsd:complexType name="Saatmuschelgewinnungsanlagen_2017Type">
<xsd:complexContent>
<xsd:extension base="gml:AbstractFeatureType">
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="0" name="the_geom" nillable="true" type="gml:MultiSurfacePropertyType"/>
<xsd:element maxOccurs="1" minOccurs="0" name="Id" nillable="true" type="xsd:int"/>
<xsd:element maxOccurs="1" minOccurs="0" name="AREA" nillable="true" type="xsd:double"/>
<xsd:element maxOccurs="1" minOccurs="0" name="PERIMETER" nillable="true" type="xsd:double"/>
<xsd:element maxOccurs="1" minOccurs="0" name="DATUMA" nillable="true" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="POSKEY" nillable="true" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="GRENZE" nillable="true" type="xsd:int"/>
<xsd:element maxOccurs="1" minOccurs="0" name="DOCNR" nillable="true" type="xsd:int"/>
<xsd:element maxOccurs="1" minOccurs="0" name="SMANR" nillable="true" type="xsd:int"/>
<xsd:element maxOccurs="1" minOccurs="0" name="NAME" nillable="true" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="HA_VO" nillable="true" type="xsd:double"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
Abgesehen von der Geometrie die gleichen Felder in identischer Reihenfolge wie in der Shape-Datei. So richtig hilft uns das also nicht weiter, da auch keine weitere Informationen wie Beschreibungen oder genauer angegebene Wertebereiche ausgegeben werden.
Ausblick
Mit Python genügen drei Zeilen Code, um aus der Shape-Datei eine CSV-Datei zu machen:
import geopandas
df = geopandas.read_file("zip:///tmp/samu1704.zip!samu1704")
df.to_csv("/tmp/samu1704.csv", index=False)
Mit den Informationen aus der Shape-Datei und den ISO-Metadaten lässt sich ein umfassendes Tabellen-Schema erzeugen. Zusammen mit dem CSV-Export ergibt das komplettes Data Package.
Kommentare
Mit einem Konto im Fediverse oder auf Mastodon kannst du auf diesen Beitrag antworten. Da Mastodon dezentral funktioniert, kannst du dein bestehendes Konto auf einem Mastodon-Server oder einer kompatiblen Plattform verwenden.
Nach einem Klick auf "Lade Kommentare" werden nicht-private Antworten vom Server norden.social geladen und unten angezeigt.
Wie das technisch funktioniert, kann man hier erfahren.