You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过D3获取SVG与GeoJSON地图的缩放级别并打印到控制台

获取D3.js地图的缩放级别并打印到控制台

咱们直接针对你的需求来修改代码——要实现滚动任意地图时打印缩放级别,得分别处理SVG草图地图和GeoJSON度量地图的缩放事件,因为它们用了不同版本的D3 Zoom API(一个是v3的d3.behavior.zoom,一个是v4+的d3.zoom)。

1. 处理SVG草图地图的缩放级别

在你的sketchMapZoomed函数里,直接通过d3.event.scale拿到当前缩放级别,然后打印到控制台就行:

function sketchMapZoomed() {
  svg.selectAll("*").attr("transform", "translate(" + d3.event.translate + ")" + " scale(" + d3.event.scale + ")")
  // 新增:打印草图地图的缩放级别
  console.log("Sketch Map Zoom Level:", d3.event.scale);
}

2. 处理GeoJSON度量地图的缩放级别

对于v4+版本的d3.zoom,缩放级别存在d3.event.transform.k属性里,修改metricMapZoomed函数:

function metricMapZoomed () {
  svg.attr("transform", d3.event.transform)
  // 新增:打印度量地图的缩放级别
  console.log("Metric Map Zoom Level:", d3.event.transform.k);
}

完整修改后的关键代码片段

SVG草图地图部分

d3.xml("img/sketch_all_in_components_web.svg").mimeType("image/svg+xml").get(function(error, xml) {
  if (error) throw error;
  function sketchMapZoomed() {
    svg.selectAll("*").attr("transform", "translate(" + d3.event.translate + ")" + " scale(" + d3.event.scale + ")")
    // 打印草图地图缩放级别
    console.log("Sketch Map Zoom Level:", d3.event.scale);
  }
  document.getElementById('sketch4').appendChild(xml.documentElement);
  d3.select('#sketch4').selectAll('g, path').on('mouseenter',animateMapTargets).on('mouseleave',removeFilter);
  var svg = d3.select("svg")
    .call(d3.behavior.zoom().on("zoom", sketchMapZoomed ))
});

GeoJSON度量地图部分

function metricMapZoomed () {
  svg.attr("transform", d3.event.transform)
  // 打印度量地图缩放级别
  console.log("Metric Map Zoom Level:", d3.event.transform.k);
}
var svg = d3.select("#metric4").append("svg")
  .attr("width", width)
  .attr("height", height)
  .attr("id", "metricmap")
  .call(d3.zoom().on("zoom", metricMapZoomed ))
  .append("g");

额外小提醒

你的代码同时引入了v3和v4版本的D3库,这很容易导致API冲突。建议统一使用一个版本(比如v4+),并把草图地图的Zoom代码改成v4的写法,避免后续出现奇怪的问题:

// 统一v4+后的草图地图Zoom代码
function sketchMapZoomed() {
  svg.selectAll("*").attr("transform", d3.event.transform)
  console.log("Sketch Map Zoom Level:", d3.event.transform.k);
}
var svg = d3.select("svg")
  .call(d3.zoom().on("zoom", sketchMapZoomed ))

这样修改后,滚动任意一个地图时,控制台就会实时输出对应的缩放级别啦!

内容的提问来源于stack exchange,提问作者Salman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:25:10