Różnica między GeoJSON i TopoJSON


89

Jaka jest różnica między GeoJSON i TopoJSON i kiedy powinienem używać jednego nad drugim?

Opis TopoJSON na GitHub implikuje pliki TopoJSON są 80% mniejsze. Dlaczego więc po prostu nie używać TopoJSON przez cały czas?

Odpowiedzi:


147

Jeśli zależy Ci na rozmiarze pliku lub topologii, użyj TopoJSON. Jeśli nie dbasz o to, użyj GeoJSON dla uproszczenia.

Podstawową zaletą TopoJSON jest rozmiar. Eliminując nadmiarowość i stosując bardziej wydajne kodowanie współrzędnych liczb całkowitych o stałej precyzji, pliki TopoJSON są często o rząd wielkości mniejsze niż pliki GeoJSON. Dodatkową zaletą plików TopoJSON jest to, że kodowanie topologii ma przydatne aplikacje, takie jak uproszczenie z zachowaniem topologii (podobne do MapShaper ) i automatyczne generowanie siatki (jak w przypadku granic stanu w tym przykładzie choropleth ).

Te zalety mają swoją cenę: bardziej złożony format plików. Na przykład w języku JavaScript typowo używasz biblioteki klienta TopoJSON do konwersji TopoJSON do GeoJSON w celu użycia ze standardowymi narzędziami, takimi jak d3.geoPath . (W Pythonie można użyć topojson.py ). Ponadto format liczb całkowitych TopoJSON wymaga kwantyzacji współrzędnych, co oznacza, że ​​może wprowadzić błąd zaokrąglania, jeśli nie będziesz ostrożny. (Zobacz dokumentację topojson -q).

W przypadku manipulacji geometriami po stronie serwera, które nie wymagają topologii, GeoJSON jest prawdopodobnie prostszym wyborem. W przeciwnym razie, jeśli potrzebujesz topologii lub chcesz wysłać geometrię do klienta, użyj TopoJSON.


2
I chociaż pamiętałem, że czytałem o „wspólnych odcinkach linii”, nadal założyłem, że „topo” oznacza „topografię”, a tak nie jest. Oto miła lektura o różnicy między „topologią” a „topografią” (ta pierwsza jest źródłem „topo” w topojsonie) - i będę musiał przeczytać artykuł Mike'a o wnioskach o topologii
The Red Pea

Wolałbym korzystać z geobuf innego niż takie rozwiązania hybrydowe, jak toposjon, gdy przesyłane są przez internet.
Tibetty

9

TopoJSON jest idealny dla uporządkowanych funkcji, które „łączą się” ze sobą, na przykład regiony administracyjne, ale nie pomagają w przypadku bardziej niechlujnych lub organicznych danych. Jeśli Twoje dane to po prostu punkty, TopoJSON w ogóle nie pomoże.


22
Nawet jeśli nie ma współdzielonej topologii, kodowanie liczb całkowitych o stałej precyzji TopoJSON może być znacznie bardziej wydajne niż zmiennoprzecinkowe GeoJSON.
mbostock,

16
Prawdziwe. Nie mam racji. Usunąłbym swoją odpowiedź, ale stracilibyśmy Twój cenny komentarz!
sgillies,

Ha, dzięki. :) Przesłałem osobną odpowiedź, która zawiera dodatkowe uwagi.
mbostock

3

To zależy od wielu czynników. Wśród nich są:

1) Charakter (model danych) funkcji lub funkcji, które chcesz przedstawić 2) Wszelkie atrybuty, które chcesz powiązać z tymi funkcjami 3) Jak chcesz, aby te funkcje zachowywały się na stronie (statyczne a dynamiczny)

Jednak odpowiedź na to pytanie jest abstrakcyjna. Jeśli chodzi o niektóre szczegóły, jeśli masz ciągłe pokrycie wieloboków lub inną sytuację, w której elementy dzielą granice, model topojsona pozwala wykorzystać nadmiarowość i uwzględnić to w modelu.

Przeczytaj dokumentację, przeanalizuj przykłady (np. Bl.ocks.org), a następnie pobierz trochę danych i przedstaw je zarówno w geojson, jak i topojson i utwórz własne wizualizacje.


Dzięki wsvekla. Robiłem to - w rzeczywistości znalazłem twoje punkty na bl.ocks.org ( bl.ocks.org/wsvekla/4533258 bl.ocks.org/4348435 ), ale nie jest to łatwe do wyszukania w Google. Jednak, jak zauważyłeś, istnieje wiele rozważań i staram się zbadać porównania obok siebie, aby się tego nauczyć.
Łukasz,

2
Te dwa bloki odnoszą się do tego samego oryginalnego pliku shapefile : bl.ocks.org/4485308 i bl.ocks.org/4348435 . TopoJSON naprawdę zaczął się zagłębiać, kiedy w końcu zrozumiałem, jak mogę przedstawić wiele obiektów (granice krajowe, wydziałowe i miejskie) z tymi samymi danymi w tym samym pliku (nie możesz tego zrobić z geojson). Jest to realizowane poprzez funkcję filtrującą: function (a, b) {return a.id! == b.id;}). Spróbuj to zrozumieć, a topojson zacznie mieć sens. Aby uzyskać lepsze odniesienie do kodu i czysty
wsvekla
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.