我负责提供页面以逐州显示美国选举的主要结果。每个页面都需要一个带有状态图像的横幅,大约 250 像素 x 250 像素。现在我需要做的就是弄清楚如何提供/生成这些图像......
我已经深入研究了Protovis的文档/示例,并认为我可能会提升州坐标轮廓 - 我必须手动转换坐标数据以使其合理并调整大小(ick)
在聪明/粗暴光谱的另一端是一个巨大的精灵或一系列精灵。即使使用 png 8 压缩,50 个非重叠 250x250 像素精灵的网格的文件大小也是一个问题,遗憾的是,这样的文件似乎不存在,所以我不得不手动创建它。也很不愉快。
谁有更好的主意?
回答:正确的解决方案是切换到d3。
我们现在入侵的内容:
drawStateInBox = function(box, state, color) {
var w = $("#" + box).width(),
h = $("#" + box).height(),
off_x = 0,
off_y = 0;
borders = us_lowres[state].borders;
//Preserve aspect ratio
delta_lat = pv.max(borders[0], function(b) b.lat) - pv.min(borders[0], function(b) b.lat);
delta_lng = pv.max(borders[0], function(b) b.lng) - pv.min(borders[0], function(b) b.lng);
if (delta_lat / h > delta_lng / w) {
scaled_h = h;
scaled_w = w * delta_lat / delta_lng;
off_x = (w - scaled_w) / 2;
} else {
scaled_h = h * delta_lat / delta_lng;
scaled_w = w;
off_y = (h - scaled_h) / 2;
}
var scale = pv.Geo.scale()
.domain(us_lowres[state].borders[0])
.range({x: off_x, y: off_y},
{x: scaled_w + off_x, y: scaled_h + off_y});
var vis = new pv.Panel(state)
.canvas(box)
.width(w)
.height(h)
.data(borders)
.add(pv.Line)
.data(function(l) l)
.left(scale.x)
.top(scale.y)
.fillStyle(function(d, l, c) {
return(color);
})
.lineWidth(0)
.strokeStyle(color)
.antialias(false);
vis.render();
};