Сравнение различных слоев с помощью Django и OpenLayers

Я разрабатываю ГИС-проект с использованием Django и Openlayers. Я создал карту сравнения, которая с помощью слайдера позволяет сравнивать две WMS. Теперь я хочу сделать кое-что более хитрое, потому что я хочу дать пользователю возможность выбрать, какие WMS сравнивать. Поэтому в своей модели я создал ForeignKey, который представляет статический слой, и ManyToManyField, который содержит список слоев для сравнения со статическим слоем.

Я смогу создать шаблон, который даст пользователю возможность активировать/деактивировать один слой:

  {% for layer in webgis_single.layers.all %}
    const source{{ layer.wms_layer_name|cut:"_" }} = wmsMainSource.createWMSLayer(
        '{{ layer.title }}', '{{ layer.wms_layer_path }}', '{{ layer.wms_layer_name }}',
        {% if layer.wms_layer_style == None %}null{% endif %}{% if layer.wms_layer_style != None %}'{{ layer.wms_layer_style }}'{% endif %},
        {{ layer.set_max_zoom }}, {{ layer.set_min_zoom }},
        {{ layer.set_zindex }}, {{ layer.set_opacity }}
      );
      $('#{{ layer.pk }}_{{ layer.wms_layer_name }}').on('change', function() {
        let isChecked = $(this).is(':checked');
        if (isChecked) {
          mapCanvas.addLayer(source{{ layer.wms_layer_name|cut:"_" }});
        } else {
          mapCanvas.removeLayer(source{{ layer.wms_layer_name|cut:"_" }});
        }
    });
  {% endfor %}

Но я заблокирован на возможности деактивировать активный слой, когда есть список активируемых слоев:

{% for layer in webgis_single.map_swipe_right.all %}
  const rightMap{{ layer.wms_layer_name|cut:"_" }} = wmsMainSource.createWMSLayer(
      '{{ layer.title }}', '{{ layer.wms_layer_path }}', '{{ layer.wms_layer_name }}',
      {% if layer.wms_layer_style == None %}null{% endif %}{% if layer.wms_layer_style != None %}'{{ layer.wms_layer_style }}'{% endif %},
      {{ layer.set_max_zoom }}, {{ layer.set_min_zoom }},
      {{ layer.set_zindex }}, {{ layer.set_opacity }}
    );
    $('#{{ layer.pk }}_{{ layer.wms_layer_name }}').on('change', function() {
      let isChecked = $(this).is(':checked');
      if (isChecked) {
        mapCanvas.addLayer(rightMap{{ layer.wms_layer_name|cut:"_" }});
        // All list of layers that are not in addLayer
        mapCanvas.removeLayer(rightMap_2);
        mapCanvas.removeLayer(rightMap_3);
        ...
      } else {
        mapCanvas.removeLayer(rightMap{{ layer.wms_layer_name|cut:"_" }});
      }
  });
{% endfor %}

Есть предложения?

Вернуться на верх