Différence entre GeoJSON et TopoJSON

89

Quelle est la différence entre GeoJSON et TopoJSON et quand est-ce que j'utiliserais l'un sur l'autre?

La description de TopoJSON sur GitHub implique que les fichiers TopoJSON sont 80% plus petits. Alors pourquoi ne pas simplement utiliser TopoJSON tout le temps?

Luke
la source

Réponses:

147

Si vous vous souciez de la taille ou de la topologie du fichier, utilisez TopoJSON. Si vous ne vous souciez pas de l'un ou de l'autre, utilisez GeoJSON par souci de simplicité.

Le principal avantage de TopoJSON est la taille. En éliminant la redondance et en utilisant un codage entier à précision fixe plus efficace des coordonnées, les fichiers TopoJSON sont souvent d'un ordre de grandeur plus petit que les fichiers GeoJSON. L'avantage secondaire des fichiers TopoJSON est que l'encodage de la topologie a des applications utiles, telles que la simplification de la préservation de la topologie (similaire à MapShaper ) et la génération automatique de maillage (comme dans les limites état-état dans cet exemple choropleth ).

Ces avantages ont un coût: un format de fichier plus complexe. En JavaScript, par exemple, vous utiliseriez généralement la bibliothèque cliente TopoJSON pour convertir TopoJSON en GeoJSON pour une utilisation avec des outils standard tels que d3.geoPath . (En Python, vous pouvez utiliser topojson.py .) De plus, le format entier de TopoJSON nécessite des coordonnées de quantification, ce qui signifie qu'il peut introduire une erreur d'arrondi si vous ne faites pas attention. (Voir la documentation pour topojson -q.)

Pour la manipulation côté serveur de géométries qui ne nécessitent pas de topologie, GeoJSON est probablement le choix le plus simple. Sinon, si vous avez besoin d'une topologie ou si vous souhaitez envoyer la géométrie sur le fil à un client, utilisez TopoJSON.

mbostock
la source
2
Et même si je me souviens avoir lu sur les «segments de ligne partagés», j'ai quand même supposé que «topo» signifiait «topographie», ce qui n'est pas le cas. Voici une belle lecture sur la différence entre «topologie» et «topographie» (le premier est à l'origine de «topo» dans topojson) - et je vais devoir lire l'article de Mike ici sur la déduction de la topologie
The Red Pea
Je préférerais utiliser geobuf autre que des solutions hybrides telles que le toposjon lorsque le fil est sur Internet.
tibetty
9

TopoJSON est idéal pour les fonctionnalités ordonnées qui «s'alignent» les unes sur les autres, comme les régions administratives, mais n'aide pas avec des données plus désordonnées ou organiques. Si vos données ne sont que des points, alors TopoJSON ne vous aide pas du tout.

sgillies
la source
22
Même en l'absence de topologie partagée, le codage d'entiers à précision fixe de TopoJSON peut être considérablement plus efficace que le codage à virgule flottante de GeoJSON.
mbostock
16
Vrai. J'ai tort. Je supprimerais ma réponse, mais nous perdrions votre précieux commentaire!
sgillies
Ha, merci. :) J'ai soumis une réponse distincte qui comprend des considérations supplémentaires.
mbostock
3

Cela dépend de nombreuses considérations. Parmi eux se trouvent les suivants:

1) La nature (modèle de données) de la ou des fonctionnalités que vous souhaitez représenter 2) Tous les attributs que vous souhaitez associer à ces fonctionnalités 3) Comment vous souhaitez que ces fonctionnalités se comportent sur la page (statique vs dynamique)

Cependant, c'est une question difficile à répondre dans l'abstrait. En ce qui concerne certains détails, si vous avez une couverture de polygones contigus ou une autre situation dans laquelle les entités partagent des limites, le modèle de topojson vous permet d'exploiter la redondance et de la prendre en compte dans le modèle.

Lisez la documentation, disséquez des exemples (par exemple, bl.ocks.org), puis récupérez des données et représentez-les dans geojson et topojson et créez vos propres visualisations.

wsvekla
la source
Merci wsvekla. Je l'ai fait - j'ai trouvé le vôtre sur bl.ocks.org en fait ( bl.ocks.org/wsvekla/4533258 bl.ocks.org/4348435 ) mais pas facile à google. Cependant, comme vous le faites remarquer, il y a beaucoup de considérations et j'essaie d'explorer des comparaisons côte à côte pour apprendre cela.
Luc
2
Ces deux blocs font référence au même fichier de formes d'origine: bl.ocks.org/4485308 et bl.ocks.org/4348435 . TopoJSON a vraiment commencé à sombrer lorsque j'ai finalement compris comment je pouvais représenter plusieurs entités (frontières nationales, départementales et municipales) avec les mêmes données dans le même fichier (vous ne pouvez pas faire cela avec geojson). Ceci est accompli grâce à la fonction de filtrage: function (a, b) {return a.id! == b.id;}). Essayez de comprendre cela, et topojson commencera à avoir un sens. Pour une meilleure référence de code et un minimalisme nu, voir le bloc de Mike: bl.ocks.org/4108203
wsvekla