数以百万计的可点击数据点可以使用 webgl 绘制在谷歌地图上。
数据点由画布上位置的 x,y 对、大小的 int、屏幕外颜色和屏幕颜色表示。这些值存储在单独的类型化数组中。
每个数据点都有一个唯一的 rgb 颜色,作为数据点 ID 查找表中的键。
创建一个纹理来存储屏幕外颜色并将其渲染到屏幕外缓冲区。在事件中,加载屏幕外缓冲区并使用 glReadPixels 检索单击像素的 rgb 颜色,然后在查找表中找到 id。屏幕缓冲区上的点,用户看到的,可以共享一个共同的颜色。
canvas.addEventListener('click', function(ev) {
# insert code to get mouse x,y position on canvas
pixels = new Uint8Array(4);
gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
gl.readPixels(x, y, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, pixels);
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
if (colorToId[pixels[0] + " " + pixels[1] + " " + pixels[2]]) {
# Pixel clicked is a data point on the map
}
});
Webgl 代码比较长,所以只包含了点击事件。
这是live demo 和repo。 (角度和咖啡脚本)
这是使用纯 js 的第二个示例:webgl-picking-geo-polygons
这里是react-webgl-leaflet
该解决方案基于 Brendan Kenny 的 Google Maps + HTML5 + Spatial Data Visualization,它解释了上面 30 分钟标记处摘录中的一些代码,以及 Displaying WebGL data on Google Maps。
该演示的数据点少于 10 个,但您可以使用 rgb 值的所有组合轻松绘制超过 1600 万个可选择的数据点。