changeset 740:b9c69f016e0c

Merged.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 24 Sep 2018 12:38:25 +0200
parents b800eb2a0846 (current diff) d7530644dde3 (diff)
children 8bb2e48e2dfd
files
diffstat 3 files changed, 107 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/client/package.json	Mon Sep 24 12:35:31 2018 +0200
+++ b/client/package.json	Mon Sep 24 12:38:25 2018 +0200
@@ -11,6 +11,9 @@
     "test:e2e": "vue-cli-service test:e2e"
   },
   "dependencies": {
+    "@turf/distance": "^6.0.1",
+    "@turf/helpers": "^6.1.4",
+    "@turf/line-intersect": "^6.0.2",
     "animate.css": "^3.7.0",
     "axios": "^0.18.0",
     "bootstrap": "^4.1.1",
--- a/client/src/map/Maplayer.vue	Mon Sep 24 12:35:31 2018 +0200
+++ b/client/src/map/Maplayer.vue	Mon Sep 24 12:38:25 2018 +0200
@@ -27,6 +27,14 @@
 import { Vector as VectorLayer } from "ol/layer.js";
 import { Vector as VectorSource } from "ol/source.js";
 
+import distance from "@turf/distance";
+import {
+  lineString as turfLineString,
+  polygon as turfPolygon
+} from "@turf/helpers";
+//import { lineIntersect as turfLineIntersect } from "@turf/line-intersect";
+import lineIntersect from "@turf/line-intersect";
+
 export default {
   name: "maplayer",
   props: ["drawMode", "lat", "long", "zoom", "split"],
@@ -74,15 +82,15 @@
         source: this.vectorSource,
         type: this.drawMode
       });
-      draw.on("drawstart", function(event) {
-        console.log(event);
+      draw.on("drawstart", function(/* event */) {
+        // console.log(event);
         that.vectorSource.clear(); // remove old features when draw starts
       });
       draw.on("drawend", this.drawEnd);
       return draw;
     },
     drawEnd(event) {
-      console.log(event);
+      // console.log(event);
       var inputLineString = event.feature.getGeometry().clone();
       if (inputLineString.getType() == GeometryType.LINE_STRING) {
         // prepare to send the first line seqment to the server as GeoJSON
@@ -116,26 +124,57 @@
               .getExtent(),
             feature => {
               // transform back to prepare for usage
-              var g = feature
+              var intersectingPolygon = feature
                 .getGeometry()
                 .clone()
                 .transform("EPSG:3857", "EPSG:4326");
-              // console.log("intersecting:", g);
-              this.addToFairwayRectangle(profileLine, g, diagStack);
+              console.log("intersecting:", intersectingPolygon);
+              this.addToFairwayRectangle(
+                profileLine,
+                intersectingPolygon,
+                2.5, // FIXME use real fairway depth value for this feature
+                diagStack
+              );
             }
           );
         }
       }
     },
-    addToFairwayRectangle(profileLine, fairwayGeometry, diagStack) {
+    addToFairwayRectangle(profileLine, fairwayGeometry, depth, diagStack) {
       // both geometries have to be in EPSG:4326
+      // uses turfjs distance() function
+      // pushes pairs of diagram points into diagStack
       console.log(
         "addToFairwayRectangle(",
         profileLine,
         fairwayGeometry,
+        depth,
         diagStack,
         ")"
       );
+      var line = turfLineString(profileLine.getCoordinates());
+      var polygon = turfPolygon(fairwayGeometry.getCoordinates());
+      var intersects = lineIntersect(line, polygon);
+      console.log(intersects.features);
+
+      var l = intersects.features.length;
+      if (l % 2 != 0) {
+        console.log("Ignoring fairway because profile only intersects once.");
+      } else {
+        for (let i = 0; i < l; i += 2) {
+          let pStartPoint = profileLine.getCoordinates()[0];
+          let fStartPoint = intersects.features[i].geometry.coordinates;
+          let fEndPoint = intersects.features[i + 1].geometry.coordinates;
+          let opts = { units: "kilometers" };
+
+          diagStack.push([
+            distance(pStartPoint, fStartPoint, opts) * 1000,
+            distance(pStartPoint, fEndPoint, opts) * 1000,
+            depth
+          ]);
+        }
+      }
+      console.log("Resulting diagStack:", diagStack);
     },
     activateInteraction() {
       const interaction = this.createInteraction(this.drawMode);
--- a/client/yarn.lock	Mon Sep 24 12:35:31 2018 +0200
+++ b/client/yarn.lock	Mon Sep 24 12:38:25 2018 +0200
@@ -667,6 +667,54 @@
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.2.tgz#54c5a964462be3d4d78af631363c18d6fa91ac26"
 
+"@turf/bbox@*":
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/@turf/bbox/-/bbox-6.0.1.tgz#b966075771475940ee1c16be2a12cf389e6e923a"
+  dependencies:
+    "@turf/helpers" "6.x"
+    "@turf/meta" "6.x"
+
+"@turf/distance@^6.0.1":
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/@turf/distance/-/distance-6.0.1.tgz#0761f28784286e7865a427c4e7e3593569c2dea8"
+  dependencies:
+    "@turf/helpers" "6.x"
+    "@turf/invariant" "6.x"
+
+"@turf/helpers@6.x", "@turf/helpers@^6.1.4":
+  version "6.1.4"
+  resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-6.1.4.tgz#d6fd7ebe6782dd9c87dca5559bda5c48ae4c3836"
+
+"@turf/invariant@6.x":
+  version "6.1.2"
+  resolved "https://registry.yarnpkg.com/@turf/invariant/-/invariant-6.1.2.tgz#6013ed6219f9ac2edada9b31e1dfa5918eb0a2f7"
+  dependencies:
+    "@turf/helpers" "6.x"
+
+"@turf/line-intersect@^6.0.2":
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/@turf/line-intersect/-/line-intersect-6.0.2.tgz#b45b7a4e7e08c39a0e4e91099580ed377ef7335f"
+  dependencies:
+    "@turf/helpers" "6.x"
+    "@turf/invariant" "6.x"
+    "@turf/line-segment" "6.x"
+    "@turf/meta" "6.x"
+    geojson-rbush "3.x"
+
+"@turf/line-segment@6.x":
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/@turf/line-segment/-/line-segment-6.0.2.tgz#e280bcde70d28b694028ec1623dc406c928e59b6"
+  dependencies:
+    "@turf/helpers" "6.x"
+    "@turf/invariant" "6.x"
+    "@turf/meta" "6.x"
+
+"@turf/meta@6.x":
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-6.0.2.tgz#eb92951126d24a613ac1b7b99d733fcc20fd30cf"
+  dependencies:
+    "@turf/helpers" "6.x"
+
 "@types/babel-types@*", "@types/babel-types@^7.0.0":
   version "7.0.4"
   resolved "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-7.0.4.tgz#bfd5b0d0d1ba13e351dff65b6e52783b816826c8"
@@ -4101,6 +4149,15 @@
   dependencies:
     globule "^1.0.0"
 
+geojson-rbush@3.x:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/geojson-rbush/-/geojson-rbush-3.1.1.tgz#dd40bdd26e92813d888d7b489e8d2980695a49b4"
+  dependencies:
+    "@turf/bbox" "*"
+    "@turf/helpers" "6.x"
+    "@turf/meta" "6.x"
+    rbush "*"
+
 get-caller-file@^1.0.1:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
@@ -7667,7 +7724,7 @@
     iconv-lite "0.4.19"
     unpipe "1.0.0"
 
-rbush@2.0.2:
+rbush@*, rbush@2.0.2:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/rbush/-/rbush-2.0.2.tgz#bb6005c2731b7ba1d5a9a035772927d16a614605"
   dependencies: