Вопрос или проблема
Мне нужно нарисовать несколько стрел на карте спутникового обзора в приложении Angular, которое я разрабатываю. Мы используем Plotly по всему приложению, однако у меня возникла проблема с тем, что рендеринг трасс становится неприемлемо медленным, когда их много. Каждая стрела, которую я помещаю на карту, является трассой.
Я попробовал AGM (Angular Google Maps), и он идеально подходит для моего приложения, однако для меня существует препятствие для использования AGM — это то, что каждая стрела отображается в HTML. Мы не можем допустить этого, так как данные, которые мы показываем, являются конфиденциальными.
Существуют ли альтернативы для использования карт? Вот скриншот того, как должен выглядеть мой конечный результат.
Спасибо
Четыре года спустя … Я настоятельно рекомендую LeafletJs, который я использую во всех своих приложениях для карт Angular.
Демонстрация Маркеры с пользовательскими иконками должна сделать большую часть работы за вас; просто замените листья на стрелы.
Ответ или решение
Ваша проблема с медленной отрисовкой трасс в Plotly и ограничениями AGM (Angular Google Maps) вполне понятна, и вы находитесь на правильном пути, ищя альтернативные решения для работы с картами в вашем приложении на Angular.
Я рекомендую обратить внимание на библиотеку LeafletJS. Эта библиотека легкая и быстрая, и прекрасно подходит для картографической визуализации в Angular-приложениях.
Основные преимущества LeafletJS:
-
Легкость и производительность: LeafletJS оптимизирован для работы с большим количеством объектов на карте, что делает его отличным выбором для отображения множества стрелок, как в вашем случае.
-
Богатый набор возможностей: В LeafletJS вы можете использовать пользовательские иконки для маркеров, что позволит вам легко заменить стандартные маркеры на стрелки.
-
Поддержка различных слоев и взаимодействий: Вы можете добавлять различные слои карт, настраивать взаимодействия и управлять отображением объектов на карте.
Как использовать LeafletJS в вашем Angular приложении:
-
Установка Leaflet:
Вам необходимо установить Leaflet с помощью npm:npm install leaflet
-
Импорт и настройка:
В вашем компоненте, где вы хотите отобразить карту, импортируйте Leaflet:import * as L from 'leaflet';
-
Создание карты:
В методеngOnInit()
создайте экземпляр карты и добавьте слои:ngOnInit(): void { const map = L.map('mapId').setView([latitude, longitude], zoomLevel); L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 19 }).addTo(map); }
-
Добавление стрелок:
Чтобы добавить стрелки, вы можете использовать пользовательские иконки. Вы можете создать стрелки в формате изображения и использовать их как иконки:const arrowIcon = L.icon({ iconUrl: 'path/to/arrow.png', iconSize: [25, 25], // размеры иконки iconAnchor: [12, 12] // точка привязки }); L.marker([latitude, longitude], { icon: arrowIcon }).addTo(map);
-
Скрытие данных:
В LeafletJS вы можете управлять отображением объектов, не выводя данные в HTML. Все объекты находятся внутри Canvas, а данные могут быть хранены в переменных или служебных объектах, которые не отображаются на сайте.
Заключение
LeafletJS – мощный инструмент для картографической визуализации, который позволяет минимизировать проблемы производительности и визуализировать данные так, как вам нужно, не раскрывая при этом никаких чувствительных данных. Ознакомьтесь с документацией Leaflet для получения дополнительной информации и примеров. Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться!