数听说话,88000条数据绘制北京市地图

偶得到一批数据,本着好玩的态度绘制下来看看究竟是什么鬼,绘制的结果以下:php

呵呵,什么都不像。并且中间最重要的部分因数据量过大绘制的已经看不清楚了。因而乎,缩小绘制范围,去除周围没有用的数据。从新绘制结果以下:canvas

呵呵,北京市地图。有点像,你们能够唱五环之歌了。。。浏览器

再来一张只有边没有点的,会清晰一点。spa

嗯。。。不错。。。code

绘制代码以下:blog

var xhrNode = new XMLHttpRequest();
xhrNode.onreadystatechange = function() {
    if(xhrNode.readyState == 4) {
        if((xhrNode.status >= 200 && xhrNode.status < 300) || xhrNode.status == 304) {
            drawNode(xhrNode.responseText);
        }
        else {
            alert('hehe');
        }
    }
}
xhrNode.open("get",'ReadFile.php',false);
xhrNode.send(null);

function drawNode(paths) {
    var pathArr = paths.split(','),    
    i,len,perpath,
    cs = document.getElementById('cs');
    var context = cs.getContext("2d");
    context.beginPath();
    
    for(i = 0,len = pathArr.length;i < len;i++) {
        perpath = pathArr[i].trim().split(' ');
        context.moveTo(parseInt(perpath[1]),parseInt(perpath[2]));
        if(parseInt(perpath[0]) === 0) {
            context.arc(parseInt(perpath[1]),parseInt(perpath[2]),7,0,2*Math.PI,false);
            context.fill();
            context.fillText(parseInt(perpath[0]),parseInt(perpath[1]) + 8,parseInt(perpath[2]) + 8);
        }
        else {
            context.arc(parseInt(perpath[1]),parseInt(perpath[2]),1,0,2*Math.PI,false);
            if(parseInt(perpath[3]) != -1) {
                context.fillText(parseInt(perpath[0]),parseInt(perpath[1]) - 4,parseInt(perpath[2]) + 4);
                context.fillText(parseInt(perpath[3]),parseInt(perpath[4]) - 4,parseInt(perpath[5]) + 4);
                context.arc(parseInt(perpath[4]),parseInt(perpath[5]),1,0,2*Math.PI,false);
            }
        }
    }
    context.stroke();
}

 

canvas确实颇有意思,可是对于浏览器来讲数据量一大,就会出问题了(卡的不行)。因此,当数据达到几十万甚至上百万千万的时候仍是用“万能“的c语言绘制比较好。。。get

 

以上it

相关文章
相关标签/搜索