我正在使用D3使用画布而不是SVG创建墨卡托投影。我已经找到了土地工作的路径,但我无法弄清楚如何(如果可能的话)在特定的长/纬度位置添加d3.geo.circle。
如果是SVG,我会使用像
这样的东西var group = svg.append('g');
group.append('circle')
.attr('cx', coords[0])
.attr('cy', coords[1])
.attr('r', 10)
.style('fill', 'red');
但我无法弄清楚如何将其转换为画布,而且我没有找到使用画布而不是SVG的D3资源。
有什么建议吗?
答案 0 :(得分:2)
您只需使用canvas arc
命令手动创建它:
var coords = [50, 50];
var r = 10;
ctx.beginPath();
// Make an arc from 0 to Math.PI*2, aka a full circle
ctx.arc(coords[0], coords[1], r, 0, Math.PI*2, false);
ctx.fillStyle = 'red';
ctx.fill();
编辑:看来你的意思是在画布上用适当的变换来表达纬度和经度,看看这个:
var coords = [47.61, -122.33];
var r = 5;
ctx.beginPath();
// Make an arc from 0 to Math.PI*2, aka a full circle
// X = Longitude
// Y = Latitude
// Negative latitude values go upwards, so we reverse the sign of latitude
ctx.arc(coords[1], -coords[0], r, 0, Math.PI*2, false);
ctx.fillStyle = 'red';
ctx.fill();
将西雅图放在地图上的实例:http://jsfiddle.net/9kmV3/1/
答案 1 :(得分:1)
这是我目前正在处理的一段代码:
var circle = d3.geo.circle().angle(circleSize()).origin([0, 52]);
circles = [circle()];
context.beginPath();
path({type: "GeometryCollection", geometries: circles});
context.fillStyle = "rgba(0,100,0,.5)";
context.fill();
context.lineWidth = .2;
context.strokeStyle = "#000";
context.stroke();
这会绘制一个圆圈并将其投影到画布上。即如果您使用的是正交投影,它将以透视方式显示。