所以我创建了一个程序,它将从本地网络服务器获取美国的坐标列表。客户端可以通过发出简单的GET请求来获取这些坐标。我试图单独填写各州,但这似乎不起作用。我填写这些的代码如下
ctx.fillStyle= "#f00";
//coords holds an array of JSON objects, which store an array of coordinates under the 'coords' tag. These coordinates are stored in an array, which holds [x,y].
for (var i=0; i<coords.length; i++){
obj = coords[i]['coords'];
//Begin the path
ctx.beginPath();
for (var j=0; j<obj.length; j++){
//Draw each point on the path
if (j!=obj.length-1){
ctx.moveTo(obj[j][0],obj[j][1])
ctx.lineTo(obj[j+1][0],obj[j+1][1])
}
}
//Close the path
ctx.closePath();
ctx.fill();
ctx.stroke();
}
出于某种原因,这不会填补。它用黑色轮廓绘制它们就好了,但填充不会发生。我已经在gist上提出了数据,可以在这里找到。 https://gist.github.com/ollien/44119f42187ec21ae2c8
谢谢!
答案 0 :(得分:1)
每当你做一次动作,你就会突破&#39;曲线。我建议你首先只使用moveTo,然后只使用lineTo:
ctx.fillStyle= "#f00";
//coords holds an array of JSON objects, which store an array of coordinates under the 'coords' tag. These coordinates are stored in an array, which holds [x,y].
for (var i=0; i<coords.length; i++){
obj = coords[i]['coords'];
drawObj(obj);
}
将drawObj定义为:
function drawObj(obj) {
if (obj.length<2) return;
ctx.beginPath();
var currObj = obj[0];
ctx.moveTo(currObj[0], currObj[1]);
for (var j=1; j<obj.length; j++){
currObj = =obj[j]
ctx.lineTo(currObj[0],currObj[1])
}
ctx.closePath();
ctx.fill();
ctx.stroke();
}