Also experimentiere ich ein bisschen mit D3's geo stream
API
, und die Dinge fühlen sich ein wenig verschwommen. Ich habe hier durch die Dokumentation gelesen:Was ist die richtige Art, D3 project.stream() zu verwenden?
https://github.com/mbostock/d3/wiki/Geo-Streams
Ein Punkt der Verwirrung ich habe, ist die ordnungsgemäße Durchführung des Strom verwandelt. Sagen wir, ich schaffen ein:
//a stream transform that applies a simple translate [20,5]:
var transform = d3.geo.transform({
point:function(){this.stream.point(x+20,y+5)}
})
Per Dokumentation, this.stream verweist auf den "wrapped Strom." Aber was ist der Strom wirklich? Von dem, was ich sammeln kann, ist es eher eine Prozedur als eine explizite Datenstruktur - eine Folge von Daten- und Funktionsaufrufen, um die Daten zu transformieren. Die Syntax scheint oben zu legen nahe, dass der umhüllte Strom ist einfach das Objekt enthält „stream listeners“
Umzug auf, ich bin in der Lage, den Strom anwenden verwandle die Projektionsmethode:
//a path generator with the transform applied using the projection() method
var path = d3.geo.path().projection(transform);
Während ich don‘ Um die zugrunde liegende Mechanik zu verstehen, scheint der Effekt relativ einfach zu sein: Die zugrundeliegende Transformationsfunktion des Pfadgenerators wird mit transformierten x,y
Argumenten aufgerufen.
Für meinen Anwendungsfall finde ich das nicht hilfreich, insbesondere weil meine Eingabedaten nicht bereits projiziert werden. Ich würde gerne eine Projektion verwenden, um die Daten zuerst zu transformieren und dann diese ausgegebenen Koordinaten zu transformieren. Gibt es zu diesem Zweck ein allgemeines Muster für Schichttransformationen?
Ich sehe, dass D3
die projection.stream bereitstellt (Zuhörer) Muster, das zuerst die vorstehende Transformation gilt, vor dem Zuhörer der Anwendung, aber ich bin nicht sicher, wie dies zu implementieren. Was sollte das Argument des Zuhörers sein? Hier ein Beispiel: http://jsfiddle.net/kv7yn8rw/2/.
Jede Anleitung würde sehr geschätzt werden!
Versuchen Sie, Ihre projizierten Kartendaten 20px nach rechts zu bewegen und 5px runter mit dieser Methode? Oder versuchen Sie mehr, wenn Sie sich auf Layer-Transformationen beziehen? – Elijah
Entschuldigung, das Kopfgeld hat keine Antworten generiert. Ich fing an, den Quellcode durchzusehen, aber meine beste Vermutung war, dass 'var path2 = d3.geo.path() .projection (proj.tream (transform));' sollte für Ihre Geige arbeiten, und es war immer noch Fehler werfen. Ich könnte wiederkommen, wenn ich mehr Zeit habe; Ich wollte mehr darüber lernen, wie die d3.geo-Methoden funktionieren. – AmeliaBR