Unterschied zwischen GeoJSON und TopoJSON


Antworten:


145

Wenn Sie sich für die Dateigröße oder Topologie interessieren, verwenden Sie TopoJSON. Wenn Sie sich auch nicht darum kümmern, verwenden Sie der Einfachheit halber GeoJSON.

Der Hauptvorteil von TopoJSON ist die Größe. Durch die Beseitigung von Redundanz und die Verwendung einer effizienteren Ganzzahlcodierung von Koordinaten mit fester Genauigkeit sind TopoJSON-Dateien häufig um eine Größenordnung kleiner als GeoJSON-Dateien. Der sekundäre Vorteil von TopoJSON-Dateien besteht darin, dass die Codierung der Topologie nützliche Anwendungen bietet, z. B. die Vereinfachung der Topologieerhaltung (ähnlich wie bei MapShaper ) und die automatische Netzgenerierung (wie bei den Status-Status-Grenzen in diesem Beispiel Choroplethen ).

Diese Vorteile sind mit Kosten verbunden: einem komplexeren Dateiformat. In JavaScript verwenden Sie beispielsweise normalerweise die TopoJSON-Clientbibliothek , um TopoJSON in GeoJSON zu konvertieren und mit Standardtools wie d3.geoPath zu verwenden . (In Python können Sie topojson.py verwenden .) Außerdem erfordert das Ganzzahlformat von TopoJSON die Quantisierung von Koordinaten. Dies bedeutet, dass es zu Rundungsfehlern kommen kann, wenn Sie nicht vorsichtig sind. (Siehe Dokumentation für topojson -q.)

Für die serverseitige Bearbeitung von Geometrien, für die keine Topologie erforderlich ist, ist GeoJSON wahrscheinlich die einfachere Wahl. Andernfalls verwenden Sie TopoJSON, wenn Sie eine Topologie benötigen oder die Geometrie über den Draht an einen Client senden möchten.


2
Und obwohl ich mich daran erinnerte, über "gemeinsame Liniensegmente" gelesen zu haben, nahm ich an, dass "topo" für "Topographie" steht, was nicht der Fall ist. Hier ist eine schöne Lektüre über den Unterschied zwischen "Topologie" und "Topographie" (ersteres ist der Ursprung von "Topo" in Topojson) - und ich muss hier Mikes Artikel über die Schlussfolgerung der Topologie
The Red Pea

Ich würde es vorziehen, andere Geobuf als solche Hybridlösungen wie Toposjon zu verwenden, wenn wir über das Internet verkabeln.
Tibetty

9

TopoJSON ist ideal für aufgeräumte Funktionen, die wie Verwaltungsregionen aneinander "einrasten", aber nicht bei unordentlicheren oder organischeren Daten helfen. Wenn Ihre Daten nur Punkte sind, ist TopoJSON überhaupt keine Hilfe.


21
Selbst wenn keine gemeinsame Topologie vorhanden ist, kann die Ganzzahlcodierung mit fester Genauigkeit von TopoJSON wesentlich effizienter sein als das Gleitkomma von GeoJSON.
mbostock

14
Wahr. Ich liege falsch. Ich würde meine Antwort löschen, aber wir würden Ihren wertvollen Kommentar verlieren!
Sgillies

Ha, danke. :) Ich habe eine separate Antwort eingereicht, die zusätzliche Überlegungen enthält.
mbostock

3

Es hängt von vielen Überlegungen ab. Unter ihnen sind die folgenden:

1) Die Art (Datenmodell) des Features oder der Features, die Sie darstellen möchten 2) Alle Attribute, die Sie diesen Features zuordnen möchten 3) Wie sich diese Features auf der Seite verhalten sollen (statisch vs. dynamisch)

Diese Frage ist jedoch abstrakt schwer zu beantworten. In Bezug auf einige Besonderheiten können Sie mit dem Modell von topojson die Redundanz ausnutzen und diese in das Modell einbeziehen, wenn Sie eine zusammenhängende Polygonabdeckung oder eine andere Situation haben, in der Features Grenzen gemeinsam haben.

Lesen Sie die Dokumentation, sezieren Sie Beispiele (z. B. bl.ocks.org), holen Sie sich einige Daten und stellen Sie sie sowohl in Geojson als auch in Topojson dar. Erstellen Sie Ihre eigenen Visualisierungen.


Danke wsvekla. Ich habe das getan - ich habe Ihre Inhalte auf bl.ocks.org gefunden ( bl.ocks.org/wsvekla/4533258 bl.ocks.org/4348435 ), aber nicht einfach zu googeln. Wie Sie jedoch betonen, gibt es viele Überlegungen, und ich versuche, Vergleiche nebeneinander zu untersuchen, um dies zu lernen.
Luke

2
Diese beiden Blöcke verweisen auf dasselbe ursprüngliche Shapefile: bl.ocks.org/4485308 und bl.ocks.org/4348435 . TopoJSON begann sich wirklich zu etablieren, als ich endlich begriff, wie ich mehrere Features (nationale, abteilungs- und kommunale Grenzen) mit denselben Daten in derselben Datei darstellen konnte (das kann man mit Geojson nicht machen). Dies wird durch die Filterfunktion erreicht: Funktion (a, b) {return a.id! == b.id;}). Versuchen Sie das zu verstehen, und Topojson wird langsam Sinn machen. Für eine bessere Code-Referenz und einen bloßen Minimalismus siehe Mikes Block: bl.ocks.org/4108203
wsvekla
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.