Сравните разные слои, используя Django и OpenLayers.

avatar
Massimiliano Moraca
8 августа 2021 в 18:09
50
0
0

Я разрабатываю ГИС-проект с помощью 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 %}

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

Источник

Ответы (0)