2016-12-13 1 views
0

Also habe ich eine SVG, die aus Adobe Illustrator exportiert wurde (die Illustrator-Datei ist nicht mehr verfügbar). Ich habe auch eine CSV mit Daten und Koordinaten (x1, y1,x2, y2). Ich habe ctrl+f 'd für diese Werte in der SVG und keiner von ihnen sind da drin. Meine Vermutung ist, das ist, weil Adobe Illustrator alles bewegt (obwohl ich falsch liegen könnte).Element an Koordinaten in SVG auswählen

Meine Frage ist, wenn es einen Weg gibt, mit d3 oder einer anderen Bibliothek, um das Element (oder Elemente, ich weiß, SVG ist mehrschichtig) an einer gegebenen Koordinate zu bekommen. Mein Ziel ist es, die CSV-Daten zu verwenden, um einen Tooltip zu generieren. Wenn ein Benutzer über die Elemente an den in der Svg angegebenen Koordinaten schwebt, sollte er mit einigen Daten aus dem CSV herunterfallen. Irgendwelche anderen Vorschläge, wie man das erledigt?

+0

FWIW, Sie können ein SVG in Illustrator öffnen. – ray

+0

@ray ja, das ändert nichts an der Tatsache, dass die Koordinaten unterschiedlich sind –

+0

Mögliches Duplikat von [getElement nach Position?] (Http://stackoverflow.com/questions/6995736/geelement-by-position) – altocumulus

Antwort

2

Wenn Sie sagen, dass Sie "Wählen Sie ein Element durch Koordinaten" mit D3 wollen, klingt es wie ein XY problem für mich. Nicht nur weil es kompliziert ist, sondern weil Sie das wahrscheinlich nicht brauchen werden.

Wenn Sie nur einige Informationen anzeigen möchten, wenn sich die Maus an einer bestimmten Koordinate befindet, ist dies mein Vorschlag: Erstellen Sie eine Reihe transparenter Rechtecke mit Ihren CSV-Koordinaten und fügen Sie die mouseover an diese Rechtecke an:

var svg = d3.select("svg"); 
var rects = svg.selectAll(".rects") 
    .data(data) 
    .enter() 
    .append("rect") 
    .attr("opacity", 0) 
    .attr("width", d=>d.x2 - d.x1) 
    .attr("height", d=>d.y2 - d.y1) 
    .attr("x", d=>d.x1) 
    .attr("y", d=>d.y1) 
    .on("mouseover", d=>{ 
     //show your tooltip 
    }); 
+0

Warte, so Was sind X1, X2, Y1, Y2 hier? –

+0

Ich habe die Antwort mit Rechtecken anstelle von Kreisen bearbeitet. –

+0

Ah ok das macht Sinn –

Verwandte Themen