我負責提供頁面以顯示美國州立州選舉的主要結果。每個頁面都需要一張帶有國家圖像的橫幅,大約250px x 250px。現在我需要做的是找出如何服務/生成的圖像...最好的方式來服務/生產美國國家silhoutte?
我已經挖成的文檔/爲Protovis例子,認爲我 大概可以提升國家協調outlines-我將不得不手動 變換的座標數據是合理的和尺寸 正確(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();
};
你是指'手動變換'(1)中的座標數據是什麼意思?這需要如何兼容(canvas!= IE6 ...)? – 2012-02-09 14:49:40
我有道德上的反對意見,爲IE6兼容性編寫代碼,幸好這不是要求。 – RSG 2012-02-09 20:29:51