web-dev-qa-db-fra.com

Différence entre GeoJSON et TopoJSON

Quelle est la différence entre GeoJSON et TopoJSON et quand devrais-je utiliser l'un sur l'autre?

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

82
Luke

Si vous vous souciez de la taille du fichier ou de la topologie, utilisez TopoJSON. Si vous ne vous souciez pas non plus, utilisez GeoJSON par souci de simplicité.

Le principal avantage de TopoJSON est la taille. En éliminant la redondance et en utilisant un codage d'entier à précision fixe plus efficace, les fichiers TopoJSON sont souvent d'un ordre de grandeur plus petits 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 préservant la topologie (similaire à MapShaper ) et la génération automatique de maillage (comme dans les limites état-état dans cet exemple choroplèth ).

Ces avantages ont un coût: un format de fichier plus complexe. En JavaScript, par exemple, vous utilisez 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 de topojson -q.)

Pour la manipulation côté serveur de géométries ne nécessitant 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 câble à un client, utilisez TopoJSON.

139
mbostock

TopoJSON est idéal pour les fonctionnalités bien rangées qui "s'alignent" les unes sur les autres, comme les régions administratives, mais n'aide pas avec des données plus salissantes ou organiques. Si vos données sont simplement des points, alors TopoJSON n'est d'aucune aide.

9
sgillies

Cela dépend de nombreuses considérations. Parmi eux, 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 certaines spécificités, si vous avez une couverture polygonale contiguë ou une autre situation où 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 obtenez des données et représentez-les dans geojson et topojson et créez vos propres visualisations.

3
wsvekla