D3 ile bir haritada enlem-boylam koordinatlarını nasıl oluşturabilirim?


16

Amerika Birleşik Devletleri haritasının üstündeki keyfi enlem-boylam koordinat kümelerinin noktalarını üst üste koymaya çalışıyorum.

Şimdiye kadar D3 kartografisi örneğini buldum , ancak X'e noktalar yerleştirmeye çalıştığımda, Y piksel koordinatları tuvalden çok uzakta görünüyorlar. Ben buldunuz d3 koordinat sistemleri dahil workshot ders notlarını , ama hala haritanızda nasıl olsun enlem / boylam coords emin değilim.

Şimdiye kadar sahip olduğum şey bu (hemen hemen sadece ABD'nin bir haritası)

Bu çalışmanın nasıl yapılacağına dair tavsiyeler çok takdir edilecektir!


d3 svg doğru mu?
Mapperz

Evet, d3 svg'dir.
Jay Taylor

1
Svg'yi haritaya dönüştürmenin iyi bir örneği burada - github.com/kartograph/kartograph.py/wiki/… Path and Measures kullanarak
Mapperz

Yanıtlar:


16

Noktalarınızın enlemesini ve uzunluğunu haritaya yansıtmak için bir projeksiyon () fonksiyonuna sahip olmanız gerekir. Varsayılan olarak, bir d3 coğrafi yolu albersUsa projeksiyonunu kullanır, böylece açıkça bildirebilirsiniz:

var projection = d3.geo.albersUsa();

Bunun AlbersUsa kullanmayan örneklerde yapıldığını göreceksiniz ve projeksiyonu tanımlayarak değiştirebilirsiniz. Tanımlanması onu bir işlev olarak kullanılabilir kılar. Bu şekilde puanlarınızı svg daireler olarak yerleştirebilirsiniz:

svg.append("circle").attr("r",5).attr("transform", function() {return "translate(" + projection([-75,43]) + ")";});

Bu New York'un sert çevresine bir çember bırakmalıdır. Daha sonra "lat" ve "long" içeren verileri öznitelik olarak bağlayabilirsiniz, bu durumda şöyle görünür:

 svg.selectAll("circles.points")
.data(yourData)
.enter()
.append("circle")
.attr("r",5)
.attr("transform", function(d) {return "translate(" + projection([d.long,d.lat]) + ")";});

Yansıtma işlevi [uzun, enlem] dizisini alır ve dönüştürme, çevirme () sözdizimine iyi uyan bir [x, y] dizisi döndürür veya diziyi x ve y değerleri için bölebilirsiniz.

Aşağıdaki örnek, polileri, çizgileri ve noktaları yerleştirir ve bir csv'den noktaları alır ve bunları bir haritaya yansıtır, ancak g öğesini dönüştürdüğünü ve bu öğeye bir daire eklediğini unutmayın (ayrıca bir etiket veya başka yönler de isteyebilirsiniz tümü öngörülen g öğesine eklenecek bir siteye):

https://gist.github.com/4414107 http://bl.ocks.org/d/4414107/

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.