Карта. Масштабирование и районы
Осуществил следующий этап - масштабирование и выделение районов. Сделал систему масштабирования универсальной - можно будет добавить любое количество уровней, сейчас их четыре - 150, 100, 75 и 50%. Применяю послойное хранение картинок для масштабов, то есть, возможен случай одновременного показа двух масштабов (через прозрачность) - можно применять для эффектного переключения (сейчас простое).
01. Карта. Масштабирование и районы,18 Kb
Насчёт районов - применил canvas. Пока первая пробная версия, работает прилично. В будущем оптимизирую по скорости.
Также названия районов вывожу поверх них в случае режима мыши. Использую алгоритм для определения точки внутри многоугольника. Алгоритм пробивной, но чуть притормаживает.
В случае простого режима использую алгоритм попроще с усреднениями, границами, пересечением и количеством точек внутри видимой области, всё это перемешиваю и получается координата блока названия района.
В админке можно создать новый район путём ввода точек с помощью мыши, опять же всё рисуется с помощью canvas. Точки можно двигать, удалять, добавлять-вставлять новые. Здесь тоже можно в будущем оптимизировать по скорости за счёт рисовки точек с помощью обычных блоков (сейчас рисуется с помощью canvas). Область заполняется фоновым цветом по выбору с выбираемой прозрачностью.
01. Карта. Масштабирование и районы,18 Kb
Насчёт районов - применил canvas. Пока первая пробная версия, работает прилично. В будущем оптимизирую по скорости.
Также названия районов вывожу поверх них в случае режима мыши. Использую алгоритм для определения точки внутри многоугольника. Алгоритм пробивной, но чуть притормаживает.
В случае простого режима использую алгоритм попроще с усреднениями, границами, пересечением и количеством точек внутри видимой области, всё это перемешиваю и получается координата блока названия района.
В админке можно создать новый район путём ввода точек с помощью мыши, опять же всё рисуется с помощью canvas. Точки можно двигать, удалять, добавлять-вставлять новые. Здесь тоже можно в будущем оптимизировать по скорости за счёт рисовки точек с помощью обычных блоков (сейчас рисуется с помощью canvas). Область заполняется фоновым цветом по выбору с выбираемой прозрачностью.