darkpal пишет:Я не знаток JavaScript, но может стоит увидеть комментарий разработчика?
Действительно, «дело не в типе карт» (хотя и векторные всегда плавные по умолчанию). Векторные карты, конечно, намного технологичнее и позволяют их масштабировать «внутрь» без потери качества (теряется только детализация, пока не прогрузятся данные), но это вряд ли даёт само ощущение плавности.
Дело скорее в движке отрисовки этих карт. Который обрабатывает все события скроллинга и нужным образом масштабирует тайлы, чтобы всё выглядело плавно.
В случае векторных карт существуют дробные зумы, на которых можно останавливаться после скроллинга. Растровые так же можно масштабировать до дробных зумов, но после окончания скроллинга всё равно нужно прыгнуть к ближайшему целому зуму, иначе всё будет размазано настолько, что никто не захочет полностью плавного зумирования. Что несколько снижает плавность (если сделать небольшой перерыв между скроллингом, то карта резко скакнёт), но не критично.
Если открыть Gurtam Maps в виалоне и скроллить даже без тачпада, а просто кнопками смены зума на один, то будет видно, что после смены зума оно зачем-то показывает белый экран, а затем загружает новые тайлы. Хотя должно было растянуть старые, загружать новые и затем заменить старые новыми. С мобильника карты довольно неплохо растягиваются, но после отпускания тоже уходят в мерцающую перезагрузку.
Если открыть Google Maps в виалоне и скроллить с мобильника, то видно, что этот слой в виалоне в принципе не поддерживает дробный скроллинг и просто зумит по одному уровню. Что неправильно, т.к. сами встраиваемые гугл-карты это умеют.
Всё так происходит (в основном с гугл-картами) из-за того, что виалон (и пользователь) не работает с самими js sdk карт напрямую, а использует посредника в виде OpenLayers 2 (активная разработка которого завершилась примерно в 2013 году), который перехватывает действия пользователя и затем передаёт их добавленным на карту слоям, унифицировав их, в процессе чего, например, гугл вообще не знает, что происходит дробный зуминг (по крайней мере наша текущая реализация). Так же, с момента внедрения OL2, он был многократно адаптирован под нужды виалона, в процессе чего что-то, возможно, было сломано (мерцание тайлов), а что-то и не поддерживалось никогда в данном движке.
Некоторые вещи, вроде мерцания тайлов, скорее всего могут быть исправлены относительно небольшими затратами, ибо в чистом OL2 они не мерцают, это наш косяк. Но некоторые, вроде достижения Абсолютной Плавности™, крайне трудозатратны. Ибо для этого либо придётся пытаться улучшить то, что у нас есть сейчас, что абсолютно непредсказуемо ни по времени, ни по результату (если вдруг выяснится, что из-за каких-то фундаментальных ограничений OL2 просто невозможно сделать так, как хочется), либо целиком поменять движок на новый, который уже умеет зумить плавно. Что потащит за собой переделку всех поддержаных виалоном слоёв (более 30 различных реализаций), все маркеры на карте, геозоны, треки, прочую геометрию, все инструменты работы с картой, все модули, которые каким-либо образом работают с геоданными и завязались на OL2.
Если было бы возможным просто написать doEverythingSmooth: true, либо только немного переписать одну функцию обработки скроллинга — я бы так и сделал. Но, к сожалению, одно цепляется за другое и это не получается так просто
Плавность и эстетический комфорт использования карт в Wialon однозначно будет проапгрейжен, но когда — мне неизвестно.