D3.js 如何使用topojson';什么是bbox?

D3.js 如何使用topojson';什么是bbox?,d3.js,topojson,D3.js,Topojson,我创建了一个带有--bbox标志的topojson文件,我知道了如何获取中心(其中b是bbox): 然后我计算了比例,问题是我计算了一个等矩形投影(因为这很简单): 我找不到计算墨卡托投影的方法。 我已经看到并尝试使用投影来获取比例,并直接设置新比例: projection = d3.geo.mercator() .translate([width / 2, height / 2]) .center(center) .scale(1) [b0, b1] = proje

我创建了一个带有
--bbox
标志的topojson文件,我知道了如何获取中心(其中
b
是bbox):

然后我计算了比例,问题是我计算了一个等矩形投影(因为这很简单):

我找不到计算墨卡托投影的方法。 我已经看到并尝试使用投影来获取比例,并直接设置新比例:

projection = d3.geo.mercator()
    .translate([width / 2, height / 2])
    .center(center)
    .scale(1)

[b0, b1] = projection([b[0], b[1]])
[b2, b3] = projection([b[2], b[3]])
scale = 1 / Math.max(Math.abs(b2 - b0) / width, Math.abs(b3 - b1) / height)

projection.scale(s)
但结果并不完美(可怜的塔斯马尼亚):


编辑:我应该在这里发布吗?

你是否尝试过像你链接到的答案那样直接从投影中获取边界?我尝试过了,但问题是
path.bounds
不返回坐标,我不能在g上这样做,它必须是path(我有数百条包含真实数据的路径,不是在这个小示例中).这可能会有帮助
var wScale = width  / (Math.abs(b[0] - b[2]) / 360) / 2 / Math.PI
var hScale = height / (Math.abs(b[1] - b[3]) / 360) / 2 / Math.PI
var scale = Math.min(wScale, hScale)
projection = d3.geo.mercator()
    .translate([width / 2, height / 2])
    .center(center)
    .scale(1)

[b0, b1] = projection([b[0], b[1]])
[b2, b3] = projection([b[2], b[3]])
scale = 1 / Math.max(Math.abs(b2 - b0) / width, Math.abs(b3 - b1) / height)

projection.scale(s)