所以我在做一些实验D3's geo stream
API
,感觉有点朦胧。我一直在阅读这里的文档:
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引用了“包装流”。但什么是流,真的吗?据我所知,它更像是一个过程,而不是显式的数据结构——一系列数据和函数调用来转换数据。上面的语法似乎表明包装的流只是包含“流侦听器” 的对象
继续前进,我可以使用投影方法应用流变换:
//a path generator with the transform applied using the projection() method
var path = d3.geo.path().projection(transform);
虽然我不太了解底层机制,但效果似乎相对简单:路径生成器的底层变换函数是使用变换x,y
参数调用的。
对于我的用例,我觉得这没什么用,特别是因为我的输入数据还没有被投影。我想先使用投影来转换数据,然后再转换那些输出的坐标。为此,是否有分层变换的通用模式?
我看到它D3
确实提供了在应用侦听器之前首先应用投影变换的 projection.stream( listener ) 模式,但我不确定如何实现这一点。侦听器参数应该是什么?这是一个例子:http: //jsfiddle.net/kv7yn8rw/2/。
任何指导将不胜感激!