【发布时间】:2015-06-20 21:44:25
【问题描述】:
我有一个用 topojson.js 构建的 D3js 地图。
var projection = d3.geo.mercator();
一切正常,但我正在寻找一种我无法实现的效果。什么时候,缩放地图我希望它上面的图钉按比例缩小,但如果我按比例缩小,我需要重新计算它们的坐标,我找不到这样做的公式。
缩放处理程序
scale = d3.event.scale;
if (scale >= 1) {
main.attr("transform", "translate(" + d3.event.translate + ")
scale(" + d3.event.scale + ")");
}
else {
main.attr("transform", "translate(" + d3.event.translate + ")scale(1)");
}
//43x49 is the size initial pine size when scale = 1
var pins = main.select("#pins").selectAll("g").select("image")
.attr("width", function () {
return 43 - (43 * (scale - 1));
})
.attr("height", function () {
return 49 - (49 * (scale - 1));
})
.attr("x", function () {
//Calculate new image coordinates;
})
.attr("y", function () {
//Calculate new image coordinates;
});
我的问题是:如何根据新比例计算 x 和 y?
我希望我已经足够清楚了。
感谢您的帮助
编辑:
初始引脚坐标的计算:
"translate(" + (projection([d.lon, d.lat])[0] - 20) + ","
+ (projection([d.lon, d.lat])[1] - 45) + ")"
-20 和 -45 使大头针的尖端正对目标。
【问题讨论】:
-
你能说明你是如何计算初始 ping 位置的吗?如果引脚在
main内(我假设它是g或svg元素),那么当您scale容器时,您根本不需要更改x和y。此外,您可能想要设置scaleExtent,而不是手动检查scale >= 1。这也会为您提供更好的行为(即,如果用户缩小太多,则缩放不会出现滞后现象)。 -
你是对的,一切都在主要的。并且引脚在缩放时工作正常,但它们变得太大,所以我想在缩放时缩小它们。但是我不知道如何重新计算“counter-scale”之后的坐标。
标签: javascript jquery d3.js geo