Клуб API Карт

Canvas для добавления множества маркеров

Пост в архиве.
s.dreval
13 сентября 2012, 15:51

В описании 2го апи вы указали что есть альтернатива hotspots и описание по работе с ней можно прочитать в документации, однако не нашел как добавлять множество точек  (~9500) на карту без потери производительности. Подкинте примерчик или детальное описание. 

20 комментариев

Как показать на карте 10000 точек (но там используется собственный слой-канвас и недокументированный класс pane.movable.StepwisePane)

 

В ie на каждый маркер создаются 4 объекта, на зуме 10-12 в ie обрушивает DOM

:-D

Речь-то про fullcanvas-контроллер. А есть просто влепить 10000 плейсмарков - то ничего хорошего не выйдет ни с гуглом, ни с яндексом.

Что делать в ИЕ? там же нет канваса

Как всегда - выдумывать обходные пути.

Я бы попробовал:

1) Flash

2) Рисовать на сервере

3) Кластеры

Есть там канвас - FlashCanvas(.org?), работает чуть ли не быстрее "нормального", хотя и со своими сдвигами.

Хоть сам бери и крути.

Даже с этими костылями это не отменяет необходимости загрузить все 10тыс объектов за раз и подвесить броузер на пару сек при отрисовке?

 

10000 объектов - это 283,69Кб с хинтами (gzip)

отрисовка - быстрее, чем создание геообъектов и добавление dom элементов.

нормально он работает - без сдвигов.

так было одна проблема - он не зумится вместе с браузером - но для нее я нашел костыль. так что все работает.

А сколько точек будет в видимой части карты? Если > 500, то по-любому нужно использовать либо канвас, либо тайлы. Если же их меньше, то можно рендерить через dom-ноды (но только те ноды, которые видно). Но опять же, для увеличения скорости нужно будет отказаться от геообъектов и работать напрямую с pane'ми и container'ами.

в зависимости от масштаба, если будет меньше ~11, то все точки будут видны, похоже тут только генерить тайлы прийдется и отдавать их клиенту. Юзал скрипт на PHP для нарезки тайлов twirl-hsTiler, но сам проект на ASP.NET, поэтому и хотелось бы не смешивать кучу языков. 

Посмотрите еще раз скрипт hsTiler - во первых он офалайн по сути, во вторых переписать его под любой другой языковой стек дело пары часов.

В принципе да, только возникли проблемы с переписыванием части кода по работе с графикой, в частности с переводом функций 

imagesavealpha($image, true);

imagealphablending($image, true);

imagecolorallocatealpha($image, 255, 255, 255, 127);

imagecopy

 

не пойму как их сделать в c#

если использовать тайлы - можно попрощаться с фильтрацией. не будешь же для каждого фильтра свои тафлы рисовать. если только на лету - а это очень затратно по ресурсам. проводили эксперименты, на коркваде вроде до 80 тайлов в секунду рисуется.

что такое корквад?

четырехядерный проц

udp. старая статья на эту тему

а чем рисовал тайлы?

по скорости - что gd2, что imagemagick получалось практически одно и то же.

вот старая статья по этому поводу

http://mapexpert.pro/?p=11#more-11

интересно какая будет разница, если генерить асинхронно,

есс-но не в php

то есть - асинхронно? они и генерились асинхронно - 1 тайл на 1 запрос.

что касается "не php", то тут не в компиляторе загвоздка. Я генерил тайлы через imagick (правда, через обертку php), imagick - на си вроде написан. данные выбирались практически мгновенно, а рендеринг - медленно. не думаю, что на си можно ускориться на порядок. а меньше просто нет смысла.