annotate client/src/store/fairway.js @ 1237:74562dc29e10

refactored drawtool The map interactions (ol/interaction/Draw) were previously always removed and re-created. Now there are created and added to the map once and their active flag is used to toggle the tools. Results in cleaner code and easier separation of the buttons in the future.
author Markus Kottlaender <markus@intevation.de>
date Tue, 20 Nov 2018 13:03:24 +0100
parents 48ae4458710d
children bc55ffaeb639
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1019
ca628dce90dd Licensing information added
Thomas Junk <thomas.junk@intevation.de>
parents: 1015
diff changeset
1 /*
ca628dce90dd Licensing information added
Thomas Junk <thomas.junk@intevation.de>
parents: 1015
diff changeset
2 * This is Free Software under GNU Affero General Public License v >= 3.0
ca628dce90dd Licensing information added
Thomas Junk <thomas.junk@intevation.de>
parents: 1015
diff changeset
3 * without warranty, see README.md and license for details.
ca628dce90dd Licensing information added
Thomas Junk <thomas.junk@intevation.de>
parents: 1015
diff changeset
4 *
ca628dce90dd Licensing information added
Thomas Junk <thomas.junk@intevation.de>
parents: 1015
diff changeset
5 * SPDX-License-Identifier: AGPL-3.0-or-later
ca628dce90dd Licensing information added
Thomas Junk <thomas.junk@intevation.de>
parents: 1015
diff changeset
6 * License-Filename: LICENSES/AGPL-3.0.txt
ca628dce90dd Licensing information added
Thomas Junk <thomas.junk@intevation.de>
parents: 1015
diff changeset
7 *
ca628dce90dd Licensing information added
Thomas Junk <thomas.junk@intevation.de>
parents: 1015
diff changeset
8 * Copyright (C) 2018 by via donau
ca628dce90dd Licensing information added
Thomas Junk <thomas.junk@intevation.de>
parents: 1015
diff changeset
9 * – Österreichische Wasserstraßen-Gesellschaft mbH
ca628dce90dd Licensing information added
Thomas Junk <thomas.junk@intevation.de>
parents: 1015
diff changeset
10 * Software engineering by Intevation GmbH
ca628dce90dd Licensing information added
Thomas Junk <thomas.junk@intevation.de>
parents: 1015
diff changeset
11 *
ca628dce90dd Licensing information added
Thomas Junk <thomas.junk@intevation.de>
parents: 1015
diff changeset
12 * Author(s):
ca628dce90dd Licensing information added
Thomas Junk <thomas.junk@intevation.de>
parents: 1015
diff changeset
13 * Thomas Junk <thomas.junk@intevation.de>
1044
f8a4ec146d47 fixed Vue reactivity issue (splitscreen button)
Markus Kottlaender <markus@intevation.de>
parents: 1038
diff changeset
14 * Markus Kottländer <markuks.kottlaender@intevation.de>
1019
ca628dce90dd Licensing information added
Thomas Junk <thomas.junk@intevation.de>
parents: 1015
diff changeset
15 */
1044
f8a4ec146d47 fixed Vue reactivity issue (splitscreen button)
Markus Kottlaender <markus@intevation.de>
parents: 1038
diff changeset
16 import Vue from "vue";
1028
dd67e46366ef refac: loading of profile data via fairwayprofile store
Thomas Junk <thomas.junk@intevation.de>
parents: 1027
diff changeset
17 import { HTTP } from "../application/lib/http";
767
dedf252b3e01 feat: fairwayprofile partially with retrieved data from the server
Thomas Junk <thomas.junk@intevation.de>
parents: 646
diff changeset
18 import { prepareProfile } from "../application/lib/geo";
1028
dd67e46366ef refac: loading of profile data via fairwayprofile store
Thomas Junk <thomas.junk@intevation.de>
parents: 1027
diff changeset
19 import LineString from "ol/geom/LineString.js";
dd67e46366ef refac: loading of profile data via fairwayprofile store
Thomas Junk <thomas.junk@intevation.de>
parents: 1027
diff changeset
20 import { generateFeatureRequest } from "../application/lib/geo.js";
1165
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
21 import { getLength } from "ol/sphere.js";
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
22 import { calculateFairwayCoordinates } from "../application/lib/geo.js";
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
23 import { displayError } from "../application/lib/errors.js";
646
4450f2ab41e0 refac: Fairwawprofile view adapted
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
24
849
d63e60b868bf WIP Fairwayprofile
Thomas Junk <thomas.junk@intevation.de>
parents: 841
diff changeset
25 const DEMOLEVEL = 149.345;
1165
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
26 const DEMODATA = 2.5;
849
d63e60b868bf WIP Fairwayprofile
Thomas Junk <thomas.junk@intevation.de>
parents: 841
diff changeset
27
1114
8d12056d602a shortened store file imports
Markus Kottlaender <markus@intevation.de>
parents: 1111
diff changeset
28 export default {
646
4450f2ab41e0 refac: Fairwawprofile view adapted
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
29 namespaced: true,
4450f2ab41e0 refac: Fairwawprofile view adapted
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
30 state: {
1056
28eb62f7c676 additional survey as dynamic property
Thomas Junk <thomas.junk@intevation.de>
parents: 1044
diff changeset
31 additionalSurvey: "",
767
dedf252b3e01 feat: fairwayprofile partially with retrieved data from the server
Thomas Junk <thomas.junk@intevation.de>
parents: 646
diff changeset
32 totalLength: 0,
dedf252b3e01 feat: fairwayprofile partially with retrieved data from the server
Thomas Junk <thomas.junk@intevation.de>
parents: 646
diff changeset
33 minAlt: 0,
dedf252b3e01 feat: fairwayprofile partially with retrieved data from the server
Thomas Junk <thomas.junk@intevation.de>
parents: 646
diff changeset
34 maxAlt: 0,
1025
a55f20dc8d8d refac: store profiles by date
Thomas Junk <thomas.junk@intevation.de>
parents: 1020
diff changeset
35 currentProfile: {},
896
b9aaa093a9fb fix: splitbutton only visible when result is visible
Thomas Junk <thomas.junk@intevation.de>
parents: 849
diff changeset
36 waterLevels: [{ year: "2016", level: DEMOLEVEL, color: "#005DFF" }],
849
d63e60b868bf WIP Fairwayprofile
Thomas Junk <thomas.junk@intevation.de>
parents: 841
diff changeset
37 selectedWaterLevel: DEMOLEVEL,
802
327aa4a18a1c Fairway profile WIP
Thomas Junk <thomas.junk@intevation.de>
parents: 786
diff changeset
38 fairwayCoordinates: [],
767
dedf252b3e01 feat: fairwayprofile partially with retrieved data from the server
Thomas Junk <thomas.junk@intevation.de>
parents: 646
diff changeset
39 startPoint: null,
1177
48ae4458710d save cross profiles to local storage to restore them from a dropdown
Markus Kottlaender <markus@intevation.de>
parents: 1165
diff changeset
40 endPoint: null,
48ae4458710d save cross profiles to local storage to restore them from a dropdown
Markus Kottlaender <markus@intevation.de>
parents: 1165
diff changeset
41 previousCuts: []
646
4450f2ab41e0 refac: Fairwawprofile view adapted
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
42 },
4450f2ab41e0 refac: Fairwawprofile view adapted
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
43 getters: {
767
dedf252b3e01 feat: fairwayprofile partially with retrieved data from the server
Thomas Junk <thomas.junk@intevation.de>
parents: 646
diff changeset
44 length: state => {
dedf252b3e01 feat: fairwayprofile partially with retrieved data from the server
Thomas Junk <thomas.junk@intevation.de>
parents: 646
diff changeset
45 return state.totalLength;
1056
28eb62f7c676 additional survey as dynamic property
Thomas Junk <thomas.junk@intevation.de>
parents: 1044
diff changeset
46 },
28eb62f7c676 additional survey as dynamic property
Thomas Junk <thomas.junk@intevation.de>
parents: 1044
diff changeset
47 additionalSurvey: state => {
28eb62f7c676 additional survey as dynamic property
Thomas Junk <thomas.junk@intevation.de>
parents: 1044
diff changeset
48 return state.additionalSurvey;
646
4450f2ab41e0 refac: Fairwawprofile view adapted
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
49 }
4450f2ab41e0 refac: Fairwawprofile view adapted
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
50 },
767
dedf252b3e01 feat: fairwayprofile partially with retrieved data from the server
Thomas Junk <thomas.junk@intevation.de>
parents: 646
diff changeset
51 mutations: {
1056
28eb62f7c676 additional survey as dynamic property
Thomas Junk <thomas.junk@intevation.de>
parents: 1044
diff changeset
52 setAdditionalSurvey: (state, additionalSurvey) => {
28eb62f7c676 additional survey as dynamic property
Thomas Junk <thomas.junk@intevation.de>
parents: 1044
diff changeset
53 state.additionalSurvey = additionalSurvey;
28eb62f7c676 additional survey as dynamic property
Thomas Junk <thomas.junk@intevation.de>
parents: 1044
diff changeset
54 },
841
07be3e5f99a9 WIP Fairwayprofile
Thomas Junk <thomas.junk@intevation.de>
parents: 802
diff changeset
55 setSelectedWaterLevel: (state, level) => {
07be3e5f99a9 WIP Fairwayprofile
Thomas Junk <thomas.junk@intevation.de>
parents: 802
diff changeset
56 state.selectedWaterLevel = level;
07be3e5f99a9 WIP Fairwayprofile
Thomas Junk <thomas.junk@intevation.de>
parents: 802
diff changeset
57 },
1025
a55f20dc8d8d refac: store profiles by date
Thomas Junk <thomas.junk@intevation.de>
parents: 1020
diff changeset
58 profileLoaded: (state, answer) => {
a55f20dc8d8d refac: store profiles by date
Thomas Junk <thomas.junk@intevation.de>
parents: 1020
diff changeset
59 const { response, surveyDate } = answer;
767
dedf252b3e01 feat: fairwayprofile partially with retrieved data from the server
Thomas Junk <thomas.junk@intevation.de>
parents: 646
diff changeset
60 const { data } = response;
dedf252b3e01 feat: fairwayprofile partially with retrieved data from the server
Thomas Junk <thomas.junk@intevation.de>
parents: 646
diff changeset
61 const coordinates = data.geometry.coordinates;
dedf252b3e01 feat: fairwayprofile partially with retrieved data from the server
Thomas Junk <thomas.junk@intevation.de>
parents: 646
diff changeset
62 if (!coordinates) return;
dedf252b3e01 feat: fairwayprofile partially with retrieved data from the server
Thomas Junk <thomas.junk@intevation.de>
parents: 646
diff changeset
63 const startPoint = state.startPoint;
dedf252b3e01 feat: fairwayprofile partially with retrieved data from the server
Thomas Junk <thomas.junk@intevation.de>
parents: 646
diff changeset
64 const endPoint = state.endPoint;
dedf252b3e01 feat: fairwayprofile partially with retrieved data from the server
Thomas Junk <thomas.junk@intevation.de>
parents: 646
diff changeset
65 const geoJSON = data;
dedf252b3e01 feat: fairwayprofile partially with retrieved data from the server
Thomas Junk <thomas.junk@intevation.de>
parents: 646
diff changeset
66 const result = prepareProfile({ geoJSON, startPoint, endPoint });
1044
f8a4ec146d47 fixed Vue reactivity issue (splitscreen button)
Markus Kottlaender <markus@intevation.de>
parents: 1038
diff changeset
67 // Use Vue.set() to make new object properties rective
f8a4ec146d47 fixed Vue reactivity issue (splitscreen button)
Markus Kottlaender <markus@intevation.de>
parents: 1038
diff changeset
68 // https://vuejs.org/v2/guide/reactivity.html#Change-Detection-Caveats
f8a4ec146d47 fixed Vue reactivity issue (splitscreen button)
Markus Kottlaender <markus@intevation.de>
parents: 1038
diff changeset
69 Vue.set(state.currentProfile, surveyDate, result.points);
1056
28eb62f7c676 additional survey as dynamic property
Thomas Junk <thomas.junk@intevation.de>
parents: 1044
diff changeset
70 if (!state.minAlt || state.minAlt > result.minAlt) {
28eb62f7c676 additional survey as dynamic property
Thomas Junk <thomas.junk@intevation.de>
parents: 1044
diff changeset
71 state.minAlt = result.minAlt;
28eb62f7c676 additional survey as dynamic property
Thomas Junk <thomas.junk@intevation.de>
parents: 1044
diff changeset
72 }
28eb62f7c676 additional survey as dynamic property
Thomas Junk <thomas.junk@intevation.de>
parents: 1044
diff changeset
73 if (!state.maxAlt || state.maxAlt < result.maxAlt) {
28eb62f7c676 additional survey as dynamic property
Thomas Junk <thomas.junk@intevation.de>
parents: 1044
diff changeset
74 state.maxAlt = result.maxAlt;
28eb62f7c676 additional survey as dynamic property
Thomas Junk <thomas.junk@intevation.de>
parents: 1044
diff changeset
75 }
1057
7242b5a427bc completely nulling the units
Thomas Junk <thomas.junk@intevation.de>
parents: 1056
diff changeset
76 if (!state.totalLength || state.totalLength < result.lengthPolyLine) {
1056
28eb62f7c676 additional survey as dynamic property
Thomas Junk <thomas.junk@intevation.de>
parents: 1044
diff changeset
77 state.totalLength = result.lengthPolyLine;
28eb62f7c676 additional survey as dynamic property
Thomas Junk <thomas.junk@intevation.de>
parents: 1044
diff changeset
78 }
767
dedf252b3e01 feat: fairwayprofile partially with retrieved data from the server
Thomas Junk <thomas.junk@intevation.de>
parents: 646
diff changeset
79 },
dedf252b3e01 feat: fairwayprofile partially with retrieved data from the server
Thomas Junk <thomas.junk@intevation.de>
parents: 646
diff changeset
80 setStartPoint: (state, start) => {
dedf252b3e01 feat: fairwayprofile partially with retrieved data from the server
Thomas Junk <thomas.junk@intevation.de>
parents: 646
diff changeset
81 state.startPoint = start;
dedf252b3e01 feat: fairwayprofile partially with retrieved data from the server
Thomas Junk <thomas.junk@intevation.de>
parents: 646
diff changeset
82 },
dedf252b3e01 feat: fairwayprofile partially with retrieved data from the server
Thomas Junk <thomas.junk@intevation.de>
parents: 646
diff changeset
83 setEndPoint: (state, end) => {
dedf252b3e01 feat: fairwayprofile partially with retrieved data from the server
Thomas Junk <thomas.junk@intevation.de>
parents: 646
diff changeset
84 state.endPoint = end;
802
327aa4a18a1c Fairway profile WIP
Thomas Junk <thomas.junk@intevation.de>
parents: 786
diff changeset
85 },
327aa4a18a1c Fairway profile WIP
Thomas Junk <thomas.junk@intevation.de>
parents: 786
diff changeset
86 setFairwayCoordinates: (state, coordinates) => {
327aa4a18a1c Fairway profile WIP
Thomas Junk <thomas.junk@intevation.de>
parents: 786
diff changeset
87 state.fairwayCoordinates = coordinates;
1015
d2f30a784fb3 feat: add selectfield to fairwayprofile
Thomas Junk <thomas.junk@intevation.de>
parents: 1013
diff changeset
88 },
d2f30a784fb3 feat: add selectfield to fairwayprofile
Thomas Junk <thomas.junk@intevation.de>
parents: 1013
diff changeset
89 clearCurrentProfile: state => {
1056
28eb62f7c676 additional survey as dynamic property
Thomas Junk <thomas.junk@intevation.de>
parents: 1044
diff changeset
90 state.additionalSurvey = "";
1025
a55f20dc8d8d refac: store profiles by date
Thomas Junk <thomas.junk@intevation.de>
parents: 1020
diff changeset
91 state.currentProfile = {};
1057
7242b5a427bc completely nulling the units
Thomas Junk <thomas.junk@intevation.de>
parents: 1056
diff changeset
92 state.minAlt = null;
7242b5a427bc completely nulling the units
Thomas Junk <thomas.junk@intevation.de>
parents: 1056
diff changeset
93 state.maxAlt = null;
7242b5a427bc completely nulling the units
Thomas Junk <thomas.junk@intevation.de>
parents: 1056
diff changeset
94 state.totalLength = null;
7242b5a427bc completely nulling the units
Thomas Junk <thomas.junk@intevation.de>
parents: 1056
diff changeset
95 state.fairwayCoordinates = [];
7242b5a427bc completely nulling the units
Thomas Junk <thomas.junk@intevation.de>
parents: 1056
diff changeset
96 state.startPoint = null;
7242b5a427bc completely nulling the units
Thomas Junk <thomas.junk@intevation.de>
parents: 1056
diff changeset
97 state.endPoint = null;
1177
48ae4458710d save cross profiles to local storage to restore them from a dropdown
Markus Kottlaender <markus@intevation.de>
parents: 1165
diff changeset
98 },
48ae4458710d save cross profiles to local storage to restore them from a dropdown
Markus Kottlaender <markus@intevation.de>
parents: 1165
diff changeset
99 previousCuts: (state, previousCuts) => {
48ae4458710d save cross profiles to local storage to restore them from a dropdown
Markus Kottlaender <markus@intevation.de>
parents: 1165
diff changeset
100 state.previousCuts = previousCuts;
767
dedf252b3e01 feat: fairwayprofile partially with retrieved data from the server
Thomas Junk <thomas.junk@intevation.de>
parents: 646
diff changeset
101 }
1028
dd67e46366ef refac: loading of profile data via fairwayprofile store
Thomas Junk <thomas.junk@intevation.de>
parents: 1027
diff changeset
102 },
dd67e46366ef refac: loading of profile data via fairwayprofile store
Thomas Junk <thomas.junk@intevation.de>
parents: 1027
diff changeset
103 actions: {
1146
74e180ad3d6b fairway profile UI improvements
Markus Kottlaender <markus@intevation.de>
parents: 1114
diff changeset
104 clearSelection({ commit, dispatch, rootGetters, rootState }) {
74e180ad3d6b fairway profile UI improvements
Markus Kottlaender <markus@intevation.de>
parents: 1114
diff changeset
105 dispatch("bottlenecks/setSelectedBottleneck", null, { root: true });
74e180ad3d6b fairway profile UI improvements
Markus Kottlaender <markus@intevation.de>
parents: 1114
diff changeset
106 commit("clearCurrentProfile");
74e180ad3d6b fairway profile UI improvements
Markus Kottlaender <markus@intevation.de>
parents: 1114
diff changeset
107 commit("application/showSplitscreen", false, { root: true });
1237
74562dc29e10 refactored drawtool
Markus Kottlaender <markus@intevation.de>
parents: 1177
diff changeset
108 rootState.map.cutTool.setActive(false);
1146
74e180ad3d6b fairway profile UI improvements
Markus Kottlaender <markus@intevation.de>
parents: 1114
diff changeset
109 rootGetters["map/getLayerByName"]("Cut Tool")
74e180ad3d6b fairway profile UI improvements
Markus Kottlaender <markus@intevation.de>
parents: 1114
diff changeset
110 .data.getSource()
74e180ad3d6b fairway profile UI improvements
Markus Kottlaender <markus@intevation.de>
parents: 1114
diff changeset
111 .clear();
74e180ad3d6b fairway profile UI improvements
Markus Kottlaender <markus@intevation.de>
parents: 1114
diff changeset
112 },
1111
f106aee673e7 selected bottleneck and surveys now handled by bottleneck store
Markus Kottlaender <markus@intevation.de>
parents: 1096
diff changeset
113 loadProfile({ commit, state }, survey) {
1028
dd67e46366ef refac: loading of profile data via fairwayprofile store
Thomas Junk <thomas.junk@intevation.de>
parents: 1027
diff changeset
114 return new Promise((resolve, reject) => {
dd67e46366ef refac: loading of profile data via fairwayprofile store
Thomas Junk <thomas.junk@intevation.de>
parents: 1027
diff changeset
115 const profileLine = new LineString([state.startPoint, state.endPoint]);
dd67e46366ef refac: loading of profile data via fairwayprofile store
Thomas Junk <thomas.junk@intevation.de>
parents: 1027
diff changeset
116 const geoJSON = generateFeatureRequest(
dd67e46366ef refac: loading of profile data via fairwayprofile store
Thomas Junk <thomas.junk@intevation.de>
parents: 1027
diff changeset
117 profileLine,
1111
f106aee673e7 selected bottleneck and surveys now handled by bottleneck store
Markus Kottlaender <markus@intevation.de>
parents: 1096
diff changeset
118 survey.bottleneck_id,
f106aee673e7 selected bottleneck and surveys now handled by bottleneck store
Markus Kottlaender <markus@intevation.de>
parents: 1096
diff changeset
119 survey.date_info
1028
dd67e46366ef refac: loading of profile data via fairwayprofile store
Thomas Junk <thomas.junk@intevation.de>
parents: 1027
diff changeset
120 );
dd67e46366ef refac: loading of profile data via fairwayprofile store
Thomas Junk <thomas.junk@intevation.de>
parents: 1027
diff changeset
121 HTTP.post("/cross", geoJSON, {
dd67e46366ef refac: loading of profile data via fairwayprofile store
Thomas Junk <thomas.junk@intevation.de>
parents: 1027
diff changeset
122 headers: { "X-Gemma-Auth": localStorage.getItem("token") }
dd67e46366ef refac: loading of profile data via fairwayprofile store
Thomas Junk <thomas.junk@intevation.de>
parents: 1027
diff changeset
123 })
dd67e46366ef refac: loading of profile data via fairwayprofile store
Thomas Junk <thomas.junk@intevation.de>
parents: 1027
diff changeset
124 .then(response => {
dd67e46366ef refac: loading of profile data via fairwayprofile store
Thomas Junk <thomas.junk@intevation.de>
parents: 1027
diff changeset
125 commit("profileLoaded", {
dd67e46366ef refac: loading of profile data via fairwayprofile store
Thomas Junk <thomas.junk@intevation.de>
parents: 1027
diff changeset
126 response: response,
1111
f106aee673e7 selected bottleneck and surveys now handled by bottleneck store
Markus Kottlaender <markus@intevation.de>
parents: 1096
diff changeset
127 surveyDate: survey.date_info
1028
dd67e46366ef refac: loading of profile data via fairwayprofile store
Thomas Junk <thomas.junk@intevation.de>
parents: 1027
diff changeset
128 });
dd67e46366ef refac: loading of profile data via fairwayprofile store
Thomas Junk <thomas.junk@intevation.de>
parents: 1027
diff changeset
129 resolve(response);
dd67e46366ef refac: loading of profile data via fairwayprofile store
Thomas Junk <thomas.junk@intevation.de>
parents: 1027
diff changeset
130 })
dd67e46366ef refac: loading of profile data via fairwayprofile store
Thomas Junk <thomas.junk@intevation.de>
parents: 1027
diff changeset
131 .catch(error => {
dd67e46366ef refac: loading of profile data via fairwayprofile store
Thomas Junk <thomas.junk@intevation.de>
parents: 1027
diff changeset
132 reject(error);
dd67e46366ef refac: loading of profile data via fairwayprofile store
Thomas Junk <thomas.junk@intevation.de>
parents: 1027
diff changeset
133 });
dd67e46366ef refac: loading of profile data via fairwayprofile store
Thomas Junk <thomas.junk@intevation.de>
parents: 1027
diff changeset
134 });
1165
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
135 },
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
136 cut({ commit, dispatch, rootState, rootGetters }, cut) {
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
137 const length = getLength(cut.getGeometry());
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
138 commit(
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
139 "map/setCurrentMeasurement",
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
140 {
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
141 quantity: "Length",
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
142 unitSymbol: "m",
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
143 value: Math.round(length * 10) / 10
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
144 },
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
145 { root: true }
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
146 );
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
147
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
148 // if a survey has been selected, request a profile
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
149 // TODO an improvement could be to check if the line intersects
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
150 // with the bottleneck area's polygon before trying the server request
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
151 if (rootState.bottlenecks.selectedSurvey) {
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
152 commit("clearCurrentProfile");
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
153 const inputLineString = cut.getGeometry().clone();
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
154 inputLineString.transform("EPSG:3857", "EPSG:4326");
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
155 const [start, end] = inputLineString
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
156 .getCoordinates()
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
157 .map(coords => coords.map(coord => parseFloat(coord.toFixed(8))));
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
158 commit("setStartPoint", start);
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
159 commit("setEndPoint", end);
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
160 const profileLine = new LineString([start, end]);
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
161 dispatch("loadProfile", rootState.bottlenecks.selectedSurvey)
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
162 .then(() => {
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
163 rootGetters["map/getLayerByName"]("Fairway Dimensions")
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
164 .data.getSource()
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
165 .forEachFeatureIntersectingExtent(
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
166 // need to use EPSG:3857 which is the proj of vectorSource
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
167 profileLine
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
168 .clone()
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
169 .transform("EPSG:4326", "EPSG:3857")
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
170 .getExtent(),
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
171 feature => {
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
172 // transform back to prepare for usage
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
173 var intersectingPolygon = feature
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
174 .getGeometry()
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
175 .clone()
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
176 .transform("EPSG:3857", "EPSG:4326");
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
177 const fairwayCoordinates = calculateFairwayCoordinates(
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
178 profileLine,
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
179 intersectingPolygon,
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
180 DEMODATA
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
181 );
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
182 commit("setFairwayCoordinates", fairwayCoordinates);
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
183 }
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
184 );
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
185 })
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
186 .then(() => {
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
187 commit("application/showSplitscreen", true, { root: true });
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
188 })
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
189 .catch(error => {
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
190 const { status, data } = error.response;
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
191 displayError({
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
192 title: "Backend Error",
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
193 message: `${status}: ${data.message || data}`
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
194 });
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
195 });
a44ac5193b38 fixed code duplication
Markus Kottlaender <markus@intevation.de>
parents: 1146
diff changeset
196 }
1177
48ae4458710d save cross profiles to local storage to restore them from a dropdown
Markus Kottlaender <markus@intevation.de>
parents: 1165
diff changeset
197 },
48ae4458710d save cross profiles to local storage to restore them from a dropdown
Markus Kottlaender <markus@intevation.de>
parents: 1165
diff changeset
198 previousCuts({ commit, rootState }) {
48ae4458710d save cross profiles to local storage to restore them from a dropdown
Markus Kottlaender <markus@intevation.de>
parents: 1165
diff changeset
199 const previousCuts =
48ae4458710d save cross profiles to local storage to restore them from a dropdown
Markus Kottlaender <markus@intevation.de>
parents: 1165
diff changeset
200 JSON.parse(localStorage.getItem("previousCuts")) || [];
48ae4458710d save cross profiles to local storage to restore them from a dropdown
Markus Kottlaender <markus@intevation.de>
parents: 1165
diff changeset
201 commit(
48ae4458710d save cross profiles to local storage to restore them from a dropdown
Markus Kottlaender <markus@intevation.de>
parents: 1165
diff changeset
202 "previousCuts",
48ae4458710d save cross profiles to local storage to restore them from a dropdown
Markus Kottlaender <markus@intevation.de>
parents: 1165
diff changeset
203 previousCuts.filter(cut => {
48ae4458710d save cross profiles to local storage to restore them from a dropdown
Markus Kottlaender <markus@intevation.de>
parents: 1165
diff changeset
204 return (
48ae4458710d save cross profiles to local storage to restore them from a dropdown
Markus Kottlaender <markus@intevation.de>
parents: 1165
diff changeset
205 cut.bottleneckName === rootState.bottlenecks.selectedBottleneck
48ae4458710d save cross profiles to local storage to restore them from a dropdown
Markus Kottlaender <markus@intevation.de>
parents: 1165
diff changeset
206 );
48ae4458710d save cross profiles to local storage to restore them from a dropdown
Markus Kottlaender <markus@intevation.de>
parents: 1165
diff changeset
207 })
48ae4458710d save cross profiles to local storage to restore them from a dropdown
Markus Kottlaender <markus@intevation.de>
parents: 1165
diff changeset
208 );
1028
dd67e46366ef refac: loading of profile data via fairwayprofile store
Thomas Junk <thomas.junk@intevation.de>
parents: 1027
diff changeset
209 }
767
dedf252b3e01 feat: fairwayprofile partially with retrieved data from the server
Thomas Junk <thomas.junk@intevation.de>
parents: 646
diff changeset
210 }
646
4450f2ab41e0 refac: Fairwawprofile view adapted
Thomas Junk <thomas.junk@intevation.de>
parents:
diff changeset
211 };