所以我用D3's geo stream
API
做了一點試驗,感覺有點朦朧。我一直在讀通過這裏的文檔:使用D3的projection.stream()的正確方法是什麼?
https://github.com/mbostock/d3/wiki/Geo-Streams
一個混亂的時候,我已經是正確執行流變換。比方說,我創建一個:
//a stream transform that applies a simple translate [20,5]:
var transform = d3.geo.transform({
point:function(){this.stream.point(x+20,y+5)}
})
每文檔,this.stream引用「包裝流。」但是什麼是真正的流?從我可以收集的信息來看,它比一個明確的數據結構 - 一系列數據和函數調用來轉換數據更像一個過程。上面的語法似乎表明,包裹流只是包含「stream listeners」
移動的物體時,我能申請流使用投影變換方法:
//a path generator with the transform applied using the projection() method
var path = d3.geo.path().projection(transform);
雖然我不不太瞭解底層機制,效果看起來相對簡單:路徑生成器的底層變換函數用變換後的參數調用。
對於我的用例,我覺得這沒有什麼幫助,特別是因爲我的輸入數據還沒有投射出來。我想先使用投影來轉換數據,然後轉換那些輸出的座標。爲此,是否有一種分層轉換的一般模式?
我看到D3
並提供projection.stream其應用突出的第一變換,將聽者之前(聽衆)的模式,但我不知道如何實現這一點。聽衆的論點應該是什麼?這裏有一個例子:http://jsfiddle.net/kv7yn8rw/2/。
任何指導,將不勝感激!
你是不是想你的投影地圖數據20像素向右移動和5px下來使用這種方法?或者當你參考分層轉換時你有更多的嘗試做什麼? – Elijah 2014-12-26 16:25:00
對不起,賞金還沒有任何答案。我開始瀏覽源代碼,但我最好的猜測是'var path2 = d3.geo.path()。projection(proj.stream(transform));'應該爲你的小提琴起作用,而且它仍然會拋出錯誤。當我有更多的時間時,我可能會再回來;我一直想要了解更多關於d3.geo方法的工作原理。 – AmeliaBR 2014-12-29 17:25:30