【发布时间】:2018-08-10 07:18:31
【问题描述】:
我正在尝试在画布中缩放地图。
var projection = d3.geoMercator()
projection.fitExtent([[margin.left, margin.top], [width, height]], land);
var path = d3.geoPath().projection(projection).context(context);
当我将翻译和缩放应用到画布上下文时,它可以完美运行。但是当我调用var latlong = projection.invert(d3.mouse(this)); 时它没有返回正确的纬度和经度,因为投影没有相应地翻译。
var zoom = d3.zoom()
.scaleExtent([1, Infinity])
.on("zoom", zoomByContext);
function zoomByContext() {
var transform = d3.event.transform;
context.clearRect(0, 0, width, height);
context.save();
context.translate(transform.x, transform.y);
context.lineWidth = 0.5 / transform.k;
context.scale(transform.k, transform.k);
renderFeature();
context.restore();
}
所以我尝试像打击一样重新投影投影。但是当我使用下面的代码进行缩放时,它会转到左上角。
var zoom = d3.zoom()
.scaleExtent([1, Infinity])
.on("zoom", zoomByProjection);
function zoomByProjection() {
var transform = d3.event.transform;
projection.translate([transform.x, transform.y]);
projection.scale(scale * transform.k);
renderFeature();
}
我已经像这样调用了缩放
canvas.call(zoom, d3.zoomIdentity
.translate(projection.translate())
.scale(projection.scale()));
【问题讨论】:
标签: javascript d3.js zooming