Руководство по использованию нескольких карт и лучшие практики
При разработке приложений Mega часто возникает вопрос: стоит ли добавлять несколько карт (Block) в одну библиотеку позиционирования. Неправильное использование нескольких карт не только не повысит возможности приложения, но и может привести к снижению производительности и скачкам позиционирования.
Это руководство поможет вам правильно понять и использовать функцию нескольких карт, избегая распространенных ошибок.
Почему следует избегать добавления нескольких карт?
Основной принцип: не добавляйте несколько карт для "расширения зоны покрытия".
В подавляющем большинстве случаев в одну библиотеку позиционирования следует добавлять только одну карту Mega Block для одного места. Ниже приведены распространенные ошибочные сценарии использования, которых следует избегать:
Ошибочный сценарий A: Несколько зон
- Идея: Создать отдельные карты для соединенных между собой зон "A", "B" и "C" туристического объекта, затем добавить все три карты в библиотеку приложения, надеясь на плавное переключение при перемещении пользователя по объекту.
- Проблема: Созданные таким образом три карты не имеют математической связи в пространственных координатах и независимы друг от друга. Из-за несовпадения систем координат невозможно обеспечить плавное переключение при перемещении, что приведет к скачкам позиционирования на стыке зон.
- Решение: Для таких сценариев оптимально собрать данные по зонам "A", "B" и "C" способом, описанным в Метод сбора данных для больших пространств, обеспечив достаточные области перекрытия между ними. Затем выполните построение карты, как описано в Задача слияния больших пространств. В результате будет создана единая карта Block в единой системе координат, охватывающая все зоны. Эту карту и следует добавить в библиотеку позиционирования.
Ошибочный сценарий B: Несколько местоположений
- Идея: Создать карту для торгового центра в одном месте и карту для одноименного торгового центра в другом месте, чтобы использовать их одновременно в одном приложении.
- Проблема: Это значительно замедлит скорость позиционирования. Устройству при позиционировании необходимо сравнивать данные со всеми картами в библиотеке, что резко увеличивает объем вычислений, удлиняя время инициализации. Пользователь может находиться только в одном торговом центре одновременно, загрузка карты другого центра — пустая трата ресурсов. При высокой нагрузке на запросы к одному центру замедлится время отклика для другого.
- Решение: Создайте отдельные библиотеки позиционирования для торговых центров в разных местах, добавив в каждую только одну карту. В приложении динамически обращайтесь к соответствующей библиотеке на основе текущего местоположения пользователя.
Ошибочный сценарий C: Разное время
- Идея: Для одного и того же места собрать данные и построить карту днем, затем собрать данные и построить карту ночью, добавить обе карты в библиотеку, чтобы обеспечить пользователю одинаковый опыт в разное время суток.
- Проблема: Этот сценарий аналогичен ошибочному сценарию A — между результатами отдельных построений карт нельзя гарантировать пространственную связь.
- Решение: Объедините дневной и ночной сбор данных и выполните слияние в одну карту, как описано в Задача слияния больших пространств. Добавьте полученную единую карту Block в библиотеку позиционирования.
Ошибочный сценарий D: Разные версии
- Идея: Для одного места уже существует и используется карта версии A. В процессе эксплуатации создается обновленная карта версии B, которая добавляется в исходную библиотеку позиционирования, чтобы использовать новую карту без перевыпуска приложения.
- Проблема: Поскольку это разные версии карты одного места, при позиционировании результаты будут "прыгать" между двумя разными версиями данных.
- Решение: Выполните обновление старой карты способом, описанным в Бесповрежденное полное обновление, чтобы обновить данные карты, сохранив систему координат. После добавления обновленной карты обязательно удалите исходную версию карты из библиотеки позиционирования.
Ошибочный сценарий E: Частичное обновление
- Идея: Для одного места уже существует и используется карта версии A. В процессе эксплуатации произошли изменения в локальной области или требуется досбор небольшой зоны. Создается новая карта B и добавляется в исходную библиотеку позиционирования, чтобы использовать обновления без перевыпуска приложения.
- Проблема: Новая карта B небольшой области не имеет пространственной координатной связи с исходной картой A, что вызовет скачки позиционирования на границе старых и новых данных.
- Решение: Выполните частичное обновление старой карты способом, описанным в Частичное обновление, чтобы новая собранная область сохраняла систему координат со старой картой. После добавления обновленной карты обязательно удалите исходную версию карты из библиотеки позиционирования.
Итог: Попытка "склеить" большой мир из нескольких маленьких карт не подходит для высокоточных карт Mega. Философия Mega — единое, непрерывное в пространстве, согласованное в координатах и во времени высокоточное трехмерное представление.
Сценарии, где несколько карт действительно нужны
Когда же действительно возникает необходимость добавить несколько карт (Block) в одну библиотеку? Основные сценарии — "параллельные задачи" или "выбор из нескольких пространств", а не "пространственное объединение".
Сценарий 1: Выбор из нескольких пространств
- Описание: Ваше приложение обслуживает несколько полностью разных зон в одном месте. Но из-за структуры здания или проблем при сборе данных невозможно объединить эти зоны в данных. Пользователю может потребоваться сначала выбрать свою текущую зону. Например, разные этажи крупной больницы.
- Реализация: После выбора пользователем зоны используйте эту априорную информацию для динамической активации единственной карты, соответствующей этому месту/зоне. В любой момент времени в библиотеке позиционирования активна только одна карта. При переходе пользователя в новую зону требуется повторное подтверждение выбора зоны.
Сценарий 2: Параллельные задачи
- Описание: Ваше приложение должно одновременно отслеживать два или более независимых, заранее известных объекта. Эти объекты находятся в одном месте, но не связаны между собой и имеют сильно различающиеся характеристики. Например, несколько экспонатов в музее.
- Реализация: В этом продвинутом сценарии можно создать отдельную карту для каждого объекта и добавить эти "карты объектов" в одну библиотеку позиционирования. Однако учтите, что производительность позиционирования будет зависеть от количества объектов в библиотеке. Если объектов очень много, вам, возможно, придется искать баланс между производительностью и количеством библиотек — сгруппируйте объекты и создайте несколько библиотек позиционирования.
Поведение рендерера при использовании нескольких карт
Важно помнить, что при использовании позиционирования по нескольким картам поведение 3D-рендеринга различается в зависимости от платформы и версии.
Рекомендации по лучшим практикам
Если ваш случай действительно попадает под описание Сценариев, где несколько карт действительно нужны, или вы вынуждены использовать несколько карт, следуйте этим принципам:
- Активация по требованию: Когда пользователь делает выбор или входит в определенную зону, предоставляйте соответствующую априорную информацию при отправке запроса на позиционирование и загружайте только соответствующий 3D-контент.
- Динамическое переключение: Предоставьте понятный интерфейс для выбора сцены. Перед загрузкой 3D-контента новой карты выгрузите 3D-контент старой карты, чтобы освободить память.
- Управление состоянием: Четко управляйте текущей активной картой в коде. Отслеживайте Block ID в результатах позиционирования, чтобы различать обратную связь от разных карт.
- Мониторинг производительности: При использовании нескольких карт внимательно следите за использованием памяти устройства, задержкой позиционирования и энергопотреблением, чтобы обеспечить плавную работу приложения на целевых устройствах.
В заключение, для подавляющего большинства приложений соблюдение принципа "одна сцена — одна карта" является лучшим выбором для обеспечения производительности и стабильности позиционирования Mega.