Perbedaan antara GeoJSON dan TopoJSON

89

Apa perbedaan antara GeoJSON dan TopoJSON dan kapan saya akan menggunakannya?

The deskripsi TopoJSON pada GitHub menyiratkan file TopoJSON 80% lebih kecil. Jadi mengapa tidak menggunakan TopoJSON saja setiap saat?

Luke
sumber

Jawaban:

147

Jika Anda peduli dengan ukuran file atau topologi, gunakan TopoJSON. Jika Anda juga tidak peduli, gunakan GeoJSON demi kesederhanaan.

Keuntungan utama TopoJSON adalah ukurannya. Dengan menghilangkan redundansi dan menggunakan pengkodean bilangan bulat presisi tetap yang lebih efisien, file TopoJSON sering kali urutan besarnya lebih kecil daripada file GeoJSON. Keuntungan sekunder dari file TopoJSON adalah bahwa pengkodean topologi memiliki aplikasi yang berguna, seperti penyederhanaan pelestarian topologi (mirip dengan MapShaper ) dan pembuatan mesh otomatis (seperti dalam batas negara bagian dalam contoh choropleth ini ).

Keunggulan ini menimbulkan biaya: format file yang lebih kompleks. Dalam JavaScript, misalnya, Anda biasanya menggunakan pustaka klien TopoJSON untuk mengonversi TopoJSON menjadi GeoJSON untuk digunakan dengan alat standar seperti d3.geoPath . (Dengan Python, Anda dapat menggunakan topojson.py .) Selain itu, format integer TopoJSON memerlukan koordinat kuantisasi, yang berarti dapat menyebabkan kesalahan pembulatan jika Anda tidak berhati-hati. (Lihat dokumentasinya untuk topojson -q.)

Untuk manipulasi geometri sisi server yang tidak memerlukan topologi, maka GeoJSON mungkin adalah pilihan yang lebih sederhana. Jika tidak, jika Anda memerlukan topologi atau ingin mengirim geometri melalui kabel ke klien, gunakan TopoJSON.

mbostock.dll
sumber
2
Dan meskipun saya ingat pernah membaca tentang "segmen garis bersama", saya masih berasumsi "topo" berarti "topografi", padahal sebenarnya tidak. Berikut adalah bacaan yang bagus tentang perbedaan antara "topologi" dan "topografi" (yang pertama adalah asal dari "topo" di topojson) - dan saya harus membaca artikel Mike di sini tentang topologi menyimpulkan
The Red Pea
Saya lebih suka menggunakan geobuf selain solusi hybrid seperti toposjon saat menghubungkan kabel melalui internet.
tibetty
9

TopoJSON sangat ideal untuk fitur rapi yang "melekat" satu sama lain, seperti wilayah administratif, tetapi tidak membantu dengan data yang lebih berantakan atau organik. Jika data Anda hanya berupa poin, maka TopoJSON sama sekali tidak membantu.

sgillies
sumber
22
Bahkan saat tidak ada topologi bersama, pengkodean bilangan bulat presisi tetap TopoJSON bisa jauh lebih efisien daripada titik mengambang GeoJSON.
mbostock
16
Benar. Aku salah. Saya akan menghapus jawaban saya, tetapi kami akan kehilangan komentar berharga Anda!
sgies
Ha, terima kasih. :) Saya telah mengirimkan jawaban terpisah yang menyertakan pertimbangan tambahan.
mbostock
3

Itu tergantung banyak pertimbangan. Diantaranya adalah sebagai berikut:

1) Sifat (model data) dari fitur atau fitur yang ingin Anda wakili 2) Atribut apa pun yang ingin Anda kaitkan dengan fitur tersebut 3) Bagaimana Anda ingin fitur ini berperilaku di halaman (statis vs. dinamis)

Namun, ini adalah pertanyaan yang sulit dijawab secara abstrak. Mengenai beberapa hal spesifik, jika Anda memiliki cakupan poligon yang berdekatan atau situasi lain di mana fitur berbagi batas, model topojson memungkinkan Anda untuk mengeksploitasi redundansi dan memasukkannya ke dalam model.

Baca dokumentasinya, membedah contoh (mis., Bl.ocks.org), lalu dapatkan beberapa data dan wakili di geojson dan topojson dan buat visualisasi Anda sendiri.

wsvekla.dll
sumber
Terima kasih wsvekla. Saya telah melakukan itu - saya menemukan intisari Anda di bl.ocks.org sebenarnya ( bl.ocks.org/wsvekla/4533258 bl.ocks.org/4348435 ) tetapi tidak mudah bagi google. Namun seperti yang Anda tunjukkan, ada banyak pertimbangan dan saya mencoba menjelajahi perbandingan berdampingan untuk mempelajari ini.
Lukas
2
Kedua blok ini merujuk pada shapefile asli yang sama: bl.ocks.org/4485308 dan bl.ocks.org/4348435 . TopoJSON benar-benar mulai tenggelam ketika saya akhirnya memahami bagaimana saya dapat mewakili beberapa fitur (batas nasional, departemen, dan kota) dengan data yang sama dalam file yang sama (Anda tidak dapat melakukannya dengan geojson). Ini dicapai melalui fungsi filter: function (a, b) {return a.id! == b.id;}). Cobalah untuk memahami itu, dan topojson akan mulai masuk akal. Untuk referensi kode yang lebih baik dan minimalis, lihat blok Mike: bl.ocks.org/4108203
wsvekla