[原創.數據可視化系列之三]使用Ol3加載大量點數據

      無論是百度地圖仍是高德地圖,都很可貴見到在地圖上加載大量點要素,好比同屏1000的,由於這樣客戶端性能會很低,尤爲是IE系列的瀏覽器,簡直是卡的要死。但有的時候,還真的須要,好比,我要加載全球的AQI的測站和數據,這些站點在全球有4000多個,如何加載這些點並提升,OL3的ImageVector是一個很好地選擇,簡單的說,就是把這些要素渲染到一張圖上,這樣提升性能。代碼以下:vim

//加載JSON數據
    mainxiu.loaddata= function(options)
    {
        var that= this;
        var styleCache = {};
        var colors=['rgba(0, 153, 102, 0.99)',
        'rgba(255, 222, 51, 0.99)',
        'rgba(255, 153, 51, 0.99)',
        'rgba(204, 0, 51, 0.99)',
        'rgba(102, 0, 51, 0.99)',
        'rgba(126, 0, 35, 0.99)'];
        var createStyle = function(feature, resolution) {

            var colorkey=0;
            var reskey=2;

            var dataval= parseFloat(feature.data.aqi);
            if(dataval>=0 && dataval<=50)
            {
                colorkey=0;
            } else if(dataval>50 && dataval<=100)
            {
                colorkey=1;
            }
            else if(dataval>100 && dataval<=150)
            {
                colorkey=2;
            }
            else if(dataval>150 && dataval<=200 )
            {
                colorkey=3;
            }
             else if(dataval>200 && dataval<=300 )
            {
                colorkey=4;
            }
            else
            {
                colorkey=5;
            }

            if(resolution<4)
            {
                reskey=16;
            } else  if(resolution<19)
            {
                 reskey=12;
            }
           else  if(resolution<76)
            {
                 reskey=8;
            }
            else  if(resolution<305)
            {
                 reskey=6;
            }
            else
            {
               reskey=3;
            }
           var style = styleCache[colorkey+" -"+reskey];
            if (!style) {

              style = [ new ol.style.Style({
                image: new ol.style.Circle({
                  radius: reskey,
                  fill: new ol.style.Fill({
                    color: colors[colorkey],
                  })
                })

              })];
              styleCache[colorkey+" -"+reskey]=style;
            }

            return style;
        };

        $.getJSON(options.url, function(result) {

            var tmpLayer = that.getLayerById(options.id);

            if (tmpLayer == null)
            {
                tmpLayer = new ol.layer.Image({
                    id: options.id,
                    opacity: 0.95,
                    maxzoom: 1224,
                    minzoom: 0.0001
                });
                that.olmap.addLayer(tmpLayer);
            }

            var features=[];
        $(result).each( function(i, val) {

        geom = new ol.geom.Point(ol.proj.transform([ parseFloat(val.g[1]), parseFloat(val.g[0]) ], 'EPSG:4326', 'EPSG:3857'));

        feature = new ol.Feature(geom);
        features.push(feature);

        feature.data = val;

        });

        // Source and vector layer
        var vectorSource = new ol.source.Vector({
        features : features
        });

            var vimage= new ol.source.ImageVector({
                source:vectorSource,
            });
        

            vimage.setStyle(createStyle);

            tmpLayer.setSource( null);
            tmpLayer.setSource(vimage);

            that.setLayerVisible(options.id, true);

        });
    };

你們能夠不使用ImageVector進行顯示對比一下性能:瀏覽器

image

使用ImageVector的方式,極大地提升了性能。另外若是是arcgis的話,使用WMS發佈或許是一個更好的選擇。由於grahpic加載這樣的數據,性能確實是一個問題。性能

相關文章
相關標籤/搜索