D3 v4 反转功能

D3 v4 invert function

我正在尝试使用逆投影将 JPG 底图投影到正交投影上。我已经能够让它在 D3 的 v3 中工作,但我在 D3 的 v4 中遇到了问题。出于某种原因,v4 将源图像的边缘作为背景(而不是我指定的黑色背景)。 v4 中的逆投影是否存在任何已知问题或对此有任何修复?

问题是反转函数不是一对一的。我知道有两种方法可以解决问题。第一,计算构成投影的圆盘面积并跳过该半径之外的像素。或者两个(我在下面使用),计算你的坐标的前向投影,看看它们是否匹配你开始的 x,y 坐标:

if ( 
  (Math.abs(x - orthographic(coords)[0]) < 0.5 ) &&
  (Math.abs(y - orthographic(coords)[1]) < 0.5 ) 
 ) 

基本上这个问题是 [x,y] 等于 projection(projection.invert([x,y]))。通过确保此语句相等(或接近相等),则像素确实在投影盘中。这是必需的,因为多个 svg 点可以表示给定的经纬度,但 projection() returns 只是您想要的那个。

上面的代码块中有一个舍入误差的容差因子,只要前向投影在原始 x,y 坐标的半个像素以内,它就会被绘制(这看起来工作得很好):

我有一个更新的垃圾箱 here(点击 运行,我取消选中自动 运行)。

与计算投影圆盘的半径相比,这自然是计算量更大的过程(但该方法仅限于投影到圆盘的投影)。

这个 的两个答案也许可以进一步解释 - 它们涵盖了两种方法。