Добавить группы слоев на карту и обновить по имени
В настоящее время я использую ngx-leaflet 4.0.0 с Angular 6.x и RXjs 6.x. У меня есть куча наблюдаемых, которые генерируют / поток слоев, которые должны быть нарисованы на карте.
Когда у нас много маркеров, то, как и следовало ожидать, производительность ухудшается. Это, вероятно, связано с тем, что я в основном объединяю все маркеры в один отдельный массив, который я передаю в leafletLayers.
В идеале я добавляю, удаляю или обновляю только одну группу слоев, используя ее имя. К сожалению, я не знаю, как использовать LayerGroups, как предлагается в качестве одного из двух улучшений производительности при работе с большим количеством маркеров. Я хочу использовать структуру данных, как вы видите ниже, это возможно?
blueLayerGroup: L.LayerGroup
redLayerGroup: L.LayerGroup
{
"BlueShips": blueLayerGroup,
"RedShips": redLayerGroup
}
Я не использую leafletMapControl, у нас есть собственный пользовательский интерфейс для выбора слоев.
1 ответ
Если вы хотите попробовать использовать layerGroups, вы можете попытаться эмулировать следующий подход:
В вашем компоненте просто есть две группы слоев, которые вы добавляете в массив листов листовки:
redLayerGroup = L.layerGroup();
blueLayerGroup = L.layerGroup();
layers = [ blueLayerGroup, redLayerGroup ];
Затем вы просто добавляете слои в группы слоев или удаляете их по мере необходимости:
addLayerToLayerGroup(layer: L.Layer, layerGroup: L.LayerGroup) {
layerGroup.addLayer(layer);
}
removeLayerFromLayerGroup(layer: L.Layer, layerGroup: L.LayerGroup) {
layerGroup.removeLayer(layer);
}
Этот подход не использует ngx-листовку для синхронизации маркеров. Ngx-листовка обрабатывает только сами группы слоев (если они добавлены или удалены из массива слоев).
Это может или не может решить вашу проблему производительности, хотя. Я всегда находил, что более двух сотен маркеров заставили Leaflet замедлиться в целом. Если это работает для вас, есть плагин Leaflet.markercluster для ngx-leaflet. Это помогает сократить общее количество маркеров, фактически отображаемых на карте, в любое время, чтобы повысить производительность.