2012-06-04 3 views
6

Mit einigen D3js Code und projizierten topojson Daten auf einer Karte Datenviz von any projection, wie kann ich geokoordiniert zurück? Etwas so:D3js: Wie man Lat/Log Geocoordinaten von Mausklick erhält?

var svg = d3.select("#viz").append("svg:svg") 
.attr("width", 320) 
.attr("height", 200) 
.on("mousedown", mousedown) 
.on("click", mouselocation); 

Wie das geocordinates von einem Klick auf einer D3js Karte Visualisierung bekommen?

Links zu Demos willkommen.


Edit: eine Liste relevanter Demos:

Antwort

15

d3.mouse Verwenden der Pixelkoordinaten zu erhalten, und dann die Projektion verwenden (d3.geo.azimuthal, hier) x und y zur Länge und Breite zu invertieren. Zum Beispiel:

d3.select("svg").on("mousedown.log", function() { 
    console.log(projection.invert(d3.mouse(this))); 
}); 

Wenn Sie möchten, auf dem Hintergrund des SVG zu unterstützen, klicken, können Sie auch eine unsichtbare rect mit Zeiger-Ereignissen: alle. (Beachten Sie auch: ältere Versionen von D3 verwendeten d3.svg.mouse statt d3.mouse.)

+1

hallo danke dafür. – khinester

+0

können Sie ein Beispiel für das Hinzufügen eines unsichtbaren Rect, das anklickbar sein kann, posten? – khinester

+0

Hier ist ein aus der Galerie: http://bl.ocks.org/2206590 – mbostock

0

Jason Davies/rotate/ Verwendung von projection.invert(d3.mouse(this)) ist nett und kann einen Blick wert sein.

.on("mousedown.grab", function() { var point; if (mousePoint) point = svg.insert("path", ".foreground") .datum({type: "Point", coordinates: projection.invert(d3.mouse(this))}) .attr("class", "point") .attr("d", path); // add back the point

Verwandte Themen