gpt4 book ai didi

javascript - D3 向缩放 map 添加元素

转载 作者:行者123 更新时间:2023-11-30 06:32:26 27 4
gpt4 key购买 nike

我有一张 map ,点击图例时会出现圆圈(人的起源地)。

此外,还可以放大,然后变换圆圈(和国家路径)(使用 d3.behavior.zoom)。

不过,如果我先放大,然后单击图例,圆圈不会出现在正确的位置。我怎样才能解决这个问题并将它们附加到正确的坐标(在缩放 map 内)。

有什么想法吗?我确定解决方案并不那么困难,但我被困住了。

有关示例,请参阅 ( http://wahrendorf.de/circlemapping/world_question.html)。

谢谢,

莫腾

最佳答案

绘制圆圈时需要考虑 d3.event.translated3.event.scale。最简单的方法是分解出缩放函数,以便它可以被圆形绘图函数调用。

var translate = [0,0];
var scale = 1;
var zoom_function = function() {
canvas.selectAll("path")
.attr("transform","translate("+translate.join(",")+")scale("+scale+")");

canvas.selectAll("circle.origin")
.attr("transform","translate("+translate.join(",")+")scale("+scale+")")
.attr("r", function(d) { return radius/scale; });
};
var zoom = d3.behavior.zoom().scaleExtent([1,6])
.on("zoom",function() {
translate = d3.event.translate;
scale = d3.event.scale;
zoom_function();
});

// ... The rest of the code ...

canvas.append("text")
.text("show circles")
.attr("x", 30 ) .attr("y", 480 )
.attr("dy", ".35em")
.on("click", function(d) {
/// load data with long/lat of circles
d3.csv("./World_files/places_q.csv", function(error, origin) {
canvas.selectAll("circle.origin").remove();
canvas.selectAll("circle.origin")
.data(origin)
.enter()
.append("circle")
.attr("cx", function(d) {return projection([d.originlong, d.originlat])[0];})
.attr("cy", function(d) {return projection([d.originlong, d.originlat])[1];})
.attr("r", 2)
.style("fill", "red")
.style("opacity", 0.5)
.attr("class", "origin");
// Call the zoom function here to fix the placement of the circles.
zoom_function();
});
});

您将需要跟踪最后已知的 d3.event.translated3.event.scale 值,因为在您绘制圆圈时它们是未定义的。

关于javascript - D3 向缩放 map 添加元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16721365/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com