Сравнение различных слоев с помощью 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 %}
Есть предложения?