changeset 2184:826fc7309370

client: Added refresh button to reload the WFS layer data.
author Raimund Renkert <raimund.renkert@intevation.de>
date Mon, 11 Feb 2019 16:19:52 +0100
parents b27edd1f2353
children 9212b3d60f2a
files client/src/components/Maplayer.vue client/src/components/Zoom.vue client/src/main.js
diffstat 3 files changed, 55 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/client/src/components/Maplayer.vue	Mon Feb 11 16:16:35 2019 +0100
+++ b/client/src/components/Maplayer.vue	Mon Feb 11 16:19:52 2019 +0100
@@ -183,35 +183,41 @@
 
     // load different fairway dimension layers (level of service)
     ["1", "2", "3"].forEach(los => {
-      // loading the full WFS layer, by not setting the loader function
-      // and without bboxStrategy
-      var featureRequest = new WFS().writeGetFeature({
-        srsName: "EPSG:3857",
-        featureNS: "gemma",
-        featurePrefix: "gemma",
-        featureTypes: ["fairway_dimensions"],
-        outputFormat: "application/json",
-        filter: equalTo("level_of_service", los)
-      });
+      // loading the full WFS layer without bboxStrategy
+      var source = this.getVSourceByName("Fairway Dimensions LOS " + los)
+      var loader = function(extent, resolution, projection) {
+        var featureRequest = new WFS().writeGetFeature({
+          srsName: "EPSG:3857",
+          featureNS: "gemma",
+          featurePrefix: "gemma",
+          featureTypes: ["fairway_dimensions"],
+          outputFormat: "application/json",
+          filter: equalTo("level_of_service", los)
+        });
 
-      // NOTE: loading the full fairway_dimensions makes sure
-      //       that all are available for the intersection with the profile
-      HTTP.post(
-        "/internal/wfs",
-        new XMLSerializer().serializeToString(featureRequest),
-        {
-          headers: {
-            "X-Gemma-Auth": localStorage.getItem("token"),
-            "Content-type": "text/xml; charset=UTF-8"
+        featureRequest["outputFormat"] = "application/json";
+        // NOTE: loading the full fairway_dimensions makes sure
+        //       that all are available for the intersection with the profile
+        HTTP.post(
+          "/internal/wfs",
+          new XMLSerializer().serializeToString(featureRequest),
+          {
+            headers: {
+              "X-Gemma-Auth": localStorage.getItem("token"),
+              "Content-type": "text/xml; charset=UTF-8"
+            }
           }
-        }
-      ).then(response => {
-        this.getVSourceByName("Fairway Dimensions LOS " + los).addFeatures(
-          new GeoJSON().readFeatures(JSON.stringify(response.data))
-        );
-        // would scale to the extend of all resulting features
-        // this.openLayersMap.getView().fit(vectorSrc.getExtent());
-      });
+        ).then(response => {
+          source.addFeatures(
+            new GeoJSON().readFeatures(JSON.stringify(response.data))
+          );
+          // would scale to the extend of all resulting features
+          // this.openLayersMap.getView().fit(vectorSrc.getExtent());
+        });
+      }
+
+      layer = this.getLayerByName("Fairway Dimensions LOS " + los);
+      layer.data.getSource().setLoader(loader)
     });
 
     // load following layers with bboxStrategy (using our request builder)
--- a/client/src/components/Zoom.vue	Mon Feb 11 16:16:35 2019 +0100
+++ b/client/src/components/Zoom.vue	Mon Feb 11 16:19:52 2019 +0100
@@ -10,6 +10,12 @@
       <font-awesome-icon icon="minus"></font-awesome-icon>
     </button>
     <button
+      class="zoomButton border-0 bg-white ui-element border-right"
+      @click="refreshMap"
+    >
+      <font-awesome-icon icon="redo"></font-awesome-icon>
+    </button>
+    <button
       class="zoomButton border-0 bg-white rounded-right ui-element border-right"
       @click="zoomIn"
     >
@@ -49,6 +55,7 @@
  * Thomas Junk <thomas.junk@intevation.de>
  */
 import { mapState } from "vuex";
+import { Tile as TileLayer, Vector as VectorLayer } from "ol/layer.js";
 
 export default {
   name: "zoom",
@@ -70,6 +77,17 @@
     },
     zoomOut() {
       this.zoomLevel = this.zoomLevel - 1;
+    },
+    refreshMap() {
+      let layers = this.openLayersMap.getLayers().getArray();
+      for (let i = 0; i < layers.length; i++) {
+        let layer = layers[i];
+        if (layer instanceof VectorLayer) {
+          console.log(layer.get('source').loader_);
+          layer.getSource().clear(true)
+          layer.getSource().refresh({force: true})
+        }
+      }
     }
   }
 };
--- a/client/src/main.js	Mon Feb 11 16:16:35 2019 +0100
+++ b/client/src/main.js	Mon Feb 11 16:19:52 2019 +0100
@@ -73,7 +73,8 @@
   faUser,
   faUsersCog,
   faWater,
-  faWrench
+  faWrench,
+  faRedo
 } from "@fortawesome/free-solid-svg-icons";
 import { faAdn } from "@fortawesome/free-brands-svg-icons";
 import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
@@ -125,7 +126,8 @@
   faUser,
   faUsersCog,
   faWater,
-  faWrench
+  faWrench,
+  faRedo
 );
 import ToggleButton from "vue-js-toggle-button";