我有一个D3js地图用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具有对目标的销权的提示。
能告诉你,你是如何计算初始平位置?如果引脚位于'main'内(我认为它是一个'g'或'svg'元素),那么当您缩放容器时,根本不需要更改'x'和'y'。此外,您可能需要设置[scaleExtent](https://github.com/mbostock/d3/wiki/Zoom-Behavior#scaleExtent),而不是手动检查“scale> = 1”。这会给你一个更好的行为(即如果用户缩小太多,在缩放时不会有滞后现象)。 –
你是对的,一切都在主线上。并且这些引脚在缩放时工作正常,但它们变得太大,所以我想在缩放时缩小它们。但是我不知道如何在“反比例”之后重新计算坐标。 – Yoann