我有一个带引脚标记的D3.js Datamaps.js地图,我一直在努力实现缩放。
图像引脚标记为20x20,引脚的点(x + 10,y + 20)超过所选的纬度/经度点。
我在缩放地图时遇到问题,图像从相对位置漂移。例如:看看冰岛的针脚。当你放大它向左和向左漂移。
在缩放和点击拖动地图时,如何使针脚保持相同的尺寸和相同的相对位置?
我找了其他的例子,我只是不确定我错过了什么。也许视口大小需要添加到计算soemhow中。或者可能需要从默认值更改引脚标记的原点。我只是不确定。
答案 0 :(得分:3)
您的原始计算使用标记的宽度/高度为20x20
像素:
return latLng[0] - 10;
你的" recalcs"需要对调整大小的图像执行此操作。我会藏匿"真实" x / y positoin在您的数据中,因此您可以重新执行计算:
datum.realx = latLng[0];
if ( latLng ) return latLng[0] - 10;
然后在缩放处理程序中移动它们:
map.svg.selectAll("image")
.attr("height", 20*(1/scale))
.attr("width", 20*(1/scale))
.attr("x", function(d){
return d.realx - (20*(1/scale)/2);
})
.attr("y", function(d){
return d.realy - (20*(1/scale));
});