• Anleitung
  • 3. August 2015

Geodaten nach TopoJSON konvertieren

TopoJSON erlaubt es Geodaten (Polygone, Linien, Punkte) sehr komprimiert zu speichern. Einmal konvertiert kann man die Geodaten dann in D3js importieren.

TopoJSON erlaubt es Geodaten (Polygone, Linien, Punkte) sehr komprimiert zu speichern. Das Beispiel verwendet eine Weltkarte von Natural Earth, welche auch wir als Grundlage für unsere Weltkarten verwenden.

Installation (Mac OS X)

  1. brew install gdal
  2. npm install -g topojson

Shapefiles zu GeoJSON umwandeln

ogr2ogr -f GeoJSON -where "SU_A3 <> 'ATA'" world.geo.json world.shp

Die Geo-Suite gdal enthält den Konverter ogr2ogr, welchen wir nutzen, um das Shapefile nach GeoJSON zu konvertieren. Mit -where "SU_A3 <> 'ATA'" wählen wir alle Länder aus, welche nicht die Antarktis sind.

Shapefiles vereinfachen

Manchmal sind Shapefiles für den gewünschten Anwendungszweck viel zu genau und oder von der Datenmenge her zu groß. Dann kann es helfen das Shapefile erst zu vereinfachen (generalisieren). Grundsätzlich beherrschen auch ogr2ogr und QGIS diese Funktionen, das Ergebnis lässt jedoch meist zu wünschen übrigen. Besser ist der Online-Konverter Mapshaper, welcher den topologieerhaltenden Douglas-Peucker oder Visvalingam-Algorithmus benutzt.

GeoJSON zu TopoJSON umwandeln

topojson --id-property SU_A3 -p name=NAME -p name -o world.topo.json world.geo.json

Da das Original-Shapefile sehr viele Attribute enthalten, welche die Ausgabedatei nur unnötig groß machen, wählen wir zwei Attribut aus, welche in das GeoJSON übernommen werden sollen. In diesem Fall ist es das ISO-Länderkürzel und der ausgeschrieben Ländername. Die passiert mit dem Parameter -p. Um alle Attribute zu übernehmen kann man den folgenden Befehl verwenden:

topojson -p -o world.topo.json world.geo.json

Es gibt auch zwei Online-Konverter, welche jedoch nur die Geometrie konvertieren und alle anderen Attribute verwerfen (Stand 07.2015)

TopoJSON darstellen

Um ein innerhalb einer Webanwendung ein TopoJSON darzustellen, kann man Leaflet mit dem Plugin Omnivore verwenden. Eine gute Anleitung dazu findet sich hier. Eine weitere Möglichkeit ist die Visualisierung mit D3. Mike Bostock hat dazu ein schönes Tutorial geschrieben.