Я использую D3 для создания карты мира с орфографической проекцией, которую пользователь может «вращать» с помощью мыши, как глобус.
Я столкнулся с некоторыми проблемами с дрожащим рендерингом в Firefox, поэтому я упростил свои функции карты, используя реализацию алгоритма Дугласа-Пейкера в R. Я выгрузил это в geoJSON и отрисовал его с помощью D3, как в этом примере: http://jsfiddle.net/cmksA/8/. (Обратите внимание, что проблема, которую я описываю ниже, не возникает с неупрощенными функциями, но Firefox непригоден для использования, если я не упрощаю.)
Производительность в Firefox по-прежнему низкая (улучшается), но появилась новая проблема. Когда вы поворачиваете земной шар так, что Индонезия находится примерно в центре земного шара, один из полигонов трансформируется, чтобы покрыть весь земной шар. Та же проблема возникает, когда Северная и Южная Америка находятся в центре.
В рамках панорамирования я повторно проецирую/перерисовываю глобус, используя следующую функцию (строка 287 jsfiddle):
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";
});
}
Любая помощь/проницательность/советы будут высоко оценены. Ваше здоровье