怎么用webgl方式加载point

本篇内容介绍了“怎么用webgl方式加载point”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

成都创新互联于2013年成立,是专业互联网技术服务公司,拥有项目做网站、成都做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元杭锦后做网站,已为上家服务,为杭锦后各地企业和个人服务,联系电话:13518219792

这种方式不同于使用Leaflet的API加载point,这个是在地图的上层覆盖一个canvas对象,使用的是开源的L.CanvasOverlay.js,github上可以搜索到这个,将point绘制在canvas上,在地图范围或级别的动态变化时,计算vertex shader中的变换矩阵,保持和地图上的位置一致。

json坐标数据量:

怎么用webgl方式加载point

关键的shader:

   

     

   

// -- converts latlon to pixels at zoom level 0 (for 256x256 tile size) , inverts y coord )

        // -- source : http://build-failed.blogspot.cz/2013/02/displaying-webgl-data-on-google-maps.html

//将经纬度转换像素的代码,在第一级别进行转换

        function LatLongToPixelXY(latitude, longitude) {

            var pi_180 = Math.PI / 180.0;

            var pi_4 = Math.PI * 4;

            var sinLatitude = Math.sin(latitude * pi_180);

            var pixelY = (0.5 - Math.log((1 + sinLatitude) / (1 - sinLatitude)) / (pi_4)) * 256;

            var pixelX = ((longitude + 180) / 360) * 256;

            var pixel = { x: pixelX, y: pixelY };

            return pixel;

        }

//计算转换的矩阵

function drawingOnCanvas(canvasOverlay, params) {

            if (gl == null) return;

            gl.clear(gl.COLOR_BUFFER_BIT);

            pixelsToWebGLMatrix.set([2 / canvas.width, 0, 0, 0, 0, -2 / canvas.height, 0, 0, 0, 0, 0, 0, -1, 1, 0, 1]);

            gl.viewport(0, 0, canvas.width, canvas.height);

            var pointSize = Math.max(leafletMap.getZoom() - 4.0, 1.0);

            gl.vertexAttrib1f(gl.aPointSize, pointSize);

            // -- set base matrix to translate canvas pixel coordinates -> webgl coordinates

            mapMatrix.set(pixelsToWebGLMatrix);

            var bounds = leafletMap.getBounds();

            var topLeft = new L.LatLng(bounds.getNorth(), bounds.getWest());

            var offset = LatLongToPixelXY(topLeft.lat, topLeft.lng);

            // -- Scale to current zoom

            var scale = Math.pow(2, leafletMap.getZoom());

            scaleMatrix(mapMatrix, scale, scale);

            translateMatrix(mapMatrix, -offset.x, -offset.y);

            // -- attach matrix value to 'mapMatrix' uniform in shader

            gl.uniformMatrix4fv(u_matLoc, false, mapMatrix);

            gl.drawArrays(gl.POINTS, 0, numPoints);

        }

“怎么用webgl方式加载point”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


分享文章:怎么用webgl方式加载point
网站链接:http://scyanting.com/article/pijgdp.html