Mercurial > gemma
view client/src/components/layers/Layerselect.vue @ 4594:db4e7fecad0d iso-areas
Updated SLD templates for sounding results and differences.
author | Raimund Renkert <raimund@renkert.org> |
---|---|
date | Wed, 09 Oct 2019 13:29:43 +0200 |
parents | 02cf2b4be955 |
children | 702f06d827a8 |
line wrap: on
line source
<template> <div class="d-flex flex-column flex-start px-2 border-bottom" style="border-bottom-style: dashed !important;" > <div class="d-flex"> <input v-for="map in openLayersMaps" :key="map.getTarget()" class="mt-1 mr-1" type="checkbox" @change="toggle(map)" :checked="isVisible(map)" /> <LegendElement class="pointer" :layer="layer" @click.native="toggle()" /> <label class="pointer layername form-check-label ml-1" @click="toggle()"> {{ label }} </label> </div> <div> <div v-if="isVisible() && layer.get('id') === 'BOTTLENECKISOLINE'"> <img class="rounded my-1 d-block" :src="isolinesLegendImgDataURL" /> </div> <div v-if="isVisible() && layer.get('id') === 'DIFFERENCES'"> <img class="rounded my-1 d-block" :src="differencesLegendImgDataURL" /> </div> </div> </div> </template> <script> /* This is Free Software under GNU Affero General Public License v >= 3.0 * without warranty, see README.md and license for details. * * SPDX-License-Identifier: AGPL-3.0-or-later * License-Filename: LICENSES/AGPL-3.0.txt * * Copyright (C) 2018, 2019 by via donau * – Österreichische Wasserstraßen-Gesellschaft mbH * Software engineering by Intevation GmbH * * Author(s): * * Thomas Junk <thomas.junk@intevation.de> * * Bernhard Reiter <bernhard.reiter@intevation.de> */ import { HTTP } from "@/lib/http"; import { displayError } from "@/lib/errors"; import { mapState, mapGetters } from "vuex"; export default { components: { LegendElement: () => import("./LegendElement") }, props: ["layerId"], computed: { ...mapState("map", [ "openLayersMaps", "isolinesLegendImgDataURL", "differencesLegendImgDataURL", "ongoingRefresh" ]), ...mapGetters("map", ["openLayersMap"]), ...mapState("bottlenecks", ["selectedSurvey"]), layer() { return this.openLayersMap().getLayer(this.layerId); }, label() { return this.$gettext(this.layer.get("label")); } }, watch: { ongoingRefresh() { if (this.ongoingRefresh) return; this.refreshLegend(); } }, methods: { refreshLegend() { if (this.layer.get("id") === "BOTTLENECKISOLINE") { this.loadLegendImage( "sounding_results_areas_geoserver", "isolinesLegendImgDataURL" ); } if (this.layer.get("id") === "DIFFERENCES") { this.loadLegendImage( "sounding_differences", "differencesLegendImgDataURL" ); } }, toggle(map) { if (map) { if ( (this.layerId === "BOTTLENECKISOLINE" || this.layerId === "DIFFERENCES") && !this.selectedSurvey ) { map .getLayer(this.layerId) .getSource() .updateParams({ cql_filter: `bottleneck_id='NO_BOTTLENECK_SELECTED'` }); } map .getLayer(this.layerId) .setVisible(!map.getLayer(this.layerId).getVisible()); if ( this.layerId === "GAUGES" || this.layerId === "STRETCHES" || this.layerId === "BOTTLENECKS" || this.layerId === "SECTIONS" ) { map.getLayer("DATAAVAILABILITY").changed(); } } else { this.openLayersMaps.forEach(m => { m.getLayer(this.layerId).setVisible( !m.getLayer(this.layerId).getVisible() ); }); } }, isVisible(map) { if (map) { return map.getLayer(this.layerId).getVisible(); } else { let isVisible = false; this.openLayersMaps.forEach(m => { if (m.getLayer(this.layerId).getVisible()) { isVisible = true; } }); return isVisible; } }, loadLegendImage(layer, storeTarget) { HTTP.get( `/internal/wms?REQUEST=GetLegendGraphic&VERSION=1.3.0&FORMAT=image/png&WIDTH=20&HEIGHT=20&LAYER=${layer}&legend_options=columns:4;fontAntiAliasing:true&SCALE=5000`, { headers: { Accept: "image/png", "X-Gemma-Auth": localStorage.getItem("token") }, responseType: "blob" } ) .then(response => { const reader = new FileReader(); reader.onload = event => { this.$store.commit("map/" + storeTarget, event.target.result); }; reader.readAsDataURL(response.data); }) .catch(error => { displayError({ title: this.$gettext("Backend Error"), message: `${error.response.status}: ${error.response.statusText}` }); }); } }, created() { this.refreshLegend(); } }; </script>