Mercurial > gemma
annotate pkg/controllers/fwa.go @ 5253:878d52d95e37 new-fwa
Early calcultion stop to prevent classification in the future.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 13 May 2020 10:26:13 +0200 |
parents | aebe1a12e8b9 |
children | 256ebbeb1252 |
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" |
5221
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
19 "encoding/csv" |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
20 "fmt" |
5195
d6710d29516b
Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5184
diff
changeset
|
21 "log" |
5184
445daeefca7b
Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
22 "net/http" |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
23 "sort" |
5204
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
24 "strconv" |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
25 "strings" |
5196
5bc8daa986d9
More code movement.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5195
diff
changeset
|
26 "time" |
5184
445daeefca7b
Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
27 |
5197
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
28 "github.com/gorilla/mux" |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
29 |
5196
5bc8daa986d9
More code movement.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5195
diff
changeset
|
30 "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
|
31 "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
|
32 ) |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
33 |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
34 const ( |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
35 selectBottlenecksLimitingSQL = ` |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
36 SELECT |
5233
d6374435111a
Fixed order of parameters in SQL result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5232
diff
changeset
|
37 lower(validity), |
d6374435111a
Fixed order of parameters in SQL result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5232
diff
changeset
|
38 upper(validity), |
5197
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
39 limiting |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
40 FROM |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
41 waterway.bottlenecks |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
42 WHERE |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
43 bottleneck_id = $1 AND |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
44 validity && tstzrange($2, $3)` |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
45 |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
46 selectSymbolBottlenecksSQL = ` |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
47 SELECT |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
48 distinct(b.bottleneck_id) |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
49 FROM |
5246
6cbfa3c3803d
stretches und sections are in different schemata.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5245
diff
changeset
|
50 %s s, waterway.bottlenecks b |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
51 WHERE |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
52 ST_Intersects(b.area, s.area) |
5250
13e1767b63a1
Reverted: 8c44b518141a, which didn't fix anything.
Sascha Wilde <wilde@intevation.de>
parents:
5248
diff
changeset
|
53 AND s.name = $1 |
13e1767b63a1
Reverted: 8c44b518141a, which didn't fix anything.
Sascha Wilde <wilde@intevation.de>
parents:
5248
diff
changeset
|
54 AND b.validity && tstzrange($2, $3)` |
5200
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
55 |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
56 selectLDCsSQL = ` |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
57 SELECT |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
58 lower(grwl.validity), |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
59 upper(grwl.validity), |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
60 grwl.value |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
61 FROM |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
62 waterway.gauges_reference_water_levels grwl |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
63 JOIN waterway.bottlenecks bns |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
64 ON grwl.location = bns.gauge_location |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
65 WHERE |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
66 grwl.depth_reference like 'LDC%' |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
67 AND bns.bottleneck_id = $1 |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
68 AND grwl.validity && tstzrange($2, $3)` |
5202
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
69 |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
70 selectMeasurementsSQL = ` |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
71 WITH data AS ( |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
72 SELECT |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
73 efa.measure_date, |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
74 efa.available_depth_value, |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
75 efa.available_width_value, |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
76 efa.water_level_value |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
77 FROM waterway.effective_fairway_availability efa |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
78 JOIN waterway.fairway_availability fa |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
79 ON efa.fairway_availability_id = fa.id |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
80 JOIN waterway.bottlenecks bn |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
81 ON fa.bottleneck_id = bn.bottleneck_id |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
82 WHERE |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
83 bn.bottleneck_id = $1 AND |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
84 efa.level_of_service = $2 AND |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
85 efa.measure_type = 'Measured' AND |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
86 (efa.available_depth_value IS NOT NULL OR |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
87 efa.available_width_value IS NOT NULL) AND |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
88 efa.water_level_value IS NOT NULL |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
89 ), |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
90 before AS ( |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
91 SELECT * FROM data WHERE measure_date < $3 |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
92 ORDER BY measure_date DESC LIMIT 1 |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
93 ), |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
94 inside AS ( |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
95 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
|
96 ), |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
97 after AS ( |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
98 SELECT * FROM data WHERE measure_date > $4 |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
99 ORDER BY measure_date LIMIT 1 |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
100 ) |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
101 SELECT * FROM before |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
102 UNION ALL |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
103 SELECT * FROM inside |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
104 UNION ALL |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
105 SELECT * FROM after |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
106 ORDER BY measure_date` |
5197
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 |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
109 type ( |
5200
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
110 timeRange struct { |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
111 lower time.Time |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
112 upper time.Time |
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 |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
115 ldc struct { |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
116 timeRange |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
117 value []float64 |
5200
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
118 } |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
119 |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
120 ldcs []*ldc |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
121 |
5210
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
122 limitingFactor int |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
123 |
5197
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
124 limitingValidity struct { |
5200
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
125 timeRange |
5210
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
126 limiting limitingFactor |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
127 ldcs ldcs |
5197
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
128 } |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
129 |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
130 limitingValidities []limitingValidity |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
131 |
5202
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
132 availMeasurement struct { |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
133 when time.Time |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
134 depth int16 |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
135 width int16 |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
136 value int16 |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
137 } |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
138 |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
139 availMeasurements []availMeasurement |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
140 |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
141 bottleneck struct { |
5202
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
142 id string |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
143 validities limitingValidities |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
144 measurements availMeasurements |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
145 } |
5204
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
146 |
5210
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
147 bottlenecks []bottleneck |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
148 |
5204
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
149 fwaMode int |
5184
445daeefca7b
Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
150 ) |
445daeefca7b
Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
151 |
5204
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
152 const ( |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
153 fwaMonthly fwaMode = iota |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
154 fwaQuarterly |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
155 fwaYearly |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
156 ) |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
157 |
5210
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
158 const ( |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
159 limitingDepth limitingFactor = iota |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
160 limitingWidth |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
161 ) |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
162 |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
163 var limitingAccess = [...]func(*availMeasurement) float64{ |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
164 limitingDepth: (*availMeasurement).getDepth, |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
165 limitingWidth: (*availMeasurement).getWidth, |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
166 } |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
167 |
5204
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
168 // 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
|
169 var afdRefs = []float64{ |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
170 230, |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
171 250, |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
172 } |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
173 |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
174 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
|
175 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
|
176 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
|
177 return l |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
178 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
179 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
180 return nil |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
181 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
182 |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
183 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
|
184 |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
185 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
|
186 if !ok { |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
187 return |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
188 } |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
189 |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
190 vars := mux.Vars(req) |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
191 name := vars["name"] |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
192 if name == "" { |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
193 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
|
194 return |
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 |
5226
755d54cd7fd0
Use LOS 3 as a default.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5225
diff
changeset
|
197 los, ok := parseFormInt(rw, req, "los", 3) |
5202
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
198 if !ok { |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
199 return |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
200 } |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
201 |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
202 ctx := req.Context() |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
203 conn := middleware.GetDBConn(req) |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
204 |
5251
1fce0fd81f46
Code simplification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5250
diff
changeset
|
205 var bns bottlenecks |
1fce0fd81f46
Code simplification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5250
diff
changeset
|
206 var err error |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
207 |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
208 switch vars["kind"] { |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
209 case "bottleneck": |
5251
1fce0fd81f46
Code simplification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5250
diff
changeset
|
210 bns = bottlenecks{{id: name}} |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
211 case "stretch": |
5251
1fce0fd81f46
Code simplification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5250
diff
changeset
|
212 bns, err = loadSymbolBottlenecks(ctx, conn, "users.stretches", name, from, to) |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
213 case "section": |
5251
1fce0fd81f46
Code simplification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5250
diff
changeset
|
214 bns, err = loadSymbolBottlenecks(ctx, conn, "waterway.sections", name, from, to) |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
215 default: |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
216 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
|
217 return |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
218 } |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
219 |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
220 if err != nil { |
5200
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
221 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
|
222 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
|
223 return |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
224 } |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
225 |
5211
8d582b5ff71e
Some checks to prevent trivial errors.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5210
diff
changeset
|
226 // If there are no bottlenecks there is nothing to do. |
5251
1fce0fd81f46
Code simplification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5250
diff
changeset
|
227 if len(bns) == 0 { |
5211
8d582b5ff71e
Some checks to prevent trivial errors.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5210
diff
changeset
|
228 http.Error(rw, "No bottlenecks found.", http.StatusNotFound) |
8d582b5ff71e
Some checks to prevent trivial errors.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5210
diff
changeset
|
229 return |
8d582b5ff71e
Some checks to prevent trivial errors.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5210
diff
changeset
|
230 } |
8d582b5ff71e
Some checks to prevent trivial errors.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5210
diff
changeset
|
231 |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
232 // load validities and limiting factors |
5251
1fce0fd81f46
Code simplification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5250
diff
changeset
|
233 for i := range bns { |
1fce0fd81f46
Code simplification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5250
diff
changeset
|
234 if err := bns[i].loadLimitingValidities(ctx, conn, from, to); err != nil { |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
235 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
|
236 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
|
237 return |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
238 } |
5200
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
239 // load LCDs |
5251
1fce0fd81f46
Code simplification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5250
diff
changeset
|
240 if err := bns[i].loadLDCs(ctx, conn, from, to); err != nil { |
5200
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
241 log.Printf("error: %v\n", err) |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
242 http.Error(rw, "cannot load LDCs", http.StatusInternalServerError) |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
243 return |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
244 } |
5202
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
245 // load values |
5251
1fce0fd81f46
Code simplification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5250
diff
changeset
|
246 if err := bns[i].loadValues(ctx, conn, from, to, los); err != nil { |
5202
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
247 log.Printf("error: %v\n", err) |
5230
40c9acd114cd
Added missing parameter to SQL query.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5228
diff
changeset
|
248 http.Error(rw, "cannot load values", http.StatusInternalServerError) |
5202
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
249 return |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
250 } |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
251 } |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
252 |
5210
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
253 // separate breaks for depth and width |
5212
6c316a4d3386
Pull breaks from the request parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5211
diff
changeset
|
254 var ( |
5214
ebcf33d79d2e
Use breaks to classfify.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5213
diff
changeset
|
255 breaks = parseBreaks(req.FormValue("breaks"), afdRefs) |
ebcf33d79d2e
Use breaks to classfify.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5213
diff
changeset
|
256 depthBreaks = parseBreaks(req.FormValue("depthbreaks"), breaks) |
ebcf33d79d2e
Use breaks to classfify.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5213
diff
changeset
|
257 widthBreaks = parseBreaks(req.FormValue("widthbreaks"), breaks) |
ebcf33d79d2e
Use breaks to classfify.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5213
diff
changeset
|
258 chooseBreaks = [...][]float64{ |
ebcf33d79d2e
Use breaks to classfify.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5213
diff
changeset
|
259 limitingDepth: depthBreaks, |
ebcf33d79d2e
Use breaks to classfify.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5213
diff
changeset
|
260 limitingWidth: widthBreaks, |
ebcf33d79d2e
Use breaks to classfify.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5213
diff
changeset
|
261 } |
ebcf33d79d2e
Use breaks to classfify.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5213
diff
changeset
|
262 |
5251
1fce0fd81f46
Code simplification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5250
diff
changeset
|
263 useDepth = bns.hasLimiting(limitingDepth, from, to) |
1fce0fd81f46
Code simplification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5250
diff
changeset
|
264 useWidth = bns.hasLimiting(limitingWidth, from, to) |
5212
6c316a4d3386
Pull breaks from the request parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5211
diff
changeset
|
265 ) |
5210
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
266 |
5212
6c316a4d3386
Pull breaks from the request parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5211
diff
changeset
|
267 if useDepth && useWidth && len(widthBreaks) != len(depthBreaks) { |
5211
8d582b5ff71e
Some checks to prevent trivial errors.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5210
diff
changeset
|
268 http.Error( |
8d582b5ff71e
Some checks to prevent trivial errors.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5210
diff
changeset
|
269 rw, |
8d582b5ff71e
Some checks to prevent trivial errors.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5210
diff
changeset
|
270 fmt.Sprintf("class breaks lengths differ: %d != %d", |
5212
6c316a4d3386
Pull breaks from the request parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5211
diff
changeset
|
271 len(widthBreaks), len(depthBreaks)), |
5211
8d582b5ff71e
Some checks to prevent trivial errors.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5210
diff
changeset
|
272 http.StatusBadRequest, |
8d582b5ff71e
Some checks to prevent trivial errors.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5210
diff
changeset
|
273 ) |
8d582b5ff71e
Some checks to prevent trivial errors.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5210
diff
changeset
|
274 return |
8d582b5ff71e
Some checks to prevent trivial errors.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5210
diff
changeset
|
275 } |
8d582b5ff71e
Some checks to prevent trivial errors.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5210
diff
changeset
|
276 |
5221
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
277 availability := vars["type"] == "availability" |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
278 |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
279 var record []string |
5242
98ad96446d37
Switched availability and fairway depths modes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5239
diff
changeset
|
280 if !availability { |
5221
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
281 // in days |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
282 record = makeHeader(useDepth && useWidth, 1, breaks, 'd') |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
283 } else { |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
284 // percentage |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
285 record = makeHeader(useDepth && useWidth, 3, breaks, '%') |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
286 } |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
287 |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
288 rw.Header().Add("Content-Type", "text/csv") |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
289 |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
290 out := csv.NewWriter(rw) |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
291 |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
292 if err := out.Write(record); err != nil { |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
293 // Too late for HTTP status message. |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
294 log.Printf("error: %v\n", err) |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
295 return |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
296 } |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
297 |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
298 for i := range record[1:] { |
5244
8f9cd1df5028
Fixed a copy-by-value problem.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5243
diff
changeset
|
299 record[i+1] = "0" |
5221
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
300 } |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
301 |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
302 // For every day on every bottleneck we need to find out if this day is valid. |
5251
1fce0fd81f46
Code simplification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5250
diff
changeset
|
303 validities := make([]func(time.Time, time.Time) *limitingValidity, len(bns)) |
1fce0fd81f46
Code simplification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5250
diff
changeset
|
304 for i := range bns { |
1fce0fd81f46
Code simplification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5250
diff
changeset
|
305 validities[i] = bns[i].validities.find() |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
306 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
307 |
5227
fa55f403985b
Added a comment about the mode.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5226
diff
changeset
|
308 // Mode reflects if we use monthly, quarterly od yearly intervals. |
5208
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
309 mode := parseFWAMode(req.FormValue("mode")) |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
310 |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
311 label, finish := interval(mode, from) |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
312 |
5236
b47a041e03c4
Fill classification columns in CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5234
diff
changeset
|
313 var ( |
b47a041e03c4
Fill classification columns in CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5234
diff
changeset
|
314 totalDays, overLDCDays int |
b47a041e03c4
Fill classification columns in CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5234
diff
changeset
|
315 missingLDCs = make([]int, len(validities)) |
5244
8f9cd1df5028
Fixed a copy-by-value problem.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5243
diff
changeset
|
316 counters = make([]int, len(breaks)+1) |
5236
b47a041e03c4
Fill classification columns in CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5234
diff
changeset
|
317 ) |
5216
91feaf7ac486
Started to accumulate time segments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5215
diff
changeset
|
318 |
5243
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
319 var current, next time.Time |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
320 |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
321 write := func() error { |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
322 record[0] = label(current) |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
323 |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
324 if !availability { |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
325 record[1] = strconv.Itoa(totalDays - overLDCDays) |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
326 record[2] = strconv.Itoa(overLDCDays) |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
327 for i, c := range counters { |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
328 record[3+i] = strconv.Itoa(c) |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
329 } |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
330 } else { |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
331 overPerc := float64(overLDCDays) * 100 / float64(totalDays) |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
332 record[1] = fmt.Sprintf("%.3f", 100-overPerc) |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
333 record[2] = fmt.Sprintf("%.3f", overPerc) |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
334 for i, c := range counters { |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
335 perc := float64(c) * 100 / float64(totalDays) |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
336 record[3+i] = fmt.Sprintf("%.3f", perc) |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
337 } |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
338 } |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
339 |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
340 return out.Write(record) |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
341 } |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
342 |
5253
878d52d95e37
Early calcultion stop to prevent classification in the future.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5252
diff
changeset
|
343 // Stop yesterday |
878d52d95e37
Early calcultion stop to prevent classification in the future.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5252
diff
changeset
|
344 end := common.MinTime(dusk(time.Now()).Add(-time.Nanosecond), to) |
878d52d95e37
Early calcultion stop to prevent classification in the future.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5252
diff
changeset
|
345 |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
346 // We step through the time in steps of one day. |
5253
878d52d95e37
Early calcultion stop to prevent classification in the future.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5252
diff
changeset
|
347 for current = from; current.Before(end); { |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
348 |
5243
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
349 next = current.AddDate(0, 0, 1) |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
350 |
5228
f3a88039d822
Renamed variable shipable to overLDC to remove implicit semantics.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5227
diff
changeset
|
351 // Assume that a bottleneck is over LDC. |
f3a88039d822
Renamed variable shipable to overLDC to remove implicit semantics.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5227
diff
changeset
|
352 overLDC := true |
5252
aebe1a12e8b9
If looking at sections/stretches the bottleneck with the lowest class determines the class of the whole construct.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5251
diff
changeset
|
353 lowest := len(counters) - 1 |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
354 |
5244
8f9cd1df5028
Fixed a copy-by-value problem.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5243
diff
changeset
|
355 var hasValid bool |
8f9cd1df5028
Fixed a copy-by-value problem.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5243
diff
changeset
|
356 |
5216
91feaf7ac486
Started to accumulate time segments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5215
diff
changeset
|
357 // check all bottlenecks |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
358 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
|
359 |
5216
91feaf7ac486
Started to accumulate time segments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5215
diff
changeset
|
360 // Check if bottleneck is available for this day. |
91feaf7ac486
Started to accumulate time segments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5215
diff
changeset
|
361 vs := validity(current, next) |
91feaf7ac486
Started to accumulate time segments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5215
diff
changeset
|
362 if vs == nil { |
91feaf7ac486
Started to accumulate time segments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5215
diff
changeset
|
363 continue |
91feaf7ac486
Started to accumulate time segments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5215
diff
changeset
|
364 } |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
365 |
5216
91feaf7ac486
Started to accumulate time segments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5215
diff
changeset
|
366 // Let's see if we have a LDC for this day. |
91feaf7ac486
Started to accumulate time segments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5215
diff
changeset
|
367 ldc := vs.ldcs.find(current, next) |
91feaf7ac486
Started to accumulate time segments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5215
diff
changeset
|
368 if ldc == nil { |
5217
70d83b7d36ef
Track the number days LDCs are not available at bottlenecks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5216
diff
changeset
|
369 missingLDCs[i]++ |
5216
91feaf7ac486
Started to accumulate time segments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5215
diff
changeset
|
370 continue |
91feaf7ac486
Started to accumulate time segments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5215
diff
changeset
|
371 } |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
372 |
5244
8f9cd1df5028
Fixed a copy-by-value problem.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5243
diff
changeset
|
373 hasValid = true |
8f9cd1df5028
Fixed a copy-by-value problem.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5243
diff
changeset
|
374 |
5228
f3a88039d822
Renamed variable shipable to overLDC to remove implicit semantics.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5227
diff
changeset
|
375 if overLDC { // If its already not shipable we need no further tests. |
5251
1fce0fd81f46
Code simplification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5250
diff
changeset
|
376 result := bns[i].measurements.classify( |
5214
ebcf33d79d2e
Use breaks to classfify.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5213
diff
changeset
|
377 current, next, |
5216
91feaf7ac486
Started to accumulate time segments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5215
diff
changeset
|
378 ldc.value, |
91feaf7ac486
Started to accumulate time segments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5215
diff
changeset
|
379 (*availMeasurement).getValue) |
5214
ebcf33d79d2e
Use breaks to classfify.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5213
diff
changeset
|
380 |
5216
91feaf7ac486
Started to accumulate time segments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5215
diff
changeset
|
381 if result[1] < 12*time.Hour { |
5228
f3a88039d822
Renamed variable shipable to overLDC to remove implicit semantics.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5227
diff
changeset
|
382 overLDC = false |
5216
91feaf7ac486
Started to accumulate time segments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5215
diff
changeset
|
383 } |
91feaf7ac486
Started to accumulate time segments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5215
diff
changeset
|
384 } |
5214
ebcf33d79d2e
Use breaks to classfify.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5213
diff
changeset
|
385 |
5251
1fce0fd81f46
Code simplification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5250
diff
changeset
|
386 if min := minClass(bns[i].measurements.classify( |
5216
91feaf7ac486
Started to accumulate time segments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5215
diff
changeset
|
387 current, next, |
91feaf7ac486
Started to accumulate time segments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5215
diff
changeset
|
388 chooseBreaks[vs.limiting], |
5236
b47a041e03c4
Fill classification columns in CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5234
diff
changeset
|
389 limitingAccess[vs.limiting]), |
b47a041e03c4
Fill classification columns in CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5234
diff
changeset
|
390 12*time.Hour, |
5252
aebe1a12e8b9
If looking at sections/stretches the bottleneck with the lowest class determines the class of the whole construct.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5251
diff
changeset
|
391 ); min < lowest { |
aebe1a12e8b9
If looking at sections/stretches the bottleneck with the lowest class determines the class of the whole construct.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5251
diff
changeset
|
392 lowest = min |
5236
b47a041e03c4
Fill classification columns in CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5234
diff
changeset
|
393 } |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
394 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
395 |
5244
8f9cd1df5028
Fixed a copy-by-value problem.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5243
diff
changeset
|
396 if hasValid { |
8f9cd1df5028
Fixed a copy-by-value problem.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5243
diff
changeset
|
397 if overLDC { |
8f9cd1df5028
Fixed a copy-by-value problem.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5243
diff
changeset
|
398 overLDCDays++ |
8f9cd1df5028
Fixed a copy-by-value problem.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5243
diff
changeset
|
399 } |
5252
aebe1a12e8b9
If looking at sections/stretches the bottleneck with the lowest class determines the class of the whole construct.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5251
diff
changeset
|
400 counters[lowest]++ |
5245
9dd1ae697f93
If not valid assume all is in best conditions.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5244
diff
changeset
|
401 } else { // assume that all is in best conditions |
9dd1ae697f93
If not valid assume all is in best conditions.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5244
diff
changeset
|
402 overLDCDays++ |
9dd1ae697f93
If not valid assume all is in best conditions.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5244
diff
changeset
|
403 counters[len(counters)-1]++ |
5236
b47a041e03c4
Fill classification columns in CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5234
diff
changeset
|
404 } |
5245
9dd1ae697f93
If not valid assume all is in best conditions.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5244
diff
changeset
|
405 |
5224
fc999a902d87
Write LCD columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5223
diff
changeset
|
406 totalDays++ |
5208
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
407 |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
408 if finish(next) { |
5243
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
409 if err := write(); err != nil { |
5239
158a26bcb2af
Write the data out!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5236
diff
changeset
|
410 // Too late for HTTP status message. |
158a26bcb2af
Write the data out!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5236
diff
changeset
|
411 log.Printf("error: %v\n", err) |
158a26bcb2af
Write the data out!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5236
diff
changeset
|
412 return |
158a26bcb2af
Write the data out!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5236
diff
changeset
|
413 } |
158a26bcb2af
Write the data out!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5236
diff
changeset
|
414 |
5208
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
415 // Reset counters |
5228
f3a88039d822
Renamed variable shipable to overLDC to remove implicit semantics.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5227
diff
changeset
|
416 overLDCDays, totalDays = 0, 0 |
5236
b47a041e03c4
Fill classification columns in CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5234
diff
changeset
|
417 for i := range counters { |
b47a041e03c4
Fill classification columns in CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5234
diff
changeset
|
418 counters[i] = 0 |
b47a041e03c4
Fill classification columns in CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5234
diff
changeset
|
419 } |
5208
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
420 } |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
421 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
422 current = next |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
423 } |
5217
70d83b7d36ef
Track the number days LDCs are not available at bottlenecks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5216
diff
changeset
|
424 |
5243
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
425 // Write rest if last period was not finished. |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
426 if totalDays > 0 { |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
427 if err := write(); err != nil { |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
428 // Too late for HTTP status message. |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
429 log.Printf("error: %v\n", err) |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
430 return |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
431 } |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
432 } |
0ab809236eb5
Write rest if lasteval period was not complete.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5242
diff
changeset
|
433 |
5217
70d83b7d36ef
Track the number days LDCs are not available at bottlenecks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5216
diff
changeset
|
434 // TODO: Log missing LDCs |
5221
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
435 |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
436 out.Flush() |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
437 if err := out.Error(); err != nil { |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
438 // Too late for HTTP status message. |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
439 log.Printf("error: %v\n", err) |
6794e85dc2dd
Write headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5220
diff
changeset
|
440 } |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
441 } |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
442 |
5236
b47a041e03c4
Fill classification columns in CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5234
diff
changeset
|
443 func minClass(classes []time.Duration, threshold time.Duration) int { |
b47a041e03c4
Fill classification columns in CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5234
diff
changeset
|
444 var sum time.Duration |
b47a041e03c4
Fill classification columns in CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5234
diff
changeset
|
445 for i, v := range classes { |
b47a041e03c4
Fill classification columns in CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5234
diff
changeset
|
446 if sum += v; sum >= threshold { |
b47a041e03c4
Fill classification columns in CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5234
diff
changeset
|
447 return i |
5225
c5599966befe
find minima of each class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5224
diff
changeset
|
448 } |
c5599966befe
find minima of each class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5224
diff
changeset
|
449 } |
5252
aebe1a12e8b9
If looking at sections/stretches the bottleneck with the lowest class determines the class of the whole construct.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5251
diff
changeset
|
450 return len(classes) - 1 |
5225
c5599966befe
find minima of each class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5224
diff
changeset
|
451 } |
c5599966befe
find minima of each class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5224
diff
changeset
|
452 |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
453 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
|
454 return time.Date( |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
455 t.Year(), |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
456 t.Month(), |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
457 t.Day(), |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
458 0, 0, 0, 0, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
459 t.Location()) |
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 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
|
463 return time.Date( |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
464 t.Year(), |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
465 t.Month(), |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
466 t.Day(), |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
467 23, 59, 59, 999999999, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
468 t.Location()) |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
469 } |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
470 |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
471 func parseFromTo( |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
472 rw http.ResponseWriter, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
473 req *http.Request, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
474 ) (time.Time, time.Time, bool) { |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
475 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
|
476 if !ok { |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
477 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
|
478 } |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
479 |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
480 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
|
481 if !ok { |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
482 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
|
483 } |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
484 |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
485 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
|
486 // 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
|
487 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
|
488 } |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
489 |
5204
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
490 func parseFWAMode(mode string) fwaMode { |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
491 switch strings.ToLower(mode) { |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
492 case "monthly": |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
493 return fwaMonthly |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
494 case "quarterly": |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
495 return fwaQuarterly |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
496 case "yearly": |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
497 return fwaYearly |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
498 default: |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
499 return fwaMonthly |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
500 } |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
501 } |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
502 |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
503 func breaksToReferenceValue(breaks string) []float64 { |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
504 parts := strings.Split(breaks, ",") |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
505 var values []float64 |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
506 |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
507 for _, part := range parts { |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
508 part = strings.TrimSpace(part) |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
509 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
|
510 values = append(values, v) |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
511 } |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
512 } |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
513 |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
514 return common.DedupFloat64s(values) |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
515 } |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
516 |
5213
de417840dfee
Made breaks defaults more sensible
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5212
diff
changeset
|
517 func parseBreaks(breaks string, defaults []float64) []float64 { |
5204
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
518 if breaks != "" { |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
519 return breaksToReferenceValue(breaks) |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
520 } |
5213
de417840dfee
Made breaks defaults more sensible
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5212
diff
changeset
|
521 return defaults |
5204
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
522 } |
7ca9e6c9a203
Introduced type for mode (monthly, quarterly, yearly).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5203
diff
changeset
|
523 |
5200
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
524 func (tr *timeRange) intersects(from, to time.Time) bool { |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
525 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
|
526 } |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
527 |
5201
40daecc6f552
Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5200
diff
changeset
|
528 func (tr *timeRange) toUTC() { |
40daecc6f552
Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5200
diff
changeset
|
529 tr.lower = tr.lower.UTC() |
40daecc6f552
Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5200
diff
changeset
|
530 tr.upper = tr.upper.UTC() |
40daecc6f552
Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5200
diff
changeset
|
531 } |
40daecc6f552
Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5200
diff
changeset
|
532 |
5197
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
533 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
|
534 |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
535 var last *limitingValidity |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
536 |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
537 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
|
538 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
|
539 return last |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
540 } |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
541 for i := range lvs { |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
542 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
|
543 last = lv |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
544 return lv |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
545 } |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
546 } |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
547 return nil |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
548 } |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
549 } |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
550 |
5210
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
551 func (lvs limitingValidities) hasLimiting(limiting limitingFactor, from, to time.Time) bool { |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
552 for i := range lvs { |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
553 if lvs[i].limiting == limiting && lvs[i].intersects(from, to) { |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
554 return true |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
555 } |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
556 } |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
557 return false |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
558 } |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
559 |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
560 func (bns bottlenecks) hasLimiting(limiting limitingFactor, from, to time.Time) bool { |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
561 for i := range bns { |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
562 if bns[i].validities.hasLimiting(limiting, from, to) { |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
563 return true |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
564 } |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
565 } |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
566 return false |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
567 } |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
568 |
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
569 func parseLimitingFactor(limiting string) limitingFactor { |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
570 switch limiting { |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
571 case "depth": |
5210
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
572 return limitingDepth |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
573 case "width": |
5210
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
574 return limitingWidth |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
575 default: |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
576 log.Printf("warn: unknown limitation '%s'. default to 'depth'\n", limiting) |
5210
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
577 return limitingDepth |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
578 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
579 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
580 |
5197
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
581 func loadLimitingValidities( |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
582 ctx context.Context, |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
583 conn *sql.Conn, |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
584 bottleneckID string, |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
585 from, to time.Time, |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
586 ) (limitingValidities, error) { |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
587 |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
588 var lvs limitingValidities |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
589 |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
590 rows, err := conn.QueryContext( |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
591 ctx, |
5223
d4e4f7232513
Removed old bottlenecks controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5221
diff
changeset
|
592 selectBottlenecksLimitingSQL, |
5230
40c9acd114cd
Added missing parameter to SQL query.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5228
diff
changeset
|
593 bottleneckID, |
5197
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
594 from, to) |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
595 |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
596 if err != nil { |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
597 return nil, err |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
598 } |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
599 defer rows.Close() |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
600 |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
601 for rows.Next() { |
5231
225b2d0a1824
Validities may have an NULL upper bound.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5230
diff
changeset
|
602 var ( |
225b2d0a1824
Validities may have an NULL upper bound.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5230
diff
changeset
|
603 lv limitingValidity |
225b2d0a1824
Validities may have an NULL upper bound.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5230
diff
changeset
|
604 limiting string |
225b2d0a1824
Validities may have an NULL upper bound.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5230
diff
changeset
|
605 upper sql.NullTime |
225b2d0a1824
Validities may have an NULL upper bound.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5230
diff
changeset
|
606 ) |
5197
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
607 if err := rows.Scan( |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
608 &lv.lower, |
5231
225b2d0a1824
Validities may have an NULL upper bound.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5230
diff
changeset
|
609 &upper, |
5233
d6374435111a
Fixed order of parameters in SQL result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5232
diff
changeset
|
610 &limiting, |
5197
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
611 ); err != nil { |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
612 return nil, err |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
613 } |
5231
225b2d0a1824
Validities may have an NULL upper bound.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5230
diff
changeset
|
614 if upper.Valid { |
225b2d0a1824
Validities may have an NULL upper bound.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5230
diff
changeset
|
615 lv.upper = upper.Time |
225b2d0a1824
Validities may have an NULL upper bound.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5230
diff
changeset
|
616 } else { |
225b2d0a1824
Validities may have an NULL upper bound.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5230
diff
changeset
|
617 lv.upper = to.Add(24 * time.Hour) |
225b2d0a1824
Validities may have an NULL upper bound.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5230
diff
changeset
|
618 } |
5201
40daecc6f552
Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5200
diff
changeset
|
619 lv.toUTC() |
5210
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
620 lv.limiting = parseLimitingFactor(limiting) |
5197
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
621 lvs = append(lvs, lv) |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
622 } |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
623 |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
624 return lvs, rows.Err() |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
625 } |
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
626 |
5251
1fce0fd81f46
Code simplification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5250
diff
changeset
|
627 func loadSymbolBottlenecks( |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
628 ctx context.Context, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
629 conn *sql.Conn, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
630 what, name string, |
5250
13e1767b63a1
Reverted: 8c44b518141a, which didn't fix anything.
Sascha Wilde <wilde@intevation.de>
parents:
5248
diff
changeset
|
631 from, to time.Time, |
5210
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
632 ) (bottlenecks, error) { |
5184
445daeefca7b
Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
633 |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
634 rows, err := conn.QueryContext( |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
635 ctx, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
636 fmt.Sprintf(selectSymbolBottlenecksSQL, what), |
5250
13e1767b63a1
Reverted: 8c44b518141a, which didn't fix anything.
Sascha Wilde <wilde@intevation.de>
parents:
5248
diff
changeset
|
637 name, |
13e1767b63a1
Reverted: 8c44b518141a, which didn't fix anything.
Sascha Wilde <wilde@intevation.de>
parents:
5248
diff
changeset
|
638 from, to) |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
639 if err != nil { |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
640 return nil, err |
5184
445daeefca7b
Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
641 } |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
642 defer rows.Close() |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
643 |
5210
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
644 var bns bottlenecks |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
645 |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
646 for rows.Next() { |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
647 var b bottleneck |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
648 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
|
649 return nil, err |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
650 } |
5210
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
651 bns = append(bns, b) |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
652 } |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
653 |
5210
da6eb8073f77
Introduce separate breaks from depths and widths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5209
diff
changeset
|
654 return bns, rows.Err() |
5184
445daeefca7b
Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
655 } |
5195
d6710d29516b
Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5184
diff
changeset
|
656 |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
657 func (bn *bottleneck) loadLimitingValidities( |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
658 ctx context.Context, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
659 conn *sql.Conn, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
660 from, to time.Time, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
661 ) error { |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
662 vs, err := loadLimitingValidities( |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
663 ctx, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
664 conn, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
665 bn.id, |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
666 from, to) |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
667 if err == nil { |
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
668 bn.validities = vs |
5197
c352dbbf2778
Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5196
diff
changeset
|
669 } |
5199
5001582f2ee1
Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5197
diff
changeset
|
670 return err |
5195
d6710d29516b
Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5184
diff
changeset
|
671 } |
5200
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
672 |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
673 func (bn *bottleneck) loadLDCs( |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
674 ctx context.Context, |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
675 conn *sql.Conn, |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
676 from, to time.Time, |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
677 ) error { |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
678 rows, err := conn.QueryContext( |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
679 ctx, selectLDCsSQL, |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
680 bn.id, |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
681 from, to) |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
682 if err != nil { |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
683 return err |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
684 } |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
685 defer rows.Close() |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
686 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
|
687 l := ldc{value: []float64{0}} |
5231
225b2d0a1824
Validities may have an NULL upper bound.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5230
diff
changeset
|
688 var upper sql.NullTime |
225b2d0a1824
Validities may have an NULL upper bound.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5230
diff
changeset
|
689 if err := rows.Scan(&l.lower, &upper, &l.value[0]); err != nil { |
5200
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
690 return err |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
691 } |
5231
225b2d0a1824
Validities may have an NULL upper bound.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5230
diff
changeset
|
692 if upper.Valid { |
225b2d0a1824
Validities may have an NULL upper bound.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5230
diff
changeset
|
693 l.upper = upper.Time |
225b2d0a1824
Validities may have an NULL upper bound.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5230
diff
changeset
|
694 } else { |
225b2d0a1824
Validities may have an NULL upper bound.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5230
diff
changeset
|
695 l.upper = to.Add(24 * time.Hour) |
225b2d0a1824
Validities may have an NULL upper bound.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5230
diff
changeset
|
696 } |
5201
40daecc6f552
Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5200
diff
changeset
|
697 l.toUTC() |
5200
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
698 for i := range bn.validities { |
5244
8f9cd1df5028
Fixed a copy-by-value problem.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5243
diff
changeset
|
699 vs := &bn.validities[i] |
8f9cd1df5028
Fixed a copy-by-value problem.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5243
diff
changeset
|
700 |
5200
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
701 if vs.intersects(l.lower, l.upper) { |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
702 vs.ldcs = append(vs.ldcs, &l) |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
703 } |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
704 } |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
705 } |
5202
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
706 return rows.Err() |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
707 } |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
708 |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
709 func (bn *bottleneck) loadValues( |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
710 ctx context.Context, |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
711 conn *sql.Conn, |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
712 from, to time.Time, |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
713 los int, |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
714 ) error { |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
715 rows, err := conn.QueryContext( |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
716 ctx, selectMeasurementsSQL, |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
717 bn.id, |
5234
30a55f46996f
Another swapped sql parameter.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5233
diff
changeset
|
718 los, |
30a55f46996f
Another swapped sql parameter.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5233
diff
changeset
|
719 from, to) |
5202
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
720 if err != nil { |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
721 return err |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
722 } |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
723 defer rows.Close() |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
724 |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
725 var ms availMeasurements |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
726 |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
727 for rows.Next() { |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
728 var m availMeasurement |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
729 if err := rows.Scan( |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
730 &m.when, |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
731 &m.depth, |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
732 &m.width, |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
733 &m.value, |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
734 ); err != nil { |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
735 return err |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
736 } |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
737 m.when = m.when.UTC() |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
738 ms = append(ms, m) |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
739 } |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
740 if err := rows.Err(); err != nil { |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
741 return err |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
742 } |
fbc79c8459b4
Load water values, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5201
diff
changeset
|
743 bn.measurements = ms |
5200
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
744 return nil |
5572da077c89
Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5199
diff
changeset
|
745 } |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
746 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
747 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
|
748 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
|
749 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
750 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
751 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
|
752 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
|
753 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
754 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
755 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
|
756 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
|
757 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
758 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
759 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
|
760 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
|
761 breaks []float64, |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
762 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
|
763 ) []time.Duration { |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
764 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
765 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
|
766 return []time.Duration{} |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
767 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
768 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
769 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
|
770 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
|
771 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
|
772 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
773 // Add sentinels |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
774 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
|
775 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
|
776 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
|
777 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
|
778 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
779 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
780 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
|
781 // 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
|
782 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
|
783 }) |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
784 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
785 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
|
786 return result |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
787 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
788 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
789 // 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
|
790 if idx > 0 { |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
791 idx-- |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
792 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
793 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
794 measurements = measurements[idx:] |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
795 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
796 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
|
797 p1 := &measurements[i] |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
798 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
|
799 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
800 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
|
801 return result |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
802 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
803 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
804 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
|
805 continue |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
806 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
807 |
5247
d89f5d75223e
Deactivate interpolation stop for gaps longer than 1.5 hours.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5246
diff
changeset
|
808 // TODO: Discuss if we want somethinh like this. |
d89f5d75223e
Deactivate interpolation stop for gaps longer than 1.5 hours.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5246
diff
changeset
|
809 if false && p2.when.Sub(p1.when).Hours() > 1.5 { |
5203
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
810 // 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
|
811 continue |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
812 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
813 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
814 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
|
815 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
816 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
|
817 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
|
818 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
|
819 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
|
820 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
|
821 break |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
822 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
823 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
824 continue |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
825 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
826 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
827 f := common.InterpolateTime( |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
828 p1.when, m1, |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
829 p2.when, m2, |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
830 ) |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
831 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
832 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
|
833 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
|
834 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
835 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
836 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
|
837 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
|
838 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
839 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
|
840 continue |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
841 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
842 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
843 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
|
844 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
|
845 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
846 } |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
847 |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
848 return result |
355195a90298
Start calculting the navigability. TODO: accumulate and do output.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5202
diff
changeset
|
849 } |
5208
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
850 |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
851 func interval(mode fwaMode, t time.Time) ( |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
852 label func(time.Time) string, |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
853 finish func(time.Time) bool, |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
854 ) { |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
855 switch mode { |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
856 case fwaMonthly: |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
857 label, finish = monthLabel, otherMonth(t) |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
858 case fwaQuarterly: |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
859 label, finish = quarterLabel, otherQuarter(t) |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
860 case fwaYearly: |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
861 label, finish = yearLabel, otherYear(t) |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
862 default: |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
863 panic("Unknown mode") |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
864 } |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
865 return |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
866 } |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
867 |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
868 func monthLabel(t time.Time) string { |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
869 return fmt.Sprintf("%02d-%d", t.Month(), t.Year()) |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
870 } |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
871 |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
872 func quarterLabel(t time.Time) string { |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
873 return fmt.Sprintf("Q%d-%d", (int(t.Month())-1)/3+1, t.Year()) |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
874 } |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
875 |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
876 func yearLabel(t time.Time) string { |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
877 return strconv.Itoa(t.Year()) |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
878 } |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
879 |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
880 func otherMonth(t time.Time) func(time.Time) bool { |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
881 return func(x time.Time) bool { |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
882 flag := t.Day() == x.Day() |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
883 if flag { |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
884 t = x |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
885 } |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
886 return flag |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
887 } |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
888 } |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
889 |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
890 func otherQuarter(t time.Time) func(time.Time) bool { |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
891 return func(x time.Time) bool { |
5209
32eb35699bd3
Fixed bug in quarter detection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5208
diff
changeset
|
892 flag := (t.Month()-1)/3 != (x.Month()-1)/3 |
5208
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
893 if flag { |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
894 t = x |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
895 } |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
896 return flag |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
897 } |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
898 } |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
899 |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
900 func otherYear(t time.Time) func(time.Time) bool { |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
901 return func(x time.Time) bool { |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
902 flag := t.Year() != x.Year() |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
903 if flag { |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
904 t = x |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
905 } |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
906 return flag |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
907 } |
defca5418446
Define how modes work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5205
diff
changeset
|
908 } |
5220
142ac550bd9a
Unify headers for CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5218
diff
changeset
|
909 |
142ac550bd9a
Unify headers for CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5218
diff
changeset
|
910 func makeHeader(flag bool, prec int, breaks []float64, unit rune) []string { |
142ac550bd9a
Unify headers for CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5218
diff
changeset
|
911 record := make([]string, 1+2+len(breaks)+1) |
142ac550bd9a
Unify headers for CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5218
diff
changeset
|
912 record[0] = "# time" |
142ac550bd9a
Unify headers for CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5218
diff
changeset
|
913 record[1] = fmt.Sprintf("# < LDC [%c]", unit) |
142ac550bd9a
Unify headers for CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5218
diff
changeset
|
914 record[2] = fmt.Sprintf("# >= LDC [%c]", unit) |
142ac550bd9a
Unify headers for CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5218
diff
changeset
|
915 for i, v := range breaks { |
142ac550bd9a
Unify headers for CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5218
diff
changeset
|
916 if flag { |
142ac550bd9a
Unify headers for CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5218
diff
changeset
|
917 if i == 0 { |
142ac550bd9a
Unify headers for CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5218
diff
changeset
|
918 record[3] = fmt.Sprintf("# < break_1 [%c]", unit) |
142ac550bd9a
Unify headers for CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5218
diff
changeset
|
919 } |
142ac550bd9a
Unify headers for CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5218
diff
changeset
|
920 record[i+4] = fmt.Sprintf("# >= break_%d [%c]", i+1, unit) |
142ac550bd9a
Unify headers for CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5218
diff
changeset
|
921 } else { |
142ac550bd9a
Unify headers for CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5218
diff
changeset
|
922 if i == 0 { |
142ac550bd9a
Unify headers for CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5218
diff
changeset
|
923 record[3] = fmt.Sprintf("# < %.*f [%c]", prec, v, unit) |
142ac550bd9a
Unify headers for CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5218
diff
changeset
|
924 } |
142ac550bd9a
Unify headers for CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5218
diff
changeset
|
925 record[i+4] = fmt.Sprintf("# >= %.*f [%c]", prec, v, unit) |
142ac550bd9a
Unify headers for CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5218
diff
changeset
|
926 } |
142ac550bd9a
Unify headers for CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5218
diff
changeset
|
927 } |
142ac550bd9a
Unify headers for CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5218
diff
changeset
|
928 return record |
142ac550bd9a
Unify headers for CSV export.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5218
diff
changeset
|
929 } |