Скелет (компонент) для нанесения векторной графики поверх карт
Задача достаточно тривиальная, но кропотливая.
Нужно создать визуальный компонент (наследник TPanel или что-то подобное) для отображения/редактирования векторной графики поверх слоя растровой. В качестве растровой графики выступают изображения Google/Yandex/и т.д. онлайн карт. И "немножко" кода, для наследования в дальнейшем (под наследованием я понимаю что примитивы уже созданы и работают графически и на уровне пользователя (интерактива рисования), а я только добавляю свойства для вычислений бизнес-логики), и создания своих векторных примитивов. Как то: линия, полилиния, многоугольник, круг, дуга, комбинированный многоугольник (линии + дуги + круги) ну и в добавок ко всему точки привязки. Например для линии/поли/дуги = начало/конец, для многоугольника = произвольные точки привязки на стыках линий/дуг и пр ... При этом при редактировании связанные объекты (например линии) должны подтягиваться за перемещаемым объектом "аля" MsVisio.
Требования:
0) Забудьте о фиксированных координатах и привязках в виде пикселей. ТОЛЬКО "относительные" координаты в виде широта/долгота (пиксели оставьте в реализации/отрисовке - они меня не интересуют).
1) C\C++ or Delphi : будет встраиваться в существующий проект.
2) Кроссплатформенность (FireMonkey). Никаких "фич и няшек" для отдельно взятой платформы.
3) Способность подгружать частями (тайлами) карты (растры) как с онлайн сервисов (Google Maps, Yandex Maps и т.д. подгрузить строку урл-запроса из ini-файла я думаю не проблема), так и из локального кеша (база данных), ну и соответственно уметь "дёргать" методы для их (кеша) сохранения/восстановления. При этом я не требую разрабатывать БД, достаточно продумать структуру и методы выгрузки по частям хотя-бы в TStream. (не забываем об "относительности" - хранение координат только в широте/долготе).
4) Родитель(и) "примитивов" должен(ы) уметь отрисовывать себя частями относительно отображаемого Canvas. Т.е. карта может показывать часть улицы но линия (например труба) может быть проложена из другого района в третий а на экране отображаться только часть этой трубы.
5) Карты могу быть огромными (очень) а объекты связывать города, поэтому грузить всё в память нельзя!!! Растр должен отображать только то что "влазит на экран" (желательно конечно +/- для буфера и плавной прокрутки), + объекты которые отображаются (проходят) через отображаемый регион + связанные объекты этого и вышестоящего уровня (лейера/слоя)
6) Отрисовка/хранение примитивов будет базироваться на уровнях/слоях/леерах. Т.е 0-й слой - это растровая карта, все последующие слои - это вектор. На каждом векторном слое будет от 1К до 100К примитивов (зон) каждый вышестоящий слой - то-же самое, но с возможностью связывания с нижестоящим слоем(и) в одной или нескольких точках. Своеобразное дерево...
7) Все объекты должны уметь "дёргать" методы сохранения/восстановления в/из (TStream как минимум, БД - желательно). Основной "визуальный компонент" - должен уметь "дёрнуть цепочку" сохранения/восстановления И уметь "дёргать" "подгрузку" при отрисовке/смещении просмотра/изменении отображения (в т.ч. редактировании).
8) По примитивах:
8.1) линии и все производные должны уметь рассчитывать свою полную длину в метрах, и рассчитывать/отображать на своей длине точки частичной длины начиная от любого конца.
8.2) многоугольники и др. замкнутые фигуры и все производные должны уметь рассчитывать свою площадь в кв. метрах.
9) Ну и напоследок немножко плюсов для упрощения задачи 🙂 Масштабирование изображений - фиксированное. Фиксация относительно масштабов онлайн-сервисов карт (от 0 до 19). Т.е. растровую подложку - вообще не "ресайзим" (берем то что выдают сервисы), а векторы "ресайзим" относительно фиксированных значений ...
10) Ну и напоследок, не очевидное: объекты и слои их включающие, должны иметь макс и мин значения масштаба отображения (масштаб от сервисов карт). Т.е. нет нужды отображать на карте всей земли топографию водопровода "мухосранска" - при масштабе 0 - весь водопровод уместиться в "0,хрен десятых" точки на экране, а вот на масштабе от 16 до 18 - можно и показать .... И при этом, самое "не очевидное" - сами "примитивы", и толщину их линий - тоже нужно масштабировать в пределах этого диапазона ...
ЗЫ: Жду предложений, возможно и с дальнейшим сотрудничеством.
ЗЗЫ: Т.З. Написано своими словами что-бы не ограничивать Ваше творчество.
Мне Важен как конечный результат так и его масштабируемость.
ЗЗЗЫ: Всё обговаривается!. Но миллионов не ждите, - я не гугл ..., а такой же как и Вы "программер", но занимаюсь своей нишей в БД, и лезть в графику и пространственные вычисления - мне влом ... 🙂
PPPPS: Бюджет договорной
-
По моему скромному мнения, автор сия проекта, будучи программистом, "немножко" в розовых очках.
На делфях тут от 3000 часов работы, боюсь динозавры помнящие что такое TPanel, могут и не дожить)) -
В первой же строке я написал что это кропотливая работа 🙂
И да я не в розовых очках, я действительно понимаю что это не работа однодневка за 100 баксов. Готов рассмотреть работу команды программеров.
И да это почти готовый движок. Почти, - потому как я реально представляю что нужно написать и что потом МНЕ придётся допиливать сверху. Представляю потому как то что нужно (ну почти) уже писал отдельно на VBA (так сложилось), но теперь это нужно написать на DELPHI\С/С++ (не портировать а именно заново написать). И я, зная чего это будет стоить, - хотел-бы просто заплатить чем заниматься этим гемором самому ....
-
ЗЫ: на VBA у меня ушло 3,5 недели работы, так что 3000 часов ИМХО - слегка завышено.
-
Нужно создать визуальный компонент (наследник TPanel или что-то подобное) для отображения/редактирования векторной графики поверх слоя растровой.
...
1) C\C++ or Delphi : будет встраиваться в существующий проект.
TPanel - это что-то из VCL, что ли? Т.е. по сути не C++, а Builder C++ (или как оно теперь там зовётся)
Имело бы смысл добавить к описанию предполагаемый вид API, если допускается реализация на C++.
-
Актуальные фриланс-проекты в категории C и C++
Project for the development of software for microcontrollersПриветствую уважаемые! Ищу специалиста или команду, которая сможет разработать программную часть для распространенных микроконтроллеров типа Arduino, ESP или Raspberry-Pi. Ключевые моменты: - контроллер должен получать на вход 5 аналоговых сигналов, - на выходе должен… C и C++, Системное программирование ∙ 1 ставка |
Скрипт который будет взаимодействовать по картинкеНужен скрипт который будет взаимодействовать по картинке + тексту )названию товара на экране) + цене. Проще говоря, скрипт должен нажимать на логотип площадки (слева сверху белый текст) для обновления ассортимента товаров (каждые секунды 3-5), затем должен быть поиск по картинке… C и C++, Python ∙ 8 ставок |
Создать телеграмм бота с интеграцией GPT
12 000 UAH
Техническое задание: 1) Создать телеграм бота по примеру, При старте спрашивать язык: - русский -английский Все остальное по примеру первого бота: предложить отправить фото с которого будет взято лицо, второе - попросить видео на которое будет накладываться лицо. Затем в… C и C++, Python ∙ 12 ставок |
Настройка обмена данными между jetson nano и другим устройством по can шиНастроить обмен данными между jetson nano и другим устройством по can шине с помощью RS485 CAN документации и примера здесь: https://www.waveshare.com/wiki/RS485_CAN_for_Jetson_Nano Пакет передаемых данных разбит на фремах размером по 8 байтов, кодирование первых 7 байтов… C и C++, Linux и Unix ∙ 2 ставки |
Інфракрасний датчик температури ZigBeeПотрібен Інфракрасний датчик температури з передачею данних через протоколо ZigBee на сервер Home Assistants в MQTT Оборудованіе: Модуль ESP32-C6-WROOM-1-N8 + инфракрасного термометра MLX90614 + добавить светодиод лазер для обозначения где считивается температура C и C++, Встраиваемые системы и микроконтроллеры ∙ 1 ставка |