次の作業にd3を使用したい: ドーナツチャートを各国の中心に表示する回転球体を表示する。地球と対話することができるはずです(国の選択、ズーム、回転)。 d3はすべての部分を実装する簡単な方法を提供していますが、必要に応じてドーナツの一部を動作させることはできません。 globe with donut :それはのように、ドーナツは、地球の上に平面上に表示されているように、コードとによってD3球体/球体に投影されたドーナツチャート
var arc = d3.arc();
var data = [3, 23, 17, 35, 4];
var radius = 15/scale;
var _arc = arc.innerRadius(radius - 7/scale)
.outerRadius(radius).context(donutsContext);
var pieData = pie(data);
for (var i = 0; i < pieData.length; i++) {
donutsContext.beginPath();
donutsContext.fillStyle = color(i);
_arc(pieData[i]);
}
:
簡単な方法はd3.arcの助けを借りて、ドーナツグラフを描くがあります
私は彼らが世界中
の周りに「ラップ」することにしたい一方で、正しく世界に投影することができるd3.geoCircleの方法があります。私は2つの円の助けを借りて世界に正しく投影「リング」だ:
var circle = d3.geoCircle()
.center(centroid)
.radius(2);
var outerCircle = circle();
var circle = d3.geoCircle()
.center(centroid)
.radius(1);
var innerCircle = circle();
var interCircleCoordinates = [];
for (var i = innerCircle.coordinates[0].length - 1; i >= 0; i--) {
interCircleCoordinates.push(innerCircle.coordinates[0][i]);
}
outerCircle.coordinates.push(interCircleCoordinates);
を私は実際にドーナツを取得する必要があります。私が試した他の方法は、ドーナツから画像を取得し、ピクセル操作の助けを借りて、世界中のこのイメージをラッピングされ
:
var image = new Image;
image.onload = onload;
image.src = img;
function onload() {
window.dx = image.width;
window.dy = image.height;
context.drawImage(image, 0, 0, dx, dy);
sourceData = context.getImageData(0, 0, dx, dy).data;
target = context.createImageData(width, height);
targetData = target.data;
for (var y = 0, i = -1; y < height; ++y) {
for (var x = 0; x < width; ++x) {
var p = projection.invert([x, y]), λ = p[0], φ = p[1];
if (λ > 180 || λ < -180 || φ > 90 || φ < -90) { i += 4; continue; }
var q = ((90 - φ)/180 * dy | 0) * dx + ((180 + λ)/360 * dx | 0) << 2;
var r = sourceData[q];
var g = sourceData[++q];
var b = sourceData[++q];
targetData[++i] = r;
targetData[++i] = g;
targetData[++i] = b;
targetData[++i] = 125;//
}
}
context.clearRect(0,0, width, height);
context.putImageData(target, 0, 0);
};
私は世界のために、世界中で非常に遅く回転との相互作用を得るこの方法によって、私はだから私の質問は(1000px)
を必要とするサイズ:
- は球にd3.arcのヘルプ(世界、ORTで生成されたドーナツを投影するためのいくつかの方法がありますですホログラム投影)?
- geoCircleからドーナツを得る方法はありますか?
- たぶん私は
'geoPath'を' context.arc() '(https://github.com/d3/d3-geo/blob/master/README.md#geoPath)で使用できますか? –