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)
brew install gdal
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.