Попытка, как говорится, не пытка. А почему бы и нет? Давайте поиграем в кросс-платформенность. Представляю первую версию FMX движка для отображения тайлов из кэша SAS.Планета.
Прямая работа со слоями, полигонами, рисунками в FMX может очень пригодиться.
Теперь на вопрос "как отобразить карту в моей программе?" можно ответить : А вот так....
Вскоре проект поселится на облаке, а пока код под катом, (он совсем небольшой, около 110 кб).
Для сборки использовалась студия Берлин Upd2.
Всем разработчикам, думаю, будет интересно посмотреть. В программе нет ни одной операции "отрисовки" (по канвасу и графическому дескриптору). Загрузили рисунки внужные места , и указали им Parent = Layer. Остальное на себя берет 3D рендерер.
Длина кода менее 50 кб...Компонент изображения - еще 30кб, остальное мусор.
23.03.2017. Версия API 0.01a. Первая стабильная альфа-версия без серьезных утечек памяти.
24.03.2017.Версия API 0.02a.
Исправлена ошибка с рандомным пропуском тайлов. FMX, как и ее предшественница VCL, враждебна не только к отрисовке графики в потоке, но и к загрузке графики в потоке. Внутренний формат загрузки заменен на TMemoryStream.
27.03.2017.Версия API 0.03a.
Код программы был разбит на несколько малюсеньких юнитов, убраны кросс-зависимости.
Приведены в порядок относительные координаты слоев карт.
28.03.2017.Версия API 0.04a.
Позиция тайлов приведена к центру экрана. Вместо миллионных координат теперь довольно маленькие. Горизонтальные артефакты яндекс-проекции заметно поубавились. 23 бит одинарной точности не хватало. Постоянное приведение к центру экрана привело к тому, что число отрисовок заметно увеличилось.
На основе исходного кода FMX был создан компонент TNVAbstractLayer3D , в котором отсутствуют округления до целых координат, и наследник TNVImage3D. Артефакты исчезли совсем.
28.03.2017.Версия API 0.05a.
Переключение масштаба колесом мыши сохраняет точку карты под мышью.
Для каждого из объектов на карте можно задать свое изображение. Размер его на карте пока будет фиксированный.
Введен режим следования центра экрана за любым из объектов (пока без поворота).
Приведение карты к центру экрана позволило пользоваться поворотом карты на произвольный угол.
Введена возможность отображать дробный масштаб. Переключение слоя осуществляется на точке Z с половиной. (соответствует тайлу Z, увеличенному в корень из 2 раз и тайлам z+1 уменьшенным в корень из 2 раз).