我正在使用
var bounds = d3.geo.path()
.projection(function(d) { return d; })
.bounds;
获得所有国家功能的界限。一切都很好,直到我遇到跨越反子午线的斐济或俄罗斯。
Fiji.bb = [[-180,-18.294755298529864], [180.00000000000006,-16.037142847284727]];
// with [[West,South],[East,North]]
纬度反馈是完美的,让我们在这个问题上忽略它们。然而,边界框的纵向宽度太大了,从 W:-180 到 E:+180。
从计算机或 GIS 的角度来看,这是完全合理的,但作为一个人类,我完全错过了真正的西方和东方的界限。
// current data back
Fiji.bb = [[-180,-18.294...],[180.00000000000006,-16.0371...]];
// wanted data back
Fiji.bb = [[177,-18.294...],[-179,-16.0371...]];
截至目前,我看不到任何方法可以获取这些岛屿的真实西部 (~177⁰) 和东部 (~ -179⁰) 值。
有没有一种方法可以通过 d3js 获取这些岛的真实边界框值?
我目前计划通过为自己提供一些近似的 WSEN 值来绕过这个问题,基于以前的D3.geo :球面弧而不是平行线?. 这有点难看,但它会起作用。
编辑: 有趣的是,该区域是正确计算的:
var area = d3.geo.path()
.projection(function(d) { return d; })
.area;
// area = 1.639711598252461;
这让我认为 D3js 有一种内部方法来正确管理跨越反子午线的特征,而无需总是做全球性的戏剧。