Добавить группы слоев на карту и обновить по имени

В настоящее время я использую 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. Это помогает сократить общее количество маркеров, фактически отображаемых на карте, в любое время, чтобы повысить производительность.

Другие вопросы по тегам