Итак, я немного экспериментирую с D3 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/.
Любое руководство будет принята с благодарностью!