所以我用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