Миллионы точек данных, пригодных для клики, могут быть нарисованы на карте google с помощью webgl.
Точка данных представлена парой x, y для местоположения на холсте, int для размера, цвета вне экрана и цвета на экране. Эти значения хранятся в отдельных типизированных массивах.
Каждая точка данных имеет уникальный цвет rgb, чтобы действовать как ключ в таблице поиска идентификаторов точек данных.
Создайте текстуру, чтобы сохранить цвета вне экрана и отобразить их в буфер вне экрана. В событии загрузите буфер без экрана и используйте glReadPixels для получения цвета rgb щелчка пикселя, а затем найдите идентификатор в таблице поиска. Точки в буфере на экране, что видит пользователь, могут совместно использовать общий цвет.
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 длинный, поэтому включен только событие click.
Вот live demo и repo. (Угловые и CoffeeScript)
Вот второй пример, используя обычный JS: webgl-picking-geo-polygons
Решение основано на Брендан Кенни Google Maps + HTML5 + Spatial Data Visualization что объясняет некоторые из кода в отрывке выше на 30 мин отметки, и Displaying WebGL data on Google Maps.
Демонстрационная версия содержит менее десяти точек данных, но вы можете так же легко нарисовать более 16 миллионов выбираемых точек данных, используя все комбинации значений rgb.
Спасибо. классное приложение.У меня есть несколько тысяч маркеров, которые нужно отобразить, и кластер-кластер был полезен. но когда я увидел видео из Brendan http://www.youtube.com/watch?v=aZJnI6hxr-c, я был действительно впечатлен, и у меня не было большого опыта работы в webgl, я начал смотреть на three.js и, следовательно, на свой пост. – Linus
Я проделал большую работу с рамкой PLAY, трижды и WebGL. Я уверен, что у меня есть что-то в моих прошлых архивах проектов, которые соответствовали бы вашим спецификациям. Тем временем вы можете проверить RaphaëlJS (http://raphaeljs.com/) ... небольшую библиотеку JS, которая упрощает работу с векторной графикой. Я просто разместил этот небольшой пример на своем сайте: http://ddeloy.com/new/raphael/raphael_click_event.html – ddeloy
http://ddeloy.com/new/WebGL/geolocation-map.html – ddeloy