annotate pkg/controllers/fwa.go @ 5205:c7907715309f new-fwa

LC comparison are always run against the value field of the measurements.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 11 May 2020 11:17:00 +0200
parents 7ca9e6c9a203
children defca5418446
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5184
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 // This is Free Software under GNU Affero General Public License v >= 3.0
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2 // without warranty, see README.md and license for details.
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
3 //
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
4 // SPDX-License-Identifier: AGPL-3.0-or-later
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5 // License-Filename: LICENSES/AGPL-3.0.txt
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
6 //
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7 // Copyright (C) 2018, 2019, 2020 by via donau
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
8 // – Österreichische Wasserstraßen-Gesellschaft mbH
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
9 // Software engineering by Intevation GmbH
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10 //
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11 // Author(s):
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de>
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14 package controllers
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16 import (
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
17 "context"
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
18 "database/sql"
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
19 "fmt"
5195
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5184
diff changeset
20 "log"
5184
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21 "net/http"
5203
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
22 "sort"
5204
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
23 "strconv"
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
24 "strings"
5196
5bc8daa986d9 More code movement.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
25 "time"
5184
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
27 "github.com/gorilla/mux"
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
28
5196
5bc8daa986d9 More code movement.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
29 "gemma.intevation.de/gemma/pkg/common"
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
30 "gemma.intevation.de/gemma/pkg/middleware"
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
31 )
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
32
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
33 const (
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
34 selectBottlenecksLimitingSQL = `
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
35 SELECT
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
36 lower(validity),
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
37 upper(validity),
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
38 limiting
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
39 FROM
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
40 waterway.bottlenecks
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
41 WHERE
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
42 bottleneck_id = $1 AND
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
43 validity && tstzrange($2, $3)`
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
44
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
45 selectSymbolBottlenecksSQL = `
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
46 SELECT
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
47 distinct(b.bottleneck_id)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
48 FROM
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
49 users.%s s, waterway.bottlenecks b
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
50 WHERE
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
51 ST_Intersects(b.area, s.area)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
52 AND s.name = $1
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
53 AND b.validity && tstzrange($2, $3)`
5200
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
54
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
55 selectLDCsSQL = `
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
56 SELECT
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
57 lower(grwl.validity),
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
58 upper(grwl.validity),
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
59 grwl.value
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
60 FROM
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
61 waterway.gauges_reference_water_levels grwl
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
62 JOIN waterway.bottlenecks bns
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
63 ON grwl.location = bns.gauge_location
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
64 WHERE
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
65 grwl.depth_reference like 'LDC%'
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
66 AND bns.bottleneck_id = $1
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
67 AND grwl.validity && tstzrange($2, $3)`
5202
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
68
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
69 selectMeasurementsSQL = `
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
70 WITH data AS (
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
71 SELECT
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
72 efa.measure_date,
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
73 efa.available_depth_value,
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
74 efa.available_width_value,
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
75 efa.water_level_value
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
76 FROM waterway.effective_fairway_availability efa
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
77 JOIN waterway.fairway_availability fa
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
78 ON efa.fairway_availability_id = fa.id
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
79 JOIN waterway.bottlenecks bn
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
80 ON fa.bottleneck_id = bn.bottleneck_id
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
81 WHERE
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
82 bn.bottleneck_id = $1 AND
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
83 efa.level_of_service = $2 AND
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
84 efa.measure_type = 'Measured' AND
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
85 (efa.available_depth_value IS NOT NULL OR
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
86 efa.available_width_value IS NOT NULL) AND
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
87 efa.water_level_value IS NOT NULL
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
88 ),
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
89 before AS (
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
90 SELECT * FROM data WHERE measure_date < $3
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
91 ORDER BY measure_date DESC LIMIT 1
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
92 ),
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
93 inside AS (
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
94 SELECT * FROM data WHERE measure_date BETWEEN $3 AND $4
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
95 ),
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
96 after AS (
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
97 SELECT * FROM data WHERE measure_date > $4
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
98 ORDER BY measure_date LIMIT 1
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
99 )
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
100 SELECT * FROM before
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
101 UNION ALL
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
102 SELECT * FROM inside
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
103 UNION ALL
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
104 SELECT * FROM after
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
105 ORDER BY measure_date`
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
106 )
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
107
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
108 type (
5200
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
109 timeRange struct {
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
110 lower time.Time
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
111 upper time.Time
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
112 }
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
113
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
114 ldc struct {
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
115 timeRange
5203
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
116 value []float64
5200
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
117 }
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
118
5203
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
119 ldcs []*ldc
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
120
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
121 limitingValidity struct {
5200
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
122 timeRange
5203
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
123 limiting func(*availMeasurement) float64
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
124 ldcs ldcs
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
125 }
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
126
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
127 limitingValidities []limitingValidity
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
128
5202
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
129 availMeasurement struct {
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
130 when time.Time
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
131 depth int16
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
132 width int16
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
133 value int16
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
134 }
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
135
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
136 availMeasurements []availMeasurement
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
137
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
138 bottleneck struct {
5202
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
139 id string
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
140 validities limitingValidities
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
141 measurements availMeasurements
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
142 }
5204
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
143
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
144 fwaMode int
5184
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
145 )
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
146
5204
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
147 const (
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
148 fwaMonthly fwaMode = iota
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
149 fwaQuarterly
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
150 fwaYearly
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
151 )
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
152
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
153 // afdRefs are the typical available fairway depth reference values.
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
154 var afdRefs = []float64{
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
155 230,
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
156 250,
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
157 }
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
158
5203
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
159 func (ls ldcs) find(from, to time.Time) *ldc {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
160 for _, l := range ls {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
161 if l.intersects(from, to) {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
162 return l
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
163 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
164 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
165 return nil
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
166 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
167
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
168 func fairwayAvailability(rw http.ResponseWriter, req *http.Request) {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
169
5204
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
170 mode := parseFWAMode(req.FormValue("mode"))
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
171
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
172 // TODO: depending on mode do output stepping
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
173
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
174 _ = mode
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
175
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
176 from, to, ok := parseFromTo(rw, req)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
177 if !ok {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
178 return
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
179 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
180
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
181 vars := mux.Vars(req)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
182 name := vars["name"]
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
183 if name == "" {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
184 http.Error(rw, "missing 'name' parameter.", http.StatusBadRequest)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
185 return
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
186 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
187
5202
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
188 los, ok := parseFormInt(rw, req, "los", 1)
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
189 if !ok {
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
190 return
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
191 }
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
192
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
193 ctx := req.Context()
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
194 conn := middleware.GetDBConn(req)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
195
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
196 // Function to extract the bottleneck_id's from the query.
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
197 var extract func(context.Context, *sql.Conn, string, time.Time, time.Time) ([]bottleneck, error)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
198
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
199 switch vars["kind"] {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
200 case "bottleneck":
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
201 extract = extractBottleneck
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
202 case "stretch":
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
203 extract = extractStretch
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
204 case "section":
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
205 extract = extractSection
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
206 default:
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
207 http.Error(rw, "Invalid kind type.", http.StatusBadRequest)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
208 return
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
209 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
210
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
211 bottlenecks, err := extract(ctx, conn, name, from, to)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
212 if err != nil {
5200
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
213 log.Printf("error: %v\n", err)
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
214 http.Error(rw, "cannot extract bottlenecks", http.StatusBadRequest)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
215 return
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
216 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
217
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
218 // load validities and limiting factors
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
219 for i := range bottlenecks {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
220 if err := bottlenecks[i].loadLimitingValidities(ctx, conn, from, to); err != nil {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
221 log.Printf("error: %v\n", err)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
222 http.Error(rw, "cannot load validities", http.StatusInternalServerError)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
223 return
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
224 }
5200
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
225 // load LCDs
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
226 if err := bottlenecks[i].loadLDCs(ctx, conn, from, to); err != nil {
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
227 log.Printf("error: %v\n", err)
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
228 http.Error(rw, "cannot load LDCs", http.StatusInternalServerError)
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
229 return
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
230 }
5202
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
231 // load values
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
232 if err := bottlenecks[i].loadValues(ctx, conn, from, to, los); err != nil {
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
233 log.Printf("error: %v\n", err)
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
234 http.Error(rw, "cannot load LDCs", http.StatusInternalServerError)
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
235 return
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
236 }
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
237
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
238 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
239
5203
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
240 // For every day on every bottleneck we need to find out if this day is valid.
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
241 validities := make([]func(time.Time, time.Time) *limitingValidity, len(bottlenecks))
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
242 for i := range bottlenecks {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
243 validities[i] = bottlenecks[i].validities.find()
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
244 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
245
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
246 var shipableDays int
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
247
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
248 // We step through the time in steps of one day.
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
249 for current := from; current.Before(to); {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
250
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
251 next := current.AddDate(0, 0, 1)
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
252
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
253 shipable := true
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
254
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
255 // over all bottlenecks
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
256 for i, validity := range validities {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
257
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
258 if vs := validity(current, next); vs != nil {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
259
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
260 // Let's see if we have a LDC for this day.
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
261 ldc := vs.ldcs.find(current, next)
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
262 if ldc == nil {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
263 // TODO: log missing LCD
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
264 continue
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
265 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
266
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
267 result := bottlenecks[i].measurements.classify(
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
268 current, next,
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
269 ldc.value,
5205
c7907715309f LC comparison are always run against the value field of the measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5204
diff changeset
270 (*availMeasurement).getValue)
5203
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
271
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
272 if result[1] < 12*time.Hour {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
273 shipable = false
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
274 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
275 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
276 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
277
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
278 if shipable {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
279 shipableDays++
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
280 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
281 // TODO: depending on mode write out results.
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
282
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
283 current = next
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
284 }
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
285 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
286
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
287 func dusk(t time.Time) time.Time {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
288 return time.Date(
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
289 t.Year(),
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
290 t.Month(),
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
291 t.Day(),
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
292 0, 0, 0, 0,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
293 t.Location())
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
294 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
295
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
296 func dawn(t time.Time) time.Time {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
297 return time.Date(
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
298 t.Year(),
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
299 t.Month(),
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
300 t.Day(),
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
301 23, 59, 59, 999999999,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
302 t.Location())
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
303 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
304
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
305 func parseFromTo(
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
306 rw http.ResponseWriter,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
307 req *http.Request,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
308 ) (time.Time, time.Time, bool) {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
309 from, ok := parseFormTime(rw, req, "from", time.Now().AddDate(-1, 0, 0))
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
310 if !ok {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
311 return time.Time{}, time.Time{}, false
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
312 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
313
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
314 to, ok := parseFormTime(rw, req, "to", from.AddDate(1, 0, 0))
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
315 if !ok {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
316 return time.Time{}, time.Time{}, false
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
317 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
318
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
319 from, to = common.OrderTime(from, to)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
320 // Operate on daily basis so go to full days.
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
321 return dusk(from), dawn(to), true
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
322 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
323
5204
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
324 func parseFWAMode(mode string) fwaMode {
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
325 switch strings.ToLower(mode) {
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
326 case "monthly":
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
327 return fwaMonthly
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
328 case "quarterly":
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
329 return fwaQuarterly
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
330 case "yearly":
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
331 return fwaYearly
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
332 default:
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
333 return fwaMonthly
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
334 }
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
335 }
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
336
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
337 func breaksToReferenceValue(breaks string) []float64 {
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
338 parts := strings.Split(breaks, ",")
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
339 var values []float64
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
340
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
341 for _, part := range parts {
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
342 part = strings.TrimSpace(part)
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
343 if v, err := strconv.ParseFloat(part, 64); err == nil {
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
344 values = append(values, v)
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
345 }
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
346 }
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
347
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
348 return common.DedupFloat64s(values)
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
349 }
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
350
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
351 func parseBreaks(breaks string) []float64 {
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
352 if breaks != "" {
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
353 return breaksToReferenceValue(breaks)
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
354 }
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
355 return afdRefs
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
356 }
7ca9e6c9a203 Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5203
diff changeset
357
5200
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
358 func (tr *timeRange) intersects(from, to time.Time) bool {
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
359 return !(to.Before(tr.lower) || from.After(tr.upper))
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
360 }
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
361
5201
40daecc6f552 Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5200
diff changeset
362 func (tr *timeRange) toUTC() {
40daecc6f552 Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5200
diff changeset
363 tr.lower = tr.lower.UTC()
40daecc6f552 Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5200
diff changeset
364 tr.upper = tr.upper.UTC()
40daecc6f552 Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5200
diff changeset
365 }
40daecc6f552 Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5200
diff changeset
366
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
367 func (lvs limitingValidities) find() func(from, to time.Time) *limitingValidity {
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
368
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
369 var last *limitingValidity
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
370
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
371 return func(from, to time.Time) *limitingValidity {
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
372 if last != nil && last.intersects(from, to) {
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
373 return last
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
374 }
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
375 for i := range lvs {
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
376 if lv := &lvs[i]; lv.intersects(from, to) {
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
377 last = lv
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
378 return lv
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
379 }
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
380 }
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
381 return nil
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
382 }
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
383 }
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
384
5203
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
385 func limitingFactor(limiting string) func(*availMeasurement) float64 {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
386 switch limiting {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
387 case "depth":
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
388 return (*availMeasurement).getDepth
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
389 case "width":
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
390 return (*availMeasurement).getWidth
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
391 default:
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
392 log.Printf("warn: unknown limitation '%s'. default to 'depth'\n", limiting)
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
393 return (*availMeasurement).getDepth
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
394 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
395 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
396
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
397 func loadLimitingValidities(
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
398 ctx context.Context,
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
399 conn *sql.Conn,
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
400 bottleneckID string,
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
401 from, to time.Time,
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
402 ) (limitingValidities, error) {
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
403
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
404 var lvs limitingValidities
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
405
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
406 rows, err := conn.QueryContext(
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
407 ctx,
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
408 selectLimitingSQL,
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
409 from, to)
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
410
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
411 if err != nil {
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
412 return nil, err
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
413 }
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
414 defer rows.Close()
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
415
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
416 for rows.Next() {
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
417 var lv limitingValidity
5203
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
418 var access string
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
419 if err := rows.Scan(
5203
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
420 &access,
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
421 &lv.lower,
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
422 &lv.upper,
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
423 ); err != nil {
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
424 return nil, err
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
425 }
5201
40daecc6f552 Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5200
diff changeset
426 lv.toUTC()
5203
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
427 lv.limiting = limitingFactor(access)
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
428 lvs = append(lvs, lv)
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
429 }
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
430
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
431 return lvs, rows.Err()
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
432 }
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
433
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
434 func loadSymbolBottlenecksFromTo(
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
435 ctx context.Context,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
436 conn *sql.Conn,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
437 what, name string,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
438 from, to time.Time,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
439 ) ([]bottleneck, error) {
5184
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
440
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
441 rows, err := conn.QueryContext(
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
442 ctx,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
443 fmt.Sprintf(selectSymbolBottlenecksSQL, what),
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
444 name,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
445 from, to)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
446 if err != nil {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
447 return nil, err
5184
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
448 }
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
449 defer rows.Close()
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
450
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
451 var bottlenecks []bottleneck
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
452
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
453 for rows.Next() {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
454 var b bottleneck
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
455 if err := rows.Scan(&b.id); err != nil {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
456 return nil, err
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
457 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
458 bottlenecks = append(bottlenecks, b)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
459 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
460
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
461 return bottlenecks, rows.Err()
5184
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
462 }
5195
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5184
diff changeset
463
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
464 func extractBottleneck(
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
465 _ context.Context,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
466 _ *sql.Conn,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
467 name string,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
468 _, _ time.Time,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
469 ) ([]bottleneck, error) {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
470 return []bottleneck{{id: name}}, nil
5196
5bc8daa986d9 More code movement.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
471 }
5bc8daa986d9 More code movement.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
472
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
473 func extractStretch(
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
474 ctx context.Context,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
475 conn *sql.Conn,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
476 name string,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
477 from, to time.Time,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
478 ) ([]bottleneck, error) {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
479 return loadSymbolBottlenecksFromTo(
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
480 ctx,
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
481 conn,
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
482 "stretches", name,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
483 from, to)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
484 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
485
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
486 func extractSection(
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
487 ctx context.Context,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
488 conn *sql.Conn,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
489 name string,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
490 from, to time.Time,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
491 ) ([]bottleneck, error) {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
492 return loadSymbolBottlenecksFromTo(
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
493 ctx,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
494 conn,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
495 "sections", name,
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
496 from, to)
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
497 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
498
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
499 func (bn *bottleneck) loadLimitingValidities(
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
500 ctx context.Context,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
501 conn *sql.Conn,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
502 from, to time.Time,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
503 ) error {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
504 vs, err := loadLimitingValidities(
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
505 ctx,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
506 conn,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
507 bn.id,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
508 from, to)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
509 if err == nil {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
510 bn.validities = vs
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
511 }
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
512 return err
5195
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5184
diff changeset
513 }
5200
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
514
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
515 func (bn *bottleneck) loadLDCs(
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
516 ctx context.Context,
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
517 conn *sql.Conn,
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
518 from, to time.Time,
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
519 ) error {
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
520 rows, err := conn.QueryContext(
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
521 ctx, selectLDCsSQL,
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
522 bn.id,
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
523 from, to)
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
524 if err != nil {
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
525 return err
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
526 }
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
527 defer rows.Close()
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
528 for rows.Next() {
5203
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
529 l := ldc{value: []float64{0}}
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
530 if err := rows.Scan(&l.lower, &l.upper, &l.value[0]); err != nil {
5200
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
531 return err
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
532 }
5201
40daecc6f552 Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5200
diff changeset
533 l.toUTC()
5200
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
534 for i := range bn.validities {
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
535 vs := bn.validities[i]
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
536 if vs.intersects(l.lower, l.upper) {
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
537 vs.ldcs = append(vs.ldcs, &l)
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
538 }
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
539 }
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
540 }
5202
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
541 return rows.Err()
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
542 }
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
543
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
544 func (bn *bottleneck) loadValues(
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
545 ctx context.Context,
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
546 conn *sql.Conn,
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
547 from, to time.Time,
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
548 los int,
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
549 ) error {
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
550 rows, err := conn.QueryContext(
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
551 ctx, selectMeasurementsSQL,
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
552 bn.id,
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
553 from, to,
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
554 los)
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
555 if err != nil {
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
556 return err
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
557 }
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
558 defer rows.Close()
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
559
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
560 var ms availMeasurements
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
561
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
562 for rows.Next() {
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
563 var m availMeasurement
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
564 if err := rows.Scan(
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
565 &m.when,
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
566 &m.depth,
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
567 &m.width,
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
568 &m.value,
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
569 ); err != nil {
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
570 return err
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
571 }
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
572 m.when = m.when.UTC()
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
573 ms = append(ms, m)
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
574 }
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
575 if err := rows.Err(); err != nil {
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
576 return err
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
577 }
fbc79c8459b4 Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5201
diff changeset
578 bn.measurements = ms
5200
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
579 return nil
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
580 }
5203
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
581
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
582 func (measurement *availMeasurement) getDepth() float64 {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
583 return float64(measurement.depth)
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
584 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
585
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
586 func (measurement *availMeasurement) getValue() float64 {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
587 return float64(measurement.value)
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
588 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
589
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
590 func (measurement *availMeasurement) getWidth() float64 {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
591 return float64(measurement.width)
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
592 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
593
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
594 func (measurements availMeasurements) classify(
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
595 from, to time.Time,
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
596 breaks []float64,
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
597 access func(*availMeasurement) float64,
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
598 ) []time.Duration {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
599
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
600 if len(breaks) == 0 {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
601 return []time.Duration{}
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
602 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
603
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
604 result := make([]time.Duration, len(breaks)+1)
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
605 classes := make([]float64, len(breaks)+2)
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
606 values := make([]time.Time, len(classes))
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
607
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
608 // Add sentinels
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
609 classes[0] = breaks[0] - 9999
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
610 classes[len(classes)-1] = breaks[len(breaks)-1] + 9999
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
611 for i := range breaks {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
612 classes[i+1] = breaks[i]
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
613 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
614
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
615 idx := sort.Search(len(measurements), func(i int) bool {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
616 // All values before from can be ignored.
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
617 return !measurements[i].when.Before(from)
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
618 })
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
619
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
620 if idx >= len(measurements) {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
621 return result
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
622 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
623
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
624 // Be safe for interpolation.
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
625 if idx > 0 {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
626 idx--
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
627 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
628
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
629 measurements = measurements[idx:]
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
630
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
631 for i := 0; i < len(measurements)-1; i++ {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
632 p1 := &measurements[i]
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
633 p2 := &measurements[i+1]
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
634
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
635 if p1.when.After(to) {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
636 return result
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
637 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
638
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
639 if p2.when.Before(from) {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
640 continue
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
641 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
642
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
643 if p2.when.Sub(p1.when).Hours() > 1.5 {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
644 // Don't interpolate ranges bigger then one and a half hour
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
645 continue
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
646 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
647
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
648 lo, hi := common.MaxTime(p1.when, from), common.MinTime(p2.when, to)
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
649
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
650 m1, m2 := access(p1), access(p2)
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
651 if m1 == m2 { // The whole interval is in only one class.
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
652 for j := 0; j < len(classes)-1; j++ {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
653 if classes[j] <= m1 && m1 <= classes[j+1] {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
654 result[j] += hi.Sub(lo)
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
655 break
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
656 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
657 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
658 continue
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
659 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
660
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
661 f := common.InterpolateTime(
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
662 p1.when, m1,
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
663 p2.when, m2,
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
664 )
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
665
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
666 for j, c := range classes {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
667 values[j] = f(c)
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
668 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
669
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
670 for j := 0; j < len(values)-1; j++ {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
671 start, end := common.OrderTime(values[j], values[j+1])
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
672
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
673 if start.After(hi) || end.Before(lo) {
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
674 continue
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
675 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
676
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
677 start, end = common.MaxTime(start, lo), common.MinTime(end, hi)
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
678 result[j] += end.Sub(start)
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
679 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
680 }
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
681
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
682 return result
355195a90298 Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5202
diff changeset
683 }