SAS.NEXT - FMX version of SAS.Planet
- DJ VK
- Гуру
- Сообщения: 1468
- Зарегистрирован: 16 апр 2009, 13:57
- Откуда: 8 км. от МКАД
- Благодарил (а): 80 раз
- Поблагодарили: 314 раз
SAS.NEXT - FMX version of SAS.Planet
Попытка, как говорится, не пытка. А почему бы и нет? Давайте поиграем в кросс-платформенность. Представляю первую версию 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 раз).
Прямая работа со слоями, полигонами, рисунками в 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 раз).
Последний раз редактировалось DJ VK 29 мар 2017, 11:13, всего редактировалось 2 раза.
- DJ VK
- Гуру
- Сообщения: 1468
- Зарегистрирован: 16 апр 2009, 13:57
- Откуда: 8 км. от МКАД
- Благодарил (а): 80 раз
- Поблагодарили: 314 раз
Re: SAS.NEXT - FMX version of SAS.Planet
- Вложения
-
- Mapper3D.rar
- (106.98 КБ) 426 скачиваний
Последний раз редактировалось DJ VK 29 мар 2017, 11:14, всего редактировалось 5 раз.
- DJ VK
- Гуру
- Сообщения: 1468
- Зарегистрирован: 16 апр 2009, 13:57
- Откуда: 8 км. от МКАД
- Благодарил (а): 80 раз
- Поблагодарили: 314 раз
Re: SAS.NEXT - FMX version of SAS.Planet
2. unit TNVMapObject
Движущийся или неподвижный объект на карте.
Карта
Описания карт sas.
Движущийся или неподвижный объект на карте.
- скрытый текст: показать
Карта
- скрытый текст: показать
Описания карт sas.
- скрытый текст: показать
Последний раз редактировалось DJ VK 29 мар 2017, 10:38, всего редактировалось 3 раза.
- DJ VK
- Гуру
- Сообщения: 1468
- Зарегистрирован: 16 апр 2009, 13:57
- Откуда: 8 км. от МКАД
- Благодарил (а): 80 раз
- Поблагодарили: 314 раз
Re: SAS.NEXT - FMX version of SAS.Planet
5. unit TNVTileLoader
Загрузчик тайлов с диска. Работает в своем потоке.
Кэш для хранения загруженных тайлов
Загрузчик тайлов с диска. Работает в своем потоке.
- скрытый текст: показать
Кэш для хранения загруженных тайлов
- скрытый текст: показать
Последний раз редактировалось DJ VK 29 мар 2017, 11:11, всего редактировалось 3 раза.
- DJ VK
- Гуру
- Сообщения: 1468
- Зарегистрирован: 16 апр 2009, 13:57
- Откуда: 8 км. от МКАД
- Благодарил (а): 80 раз
- Поблагодарили: 314 раз
Re: SAS.NEXT - FMX version of SAS.Planet
7. unit TNVTileDesk
Описание тайла для составления списка загрузки.
описание будут позже
Описание тайла для составления списка загрузки.
- скрытый текст: показать
описание будут позже
- скрытый текст: показать
- DJ VK
- Гуру
- Сообщения: 1468
- Зарегистрирован: 16 апр 2009, 13:57
- Откуда: 8 км. от МКАД
- Благодарил (а): 80 раз
- Поблагодарили: 314 раз
Re: SAS.NEXT - FMX version of SAS.Planet
30.03.2017.Версия API 0.06a.
Структура программы изменена. Маска поиска уже загруженных тайлов и итератор вынесены в отдельный класс.
В программе есть некоторые глюки, которые непросто отловить.
Добавлено обновление объектов при изменении координат экрана.
02.04.2017.Версия API 0.07a.
Исправлена установка размера кэша.
Добавлен код для отображения карты при смене зума в 2 этапа - сначала растягивание-сжатие, потом перерисовка после подгрузки. (Код до сих пор еще сырой).
Детектирование конца загрузки по пустому тайлу.
03.04.2017.Версия API 0.08a.
Добавлено отображение координат центра экрана.
Установки флага обновления и его чтение обрамлены потокозащищенной блокировкой.
04.04.2017.Версия API 0.09a.
Все движения карты осуществляются через пересчет абсолютных координат центра экрана. Ошибок с перескоком карты при нехватки времени на отрисовку больше нет.
Исправлено определение коэффициента масштабирования для текущего зума.
Увеличен размер очереди загружаемых тайлов с 10 до 100.
Убраны повторные присваивания Parent.
Кроссплатформенная функция TPath.Combine (на случай возможных глюков) заменена более простым аналогом.
07.04.2017.Версия API 0.10a.
Для объекта на карте добавлена установка размеров.
Добавлен новый класс объектов на карте с использованием векторных путей. Произвольный размер и цвет маркеров объектов.
Исправлен размер объекта при коэффициенте масштабирования зума отличном от единицы.
Устранена утечка памяти в основной программе.
10.04.2017.Версия API 0.11a.
Добавлено отслеживание объектов, находящихся за пределами экрана. Стрелка показывает направление на невидимый объект.
Возможность добавления названия объекта.
Помимо координат и азимута можно задавать скорость движения объекта.
Beta
органы управления :
-вкл\выкл панель управления.
-масштаб. текстовый ввод с точность до 0,01. кнопки +/- 0.25
-колесо масштаба. шаг 0.01. 1 оборот = 1 масштаб.
-стрелки движения карты.
-колесо поворота карты
-шаг движения карты (от 1 до 512 пикселов)
11.04.2017.Версия API 1.00b.
Полностью переработан интерфейс программы. Добавлены "контролы" управления картой, по умолчанию спрятанные в левом верхнем углу.
Кнопка выхода из программы спрятана в правом верхнем углу.
Добавлено вычисление дистанции до объекта от центра экрана или отслеживаемого объекта.
12.04.2017.Версия API 1.01b.
Список объектов вынесен в отдельный класс.
Список карт вынесен в отдельный класс.
Добавлено определение ЮШ / СШ и ВД / 3Д.
Невидимые поля по краям карты подобраны под полное перекрытие экрана при повороте на любой угол.
Исправлено движение повернутой на угол карты мышью.
Добавлена метка "свой" для одного из объектов. При заданной метке расстояния меряются от своего объекта, а не от центра экрана.
API v 1.01b было скачано 6 раз.
Структура программы изменена. Маска поиска уже загруженных тайлов и итератор вынесены в отдельный класс.
В программе есть некоторые глюки, которые непросто отловить.
Добавлено обновление объектов при изменении координат экрана.
02.04.2017.Версия API 0.07a.
Исправлена установка размера кэша.
Добавлен код для отображения карты при смене зума в 2 этапа - сначала растягивание-сжатие, потом перерисовка после подгрузки. (Код до сих пор еще сырой).
Детектирование конца загрузки по пустому тайлу.
03.04.2017.Версия API 0.08a.
Добавлено отображение координат центра экрана.
Установки флага обновления и его чтение обрамлены потокозащищенной блокировкой.
04.04.2017.Версия API 0.09a.
Все движения карты осуществляются через пересчет абсолютных координат центра экрана. Ошибок с перескоком карты при нехватки времени на отрисовку больше нет.
Исправлено определение коэффициента масштабирования для текущего зума.
Увеличен размер очереди загружаемых тайлов с 10 до 100.
Убраны повторные присваивания Parent.
Кроссплатформенная функция TPath.Combine (на случай возможных глюков) заменена более простым аналогом.
07.04.2017.Версия API 0.10a.
Для объекта на карте добавлена установка размеров.
Добавлен новый класс объектов на карте с использованием векторных путей. Произвольный размер и цвет маркеров объектов.
Исправлен размер объекта при коэффициенте масштабирования зума отличном от единицы.
Устранена утечка памяти в основной программе.
10.04.2017.Версия API 0.11a.
Добавлено отслеживание объектов, находящихся за пределами экрана. Стрелка показывает направление на невидимый объект.
Возможность добавления названия объекта.
Помимо координат и азимута можно задавать скорость движения объекта.
Beta
органы управления :
-вкл\выкл панель управления.
-масштаб. текстовый ввод с точность до 0,01. кнопки +/- 0.25
-колесо масштаба. шаг 0.01. 1 оборот = 1 масштаб.
-стрелки движения карты.
-колесо поворота карты
-шаг движения карты (от 1 до 512 пикселов)
11.04.2017.Версия API 1.00b.
Полностью переработан интерфейс программы. Добавлены "контролы" управления картой, по умолчанию спрятанные в левом верхнем углу.
Кнопка выхода из программы спрятана в правом верхнем углу.
Добавлено вычисление дистанции до объекта от центра экрана или отслеживаемого объекта.
12.04.2017.Версия API 1.01b.
Список объектов вынесен в отдельный класс.
Список карт вынесен в отдельный класс.
Добавлено определение ЮШ / СШ и ВД / 3Д.
Невидимые поля по краям карты подобраны под полное перекрытие экрана при повороте на любой угол.
Исправлено движение повернутой на угол карты мышью.
Добавлена метка "свой" для одного из объектов. При заданной метке расстояния меряются от своего объекта, а не от центра экрана.
API v 1.01b было скачано 6 раз.
- DJ VK
- Гуру
- Сообщения: 1468
- Зарегистрирован: 16 апр 2009, 13:57
- Откуда: 8 км. от МКАД
- Благодарил (а): 80 раз
- Поблагодарили: 314 раз
Re: SAS.NEXT - FMX version of SAS.Planet
13.04.2017.Версия API 1.02b.
Исправлено масштабирование карты колесом мыши при повернутой карте.
Добавлен маркер центра экрана.
Добавлены кнопки ориентировки карты по 4-м сторонам света.
Координаты сгруппированы в статус бар.
Протестирован код для переключения карт в черно-белый режим, а также изменение яркости и контраста. С первого раза не заработало, пока отложен.
Добавлена поддержка тайлов прямоугольной формы.
Поддержан произвольный размер тайлов.
Добавлены множители, позволяющие задать горизонтальное и вертикальное число тайлов(а через размер тайла - кол-во пикселов) в масштабе, отличное от степени двойки.
api v1.02 было скачано 10 раз.
Исправлено масштабирование карты колесом мыши при повернутой карте.
Добавлен маркер центра экрана.
Добавлены кнопки ориентировки карты по 4-м сторонам света.
Координаты сгруппированы в статус бар.
Протестирован код для переключения карт в черно-белый режим, а также изменение яркости и контраста. С первого раза не заработало, пока отложен.
Добавлена поддержка тайлов прямоугольной формы.
Поддержан произвольный размер тайлов.
Добавлены множители, позволяющие задать горизонтальное и вертикальное число тайлов(а через размер тайла - кол-во пикселов) в масштабе, отличное от степени двойки.
api v1.02 было скачано 10 раз.
- DJ VK
- Гуру
- Сообщения: 1468
- Зарегистрирован: 16 апр 2009, 13:57
- Откуда: 8 км. от МКАД
- Благодарил (а): 80 раз
- Поблагодарили: 314 раз
Re: SAS.NEXT - FMX version of SAS.Planet
14.04.2017.Версия API 1.03b.
Исправлено отображение объектов внутри и за пределами экрана при повернутой карте.
Добавлено хранение высот объектов.
Ускорен процесс загрузки тайлов на 200 мсек за счет отключения паузы. Основные затраты (около 700 мс) - внутреннее конвертирование jpg в bitmap.
Добавлен счетчик незавершенных загрузок для двухуровневой смены зума.
17.04.2017.Версия API 1.04b.
добавлена формула вычисление расстояний на карте.
добавлена на экран, но не подключена, масштабная линейка
Добавлен вывод названий (текстовых меток) объектов в одну из 8 позиций в зависимости от направления стрелки.
18.04.2017.Версия API 1.05b.
Подключена масштабная линейка.
Сделано вычисление м\пиксель
Отображаемые в статусе координаты и метры на пиксель привязаны к позиции мыши.
В статус добавлено отображение текущего масштаба и текущий zoom.
api 1.05 скачано 4 раза.
Исправлено отображение объектов внутри и за пределами экрана при повернутой карте.
Добавлено хранение высот объектов.
Ускорен процесс загрузки тайлов на 200 мсек за счет отключения паузы. Основные затраты (около 700 мс) - внутреннее конвертирование jpg в bitmap.
Добавлен счетчик незавершенных загрузок для двухуровневой смены зума.
17.04.2017.Версия API 1.04b.
добавлена формула вычисление расстояний на карте.
добавлена на экран, но не подключена, масштабная линейка
Добавлен вывод названий (текстовых меток) объектов в одну из 8 позиций в зависимости от направления стрелки.
18.04.2017.Версия API 1.05b.
Подключена масштабная линейка.
Сделано вычисление м\пиксель
Отображаемые в статусе координаты и метры на пиксель привязаны к позиции мыши.
В статус добавлено отображение текущего масштаба и текущий zoom.
api 1.05 скачано 4 раза.
- DJ VK
- Гуру
- Сообщения: 1468
- Зарегистрирован: 16 апр 2009, 13:57
- Откуда: 8 км. от МКАД
- Благодарил (а): 80 раз
- Поблагодарили: 314 раз
Re: SAS.NEXT - FMX version of SAS.Planet
19.04.2017.Версия API 1.06b.
Поправлена ориентация текста при повернутой карте.
Доделана двухступенчатая отрисовка смены масштаба.
Добавлена поддержка системного датчика позиционирования (не тестировалось).
Добавлено чтение бинарного формата карты, но не подключено (индексные таблицы пока не обрабатываются)
Убраны тормоза при движении карты.
ожидается Версия API 1.07b.
Условия использования кода:
Необходимо указать автора (C) 2017 DJ VK и ссылку на сайт SASGIS.
Необходимо опубликовать исходники вашей программы и оставить здесь ссылку.
Использование в коммерческих целях опубликованного кода недопустимо. (По вопросам создания и приобретения коммерческой версии обращаться лично.)
Продажа скачанных с помощью SAS.Планета спутниковых снимков и карт сама по себе абсолютно незаконна и нелегальна, в связи с чем продажа программы со скачанными снимками третьим лицам бессмысленна.
Всячески приветствуется тестирование и доработка кода по вопросам совместимости с android и другими OS. Присоединяйтесь.
todo. (В перспективе).
+ добавить в информацию об объекте ошибку определения координат.
+ информация об отслеживаемом объекте (скорость, дистанция, азимут, координаты).
+ выбор объекта из окна программы.
+ доделать бинарный формат кэша sas4ce
+ проработать интерфейс под тачскрин и отсутствие мыши.
+ поддержать gps датчик на com-порт
Поправлена ориентация текста при повернутой карте.
Доделана двухступенчатая отрисовка смены масштаба.
Добавлена поддержка системного датчика позиционирования (не тестировалось).
Добавлено чтение бинарного формата карты, но не подключено (индексные таблицы пока не обрабатываются)
Убраны тормоза при движении карты.
ожидается Версия API 1.07b.
Условия использования кода:
Необходимо указать автора (C) 2017 DJ VK и ссылку на сайт SASGIS.
Необходимо опубликовать исходники вашей программы и оставить здесь ссылку.
Использование в коммерческих целях опубликованного кода недопустимо. (По вопросам создания и приобретения коммерческой версии обращаться лично.)
Продажа скачанных с помощью SAS.Планета спутниковых снимков и карт сама по себе абсолютно незаконна и нелегальна, в связи с чем продажа программы со скачанными снимками третьим лицам бессмысленна.
Всячески приветствуется тестирование и доработка кода по вопросам совместимости с android и другими OS. Присоединяйтесь.
todo. (В перспективе).
+ добавить в информацию об объекте ошибку определения координат.
+ информация об отслеживаемом объекте (скорость, дистанция, азимут, координаты).
+ выбор объекта из окна программы.
+ доделать бинарный формат кэша sas4ce
+ проработать интерфейс под тачскрин и отсутствие мыши.
+ поддержать gps датчик на com-порт
- vdemidov
- Гуру
- Сообщения: 1687
- Зарегистрирован: 12 дек 2008, 13:10
- Откуда: Киев
- Благодарил (а): 191 раз
- Поблагодарили: 157 раз
Re: SAS.NEXT - FMX version of SAS.Planet
Зря не пользуешься битбакетом или гитхабом для хранения исходников. Архивчики с версиями это реально прошлый век. Даже для одного человека система контроля версий это очень нужная штука. Просто не представляю как можно писать что-то сложнее хелло-вордла без использования СКВ.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.