Mercurial > gemma
annotate pkg/controllers/fwa.go @ 5204:7ca9e6c9a203 new-fwa
Introduced type for mode (monthly, quarterly, yearly).
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 11 May 2020 11:03:19 +0200 |
parents | 355195a90298 |
children | c7907715309f |
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, |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
270 vs.limiting) |
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 break |
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 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
279 if shipable { |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
280 shipableDays++ |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
281 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
282 // 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
|
283 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
284 current = next |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
285 } |
5199
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 |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
288 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
|
289 return time.Date( |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
290 t.Year(), |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
291 t.Month(), |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
292 t.Day(), |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
293 0, 0, 0, 0, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
294 t.Location()) |
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 |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
297 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
|
298 return time.Date( |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
299 t.Year(), |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
300 t.Month(), |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
301 t.Day(), |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
302 23, 59, 59, 999999999, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
303 t.Location()) |
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 |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
306 func parseFromTo( |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
307 rw http.ResponseWriter, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
308 req *http.Request, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
309 ) (time.Time, time.Time, bool) { |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
310 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
|
311 if !ok { |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
312 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
|
313 } |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
314 |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
315 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
|
316 if !ok { |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
317 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
|
318 } |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
319 |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
320 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
|
321 // 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
|
322 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
|
323 } |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
324 |
5204
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
325 func parseFWAMode(mode string) fwaMode { |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
326 switch strings.ToLower(mode) { |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
327 case "monthly": |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
328 return fwaMonthly |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
329 case "quarterly": |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
330 return fwaQuarterly |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
331 case "yearly": |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
332 return fwaYearly |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
333 default: |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
334 return fwaMonthly |
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 |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
338 func breaksToReferenceValue(breaks string) []float64 { |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
339 parts := strings.Split(breaks, ",") |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
340 var values []float64 |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
341 |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
342 for _, part := range parts { |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
343 part = strings.TrimSpace(part) |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
344 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
|
345 values = append(values, v) |
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 |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
349 return common.DedupFloat64s(values) |
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 |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
352 func parseBreaks(breaks string) []float64 { |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
353 if breaks != "" { |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
354 return breaksToReferenceValue(breaks) |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
355 } |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
356 return afdRefs |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
357 } |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
358 |
5200
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
359 func (tr *timeRange) intersects(from, to time.Time) bool { |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
360 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
|
361 } |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
362 |
5201
40daecc6f552
Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5200
diff
changeset
|
363 func (tr *timeRange) toUTC() { |
40daecc6f552
Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5200
diff
changeset
|
364 tr.lower = tr.lower.UTC() |
40daecc6f552
Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5200
diff
changeset
|
365 tr.upper = tr.upper.UTC() |
40daecc6f552
Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5200
diff
changeset
|
366 } |
40daecc6f552
Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5200
diff
changeset
|
367 |
5197
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
368 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
|
369 |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
370 var last *limitingValidity |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
371 |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
372 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
|
373 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
|
374 return last |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
375 } |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
376 for i := range lvs { |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
377 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
|
378 last = lv |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
379 return lv |
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 } |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
382 return nil |
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 } |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
385 |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
386 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
|
387 switch limiting { |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
388 case "depth": |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
389 return (*availMeasurement).getDepth |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
390 case "width": |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
391 return (*availMeasurement).getWidth |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
392 default: |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
393 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
|
394 return (*availMeasurement).getDepth |
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 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
397 |
5197
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
398 func loadLimitingValidities( |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
399 ctx context.Context, |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
400 conn *sql.Conn, |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
401 bottleneckID string, |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
402 from, to time.Time, |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
403 ) (limitingValidities, error) { |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
404 |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
405 var lvs limitingValidities |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
406 |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
407 rows, err := conn.QueryContext( |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
408 ctx, |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
409 selectLimitingSQL, |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
410 from, to) |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
411 |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
412 if err != nil { |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
413 return nil, err |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
414 } |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
415 defer rows.Close() |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
416 |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
417 for rows.Next() { |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
418 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
|
419 var access string |
5197
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
420 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
|
421 &access, |
5197
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
422 &lv.lower, |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
423 &lv.upper, |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
424 ); err != nil { |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
425 return nil, err |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
426 } |
5201
40daecc6f552
Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5200
diff
changeset
|
427 lv.toUTC() |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
428 lv.limiting = limitingFactor(access) |
5197
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
429 lvs = append(lvs, lv) |
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 |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
432 return lvs, rows.Err() |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
433 } |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
434 |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
435 func loadSymbolBottlenecksFromTo( |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
436 ctx context.Context, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
437 conn *sql.Conn, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
438 what, name string, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
439 from, to time.Time, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
440 ) ([]bottleneck, error) { |
5184
445daeefca7b
Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
441 |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
442 rows, err := conn.QueryContext( |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
443 ctx, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
444 fmt.Sprintf(selectSymbolBottlenecksSQL, what), |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
445 name, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
446 from, to) |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
447 if err != nil { |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
448 return nil, err |
5184
445daeefca7b
Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
449 } |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
450 defer rows.Close() |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
451 |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
452 var bottlenecks []bottleneck |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
453 |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
454 for rows.Next() { |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
455 var b bottleneck |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
456 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
|
457 return nil, err |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
458 } |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
459 bottlenecks = append(bottlenecks, b) |
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 |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
462 return bottlenecks, rows.Err() |
5184
445daeefca7b
Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
463 } |
5195
d6710d29516b
Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5184
diff
changeset
|
464 |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
465 func extractBottleneck( |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
466 _ context.Context, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
467 _ *sql.Conn, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
468 name string, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
469 _, _ time.Time, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
470 ) ([]bottleneck, error) { |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
471 return []bottleneck{{id: name}}, nil |
5196
5bc8daa986d9
More code movement.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5195
diff
changeset
|
472 } |
5bc8daa986d9
More code movement.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5195
diff
changeset
|
473 |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
474 func extractStretch( |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
475 ctx context.Context, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
476 conn *sql.Conn, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
477 name string, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
478 from, to time.Time, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
479 ) ([]bottleneck, error) { |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
480 return loadSymbolBottlenecksFromTo( |
5197
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
481 ctx, |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
482 conn, |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
483 "stretches", name, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
484 from, to) |
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 |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
487 func extractSection( |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
488 ctx context.Context, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
489 conn *sql.Conn, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
490 name string, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
491 from, to time.Time, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
492 ) ([]bottleneck, error) { |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
493 return loadSymbolBottlenecksFromTo( |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
494 ctx, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
495 conn, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
496 "sections", name, |
5197
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
497 from, to) |
5199
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 |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
500 func (bn *bottleneck) loadLimitingValidities( |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
501 ctx context.Context, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
502 conn *sql.Conn, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
503 from, to time.Time, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
504 ) error { |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
505 vs, err := loadLimitingValidities( |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
506 ctx, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
507 conn, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
508 bn.id, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
509 from, to) |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
510 if err == nil { |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
511 bn.validities = vs |
5197
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
512 } |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
513 return err |
5195
d6710d29516b
Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5184
diff
changeset
|
514 } |
5200
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
515 |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
516 func (bn *bottleneck) loadLDCs( |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
517 ctx context.Context, |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
518 conn *sql.Conn, |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
519 from, to time.Time, |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
520 ) error { |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
521 rows, err := conn.QueryContext( |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
522 ctx, selectLDCsSQL, |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
523 bn.id, |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
524 from, to) |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
525 if err != nil { |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
526 return err |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
527 } |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
528 defer rows.Close() |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
529 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
|
530 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
|
531 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
|
532 return err |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
533 } |
5201
40daecc6f552
Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5200
diff
changeset
|
534 l.toUTC() |
5200
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
535 for i := range bn.validities { |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
536 vs := bn.validities[i] |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
537 if vs.intersects(l.lower, l.upper) { |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
538 vs.ldcs = append(vs.ldcs, &l) |
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 } |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
541 } |
5202
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
542 return rows.Err() |
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 |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
545 func (bn *bottleneck) loadValues( |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
546 ctx context.Context, |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
547 conn *sql.Conn, |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
548 from, to time.Time, |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
549 los int, |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
550 ) error { |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
551 rows, err := conn.QueryContext( |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
552 ctx, selectMeasurementsSQL, |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
553 bn.id, |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
554 from, to, |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
555 los) |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
556 if err != nil { |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
557 return err |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
558 } |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
559 defer rows.Close() |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
560 |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
561 var ms availMeasurements |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
562 |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
563 for rows.Next() { |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
564 var m availMeasurement |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
565 if err := rows.Scan( |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
566 &m.when, |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
567 &m.depth, |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
568 &m.width, |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
569 &m.value, |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
570 ); err != nil { |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
571 return err |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
572 } |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
573 m.when = m.when.UTC() |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
574 ms = append(ms, m) |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
575 } |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
576 if err := rows.Err(); err != nil { |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
577 return err |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
578 } |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
579 bn.measurements = ms |
5200
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
580 return nil |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
581 } |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
582 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
583 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
|
584 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
|
585 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
586 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
587 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
|
588 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
|
589 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
590 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
591 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
|
592 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
|
593 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
594 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
595 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
|
596 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
|
597 breaks []float64, |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
598 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
|
599 ) []time.Duration { |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
600 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
601 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
|
602 return []time.Duration{} |
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 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
605 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
|
606 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
|
607 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
|
608 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
609 // Add sentinels |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
610 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
|
611 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
|
612 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
|
613 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
|
614 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
615 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
616 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
|
617 // 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
|
618 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
|
619 }) |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
620 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
621 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
|
622 return result |
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 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
625 // 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
|
626 if idx > 0 { |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
627 idx-- |
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 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
630 measurements = measurements[idx:] |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
631 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
632 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
|
633 p1 := &measurements[i] |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
634 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
|
635 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
636 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
|
637 return result |
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 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
640 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
|
641 continue |
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 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
644 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
|
645 // 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
|
646 continue |
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 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
649 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
|
650 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
651 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
|
652 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
|
653 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
|
654 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
|
655 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
|
656 break |
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 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
659 continue |
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 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
662 f := common.InterpolateTime( |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
663 p1.when, m1, |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
664 p2.when, m2, |
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 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
667 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
|
668 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
|
669 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
670 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
671 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
|
672 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
|
673 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
674 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
|
675 continue |
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 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
678 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
|
679 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
|
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 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
683 return result |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
684 } |