GeoJSON ve TopoJSON arasındaki fark


Yanıtlar:


150

Dosya boyutu veya topolojiye önem veriyorsanız, TopoJSON kullanın. İkisini de umursamıyorsanız, basitlik uğruna GeoJSON kullanın.

TopoJSON'un birincil avantajı boyuttur. Artıklığı ortadan kaldırarak ve koordinatların daha verimli sabit hassasiyetli tamsayı kodlamasını kullanarak, TopoJSON dosyaları genellikle GeoJSON dosyalarından daha küçük bir büyüklük sırasına sahiptir. TopoJSON dosyalarının ikincil avantajı, topolojiyi kodlamanın, topolojiyi koruyan basitleştirme ( MapShaper'a benzer ) ve otomatik ağ oluşturma ( bu örnekteki choropleth durum-durum sınırlarında olduğu gibi) gibi yararlı uygulamalara sahip olmasıdır .

Bu avantajların bir bedeli vardır: daha karmaşık bir dosya biçimi. JavaScript, örneğin, genellikle kullandığınız ediyorum TopoJSON istemci kitaplığı gibi standart araçlar ile kullanım için GeoJSON için TopoJSON dönüştürmek d3.geoPath . (Python'da, topojson.py'yi kullanabilirsiniz .) Ayrıca, TopoJSON'un tamsayı formatı, koordinatların nicelleştirilmesini gerektirir, bu da dikkatli değilseniz yuvarlama hatası verebileceği anlamına gelir. (İle ilgili belgelere bakın topojson -q.)

Topoloji gerektirmeyen geometrilerin sunucu tarafında manipülasyonu için GeoJSON muhtemelen daha basit bir seçimdir. Aksi takdirde, topolojiye ihtiyacınız varsa veya geometriyi kablo üzerinden bir istemciye göndermek istiyorsanız, TopoJSON'u kullanın.


2
"Paylaşılan çizgi parçaları" hakkında bir şeyler okuduğumu hatırlamama rağmen, "topo" nun "topografya" anlamına geldiğini varsaydım ki, öyle değil. Burada "topoloji" ve "topografya" arasındaki fark hakkında güzel bir okuma var (ilki, topojson'daki "topo" nun kökenidir) - ve Mike'ın topoloji çıkarımıyla ilgili
The Red Pea

İnternet üzerinden kablo bağlarken toposjon gibi hibrit çözümler dışında geobuf kullanmayı tercih ederim .
tibetty

10

TopoJSON, idari bölgeler gibi birbirine "yapışan", ancak daha dağınık veya organik verilere yardımcı olmayan düzenli özellikler için idealdir. Verileriniz basitçe noktalardan ibaretse, TopoJSON hiç yardımcı olmaz.


23
Paylaşılan bir topoloji olmadığında bile, TopoJSON'un sabit hassasiyetli tamsayı kodlaması, GeoJSON'un kayan noktasından önemli ölçüde daha verimli olabilir.
mbostock

17
Doğru. Hatalıyım. Cevabımı silerdim ama değerli yorumunuzu kaybedeceğiz!
sgillies

Ha, teşekkürler. :) Ek hususları içeren ayrı bir yanıt gönderdim.
mbostock

3

Pek çok düşünceye bağlıdır. Bunlar arasında şunlar yer almaktadır:

1) Temsil etmek istediğiniz özelliğin veya özelliklerin doğası (veri modeli) 2) Bu özelliklerle ilişkilendirilmesini istediğiniz tüm özellikler 3) Bu özelliklerin sayfada nasıl davranmasını istediğiniz (statik ve dinamik)

Ancak, bu soyut olarak cevaplanması zor bir sorudur. Bazı özelliklerle ilgili olarak, bitişik bir çokgen kapsamınız varsa veya özelliklerin sınırları paylaştığı başka bir durum varsa, topojson'ın modeli artıklıktan yararlanmanıza ve bunu modele dahil etmenize izin verir.

Belgeleri okuyun, örnekleri inceleyin (ör. Bl.ocks.org) ve ardından bazı veriler alın ve bunları hem geojson hem de topojson'da temsil edin ve kendi görselleştirmelerinizi oluşturun.


Teşekkürler wsvekla. Bunu yapıyordum - aslında bl.ocks.org'da ( bl.ocks.org/wsvekla/4533258 bl.ocks.org/4348435 ) ana fikirlerinizi buldum ama google için kolay değil. Bununla birlikte, belirttiğiniz gibi, dikkate alınması gereken pek çok nokta var ve bunu öğrenmek için yan yana karşılaştırmaları keşfetmeye çalışıyorum.
Luke

2
Bu iki blok aynı orijinal şekil dosyasına referans veriyor : bl.ocks.org/4485308 ve bl.ocks.org/4348435 . TopoJSON, aynı dosyadaki aynı verilerle birden çok özelliği (ulusal, departman ve belediye sınırları) nasıl temsil edebileceğimi nihayet kavradığımda gerçekten işe yaramaya başladı (bunu geojson ile yapamazsınız). Bu, filtre işlevi aracılığıyla gerçekleştirilir: function (a, b) {return a.id! == b.id;}). Bunu anlamaya çalışın ve topojson bir anlam ifade etmeye başlayacaktır. Daha iyi kod referansı ve yalın minimalizm için Mike'ın bloğuna bakın: bl.ocks.org/4108203
wsvekla
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.