作为一名GISer,现处于交通行业(交通行业与GIS结合确实是一件很有意思的事情)。最近遇到一个大数据量下的矢量文件在前台加载渲染直接崩溃问题,处于这个节点上,做了如下思考:
var mapnik = require("mapnik");
var fs = require("fs");
var img = new mapnik.Image(2082,1617);
fs.readFile('PTAL_gridCoefficient.txt','utf-8',function(err,data){
if(err){
console.error(err);
}else{
data = data.toString().split("\r\n");
data.forEach(function(v){
var tmp=v.split(","),color=[65,105,225,1];
if(tmp[1] == 0){
color=[255,255,255,0];
}else if( tmp[1] >0 && tmp[1]<=2.5 ){
color=[22,73,125,255];
}else if( tmp[1] >2.5 && tmp[1]<=5 ){
color=[17,111,184,255];
}else if( tmp[1] >5 && tmp[1]<=10 ){
color=[39,173,227,255];
}else if( tmp[1] >10 && tmp[1]<=15 ){
color=[145,201,83,255];
}else if( tmp[1] >15 && tmp[1]<=20 ){
color=[255,241,1,255];
}else if( tmp[1] >20 && tmp[1]<=25 ){
color=[251,192,142,255];
}else if( tmp[1] >25 && tmp[1]<=40 ){
color=[238,29,35,255];
}else if( tmp[1] >40){
color=[132,21,23,255];
}
var x=parseInt(tmp[0].substr(0,6))-115423,
y=1617-(parseInt(tmp[0].substr(6,5))-39443);
img.setPixel(x==2082?2081:x,y==1617?1616:y,new mapnik.Color(color[0],color[1],color[2],color[3]));
});
img.encode('png', function(err,buffer) {
if (err) throw err;
fs.writeFile('map.png',buffer, function(err) {
if (err) throw err;
});
});
}
}
);
ps:关键点如下