【发布时间】:2019-08-23 12:29:39
【问题描述】:
我正在尝试使用d3 tile 和d3 zoom 创建平铺地图。我已将zoom.extent 和zoom.translateExtent 都设置为[[0,0], [width,height]]。但是当我缩放时,地图会跳到左上角。
这里是示例代码
const tile = d3.tile()
.extent([[0, 0], [width, height]])
.tileSize(512);
const zoom = d3.zoom()
.translateExtent([[0, 0], [width, height]]) // issue in this line
.extent([[0, 0], [width, height]])
.scaleExtent([1 << 10, 1 << 15])
.on("zoom", () => zoomed(d3.event.transform));
// applied zoom like this
svg
.call(zoom)
.call(zoom.transform, d3.zoomIdentity
.translate(width / 2, height / 2)
.scale(-initialScale)
.translate(...projection(initialCenter))
.scale(-1));
function zoomed(transform) {
projection
.scale(transform.k / (2 * Math.PI))
.translate([transform.x, transform.y]);
}
【问题讨论】:
-
试图统一缩放、投影、地理、屏幕和平铺坐标,足以让人抓狂。几天后我会看看——现在在路上,下周晚些时候回家,但是单位清晰度的问题促使我创建了一个alternative(当然还没有完成,更多的是演示什么可能 - d3.tile 现在更好(早期版本有点麻烦),但单位在清晰度方面仍有一些不足)
-
感谢@AndrewReid 的评论。在您的 d3-slippy 中,您有一个方法
zoomTranslateConstrain我已将其传递给 d3 zoom。在我的情况下会做同样的工作吗?
标签: javascript d3.js zooming