调整全屏世界地图 D3JS 的大小

Posted

技术标签:

【中文标题】调整全屏世界地图 D3JS 的大小【英文标题】:Resizing Fullscreen World Map D3JS 【发布时间】:2022-01-14 05:21:21 【问题描述】:

我正在尝试使用 D3JS 制作全屏世界地图,以便在其上放置一些标记。问题是我找不到将其居中并使其对屏幕做出响应的方法(即使在智能手机上也是如此)。我怎样才能做到这一点?谢谢!

// The svg
var svg = d3.select("svg"),
  width = +svg.attr("width"),
  height = +svg.attr("height");

// Map and projection
var projection = d3.geoMercator()
  .translate([width / 2.15, height / 1.26])

// Load external data and boot
d3.json("https://raw.githubusercontent.com/holtzy/D3-graph-gallery/master/DATA/world.geojson", function(data) 

  // Draw the map
  svg.append("g")
    .selectAll("path")
    .data(data.features)
    .enter().append("path")
    .attr("fill", "#DEB887")
    .attr("d", d3.geoPath()
      .projection(projection)
    )
    .style("stroke", "#13788a")
    .style("stroke-width", 0.5)
)
html,
body 
  margin: 0;
  padding: 0;
  box-sizing: border-box;
  background: #005f73;
<svg  ></svg>

<script src="https://d3js.org/d3.v4.js"></script>
<script src="https://d3js.org/d3-scale-chromatic.v1.min.js"></script>
<script src="https://d3js.org/d3-geo-projection.v2.min.js"></script>

【问题讨论】:

对 svg 元素使用 viewBox 属性而不是宽度和高度 【参考方案1】:

使用window.innerWidth 获取窗口大小并使用便捷函数projection.fitSize 使投影跨越整个可用字段。

如果您想让更改响应窗口大小调整,只需在窗口大小更改时使用resize 事件侦听器重新绘制地图。

// The svg
var svg = d3.select("svg"),
  width = window.innerWidth,
  height = window.innerHeight;

svg.attr('width', width).attr('height', height);

// Load external data and boot
d3.json("https://raw.githubusercontent.com/holtzy/D3-graph-gallery/master/DATA/world.geojson", function(data) 

  var projection = d3.geoMercator()
    .fitSize([width, height], data);

  // Draw the map
  svg.append("g")
    .selectAll("path")
    .data(data.features)
    .enter().append("path")
    .attr("fill", "#DEB887")
    .attr("d", d3.geoPath()
      .projection(projection)
    )
    .style("stroke", "#13788a")
    .style("stroke-width", 0.5)
)
body 
  margin: 0;
  padding: 0;
  box-sizing: border-box;
  background: #005f73;
<svg></svg>

<script src="https://d3js.org/d3.v4.js"></script>
<script src="https://d3js.org/d3-scale-chromatic.v1.min.js"></script>
<script src="https://d3js.org/d3-geo-projection.v2.min.js"></script>

【讨论】:

以上是关于调整全屏世界地图 D3JS 的大小的主要内容,如果未能解决你的问题,请参考以下文章

d3js:Svg元素在更改窗口大小时未调整大小

全屏:调整其父视图的大小时不调整 AVPlayerLayer 的大小

在窗口调整大小时使用 jquery 的全屏图像?

ActionScript 3 全屏图像调整大小(按比例)

全屏图像调整大小(比例)

UINavigationController 总是全屏不调整大小