我正在使用 D3 创建一个带有正交投影的世界地图,用户可以像使用地球仪一样用鼠标“旋转”它。
我在 Firefox 中遇到了一些抖动渲染的问题,因此我使用 R 中的 Douglas-Peuker 算法的实现简化了我的地图功能。我将其转储到 geoJSON 并由 D3 渲染,如下例所示:http://jsfiddle。净/cmksA/8/。(请注意,我在下面描述的问题不会出现在非简化功能中,但如果我不简化,Firefox 将无法使用。)
Firefox 的性能仍然很差(变得更好),但一个新问题已经出现。当您平移地球以使印度尼西亚大致位于地球的中心时,其中一个多边形会转换为覆盖整个地球。当北美和南美居中时,也会发生同样的问题。
作为平移的一部分,我使用以下函数(jsfiddle 的第 287 行)重新投影/重新绘制地球:
function panglobe(){
var x=d3.event.dx;
var y=d3.event.dy;
var r = mapProj.rotate();
r[0] = r[0]+lonScale(x)
r[1] = r[1]+latScale(y)
mapProj.rotate(r);
countries.attr("d",function(d){
var dee=mapPath(d)
return dee ? dee : "M0,0";
});
}
任何帮助/见解/建议将不胜感激。干杯