d3.js - framework - jquery d3
¿Cuál es la forma correcta de usar D3''s projection.stream()? (1)
Un hecho clave de la documentación es que "una proyección geográfica es un ejemplo de una transformación de flujo".
Las transmisiones solo permiten transformar datos (por ejemplo, proyectos) varias veces sin guardar los datos intermedios. Una proyección puede ser simplemente un objeto con un atributo de flujo, por ejemplo, proj_then_transform
continuación.
La forma de realizar transmisiones en cadena es la siguiente:
// stream 1
var proj = d3.geo.equirectangular();
// stream 2
var transform = d3.geo.transform({
point:function(x,y){this.stream.point(x+20,y+5)}
});
// stream 1 then stream 2
var proj_then_transform = {
stream: function(s) {
return proj.stream(transform.stream(s));
}
};
He actualizado el ejemplo con una solución de trabajo: http://jsfiddle.net/cvs5d7o9/2/
Así que estoy experimentando un poco con D3''s geo stream
API
D3''s geo stream
, y las cosas se sienten un poco confusas. He estado leyendo la documentación aquí:
https://github.com/mbostock/d3/wiki/Geo-Streams
Un punto de confusión que tengo es la implementación correcta de las transformaciones de flujo. Digamos que creo uno:
//a stream transform that applies a simple translate [20,5]:
var transform = d3.geo.transform({
point:function(){this.stream.point(x+20,y+5)}
})
Según la documentación, this.stream hace referencia a la "transmisión envuelta". Pero, ¿qué es la corriente, realmente? Según lo que puedo deducir, es más un procedimiento que una estructura de datos explícita: una secuencia de llamadas de datos y funciones para transformar los datos. La sintaxis anterior parece sugerir que la secuencia envuelta es simplemente el objeto que contiene " escucha de secuencia "
Continuando, puedo aplicar la transformación de la secuencia usando el método de proyección:
//a path generator with the transform applied using the projection() method
var path = d3.geo.path().projection(transform);
Si bien no entiendo muy bien la mecánica subyacente, el efecto parece relativamente sencillo: la función de transformación subyacente del generador de ruta se llama con argumentos x,y
transformados.
Para mi caso de uso, no me parece útil, especialmente porque mis datos de entrada no están ya proyectados. Me gustaría utilizar una proyección para transformar los datos primero, luego transformar esas coordenadas generadas. Para ello, ¿hay un patrón general para las transformaciones de capas?
Veo que D3
proporciona el patrón de proyección. Flujo ( oyente ) que aplica primero la transformación de proyección, antes de aplicar el oyente, pero no estoy seguro de cómo implementarlo. ¿Cuál debería ser el argumento del oyente? Aquí hay un ejemplo: http://jsfiddle.net/kv7yn8rw/2/ .
Cualquier orientación sería muy apreciada!