annotate pkg/controllers/cross.go @ 3302:ec6163c6687d

'Historicise' gauges on import Gauge data sets will be updated or a new version will be inserted depending on temporal validity and a timestamp marking the last update in the RIS-Index of a data set. The trigger on date_info is removed because the value is actually an attribut coming from the RIS-Index. Gauge measurements and predictions are associated to the version with matching temporal validity. Bottlenecks are always associated to the actual version of the gauge, although this might change as soon as bottlenecks are 'historicised', too.
author Tom Gottfried <tom@intevation.de>
date Thu, 16 May 2019 18:41:43 +0200
parents 5afca5bc1d7a
children c50d955372b9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1017
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 838
diff changeset
1 // This is Free Software under GNU Affero General Public License v >= 3.0
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 838
diff changeset
2 // without warranty, see README.md and license for details.
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 838
diff changeset
3 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 838
diff changeset
4 // SPDX-License-Identifier: AGPL-3.0-or-later
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 838
diff changeset
5 // License-Filename: LICENSES/AGPL-3.0.txt
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 838
diff changeset
6 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 838
diff changeset
7 // Copyright (C) 2018 by via donau
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 838
diff changeset
8 // – Österreichische Wasserstraßen-Gesellschaft mbH
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 838
diff changeset
9 // Software engineering by Intevation GmbH
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 838
diff changeset
10 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 838
diff changeset
11 // Author(s):
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 838
diff changeset
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de>
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 838
diff changeset
13
753
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14 package controllers
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16 import (
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
17 "context"
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 "database/sql"
834
232f3f345cf0 Don't crash in cross profile controller if requesting a not existing survey.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 808
diff changeset
19 "fmt"
753
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20 "log"
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21 "net/http"
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22 "time"
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23
2319
478cc0d26d33 Added current water level to properties of cross-section.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1373
diff changeset
24 "gemma.intevation.de/gemma/pkg/common"
753
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25 "gemma.intevation.de/gemma/pkg/models"
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26 "gemma.intevation.de/gemma/pkg/octree"
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
27 )
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29 func reproject(
1328
d753ce6cf588 To make golint happier made context.Context to be the first argument in all calls.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1182
diff changeset
30 ctx context.Context,
762
01ba06da8f46 Factored repojection of coordinates to own logic as we need it to reproject the
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 761
diff changeset
31 rp *models.Reprojector,
01ba06da8f46 Factored repojection of coordinates to own logic as we need it to reproject the
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 761
diff changeset
32 src models.GeoJSONLineCoordinates,
753
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33 ) (models.GeoJSONLineCoordinates, error) {
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35 dst := make(models.GeoJSONLineCoordinates, len(src))
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36 for i, s := range src {
762
01ba06da8f46 Factored repojection of coordinates to own logic as we need it to reproject the
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 761
diff changeset
37 var err error
01ba06da8f46 Factored repojection of coordinates to own logic as we need it to reproject the
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 761
diff changeset
38 if dst[i].Lat, dst[i].Lon, err = rp.Reproject(
1328
d753ce6cf588 To make golint happier made context.Context to be the first argument in all calls.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1182
diff changeset
39 ctx,
d753ce6cf588 To make golint happier made context.Context to be the first argument in all calls.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1182
diff changeset
40 s.Lat, s.Lon,
762
01ba06da8f46 Factored repojection of coordinates to own logic as we need it to reproject the
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 761
diff changeset
41 ); err != nil {
753
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42 return nil, err
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
43 }
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44 }
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45 return dst, nil
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46 }
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47
1182
936dd3714325 cross sections: As the triangles in the octree are already clipped against the area
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
48 const projectBackSQL = `
936dd3714325 cross sections: As the triangles in the octree are already clipped against the area
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
49 SELECT ST_AsBinary(
936dd3714325 cross sections: As the triangles in the octree are already clipped against the area
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
50 ST_Transform(ST_GeomFromWKB($2, $1::integer), 4326))`
766
afc635ab9f5b Project the result data of the cross sections which are calculated in UTM back to WGS84.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 763
diff changeset
51
1182
936dd3714325 cross sections: As the triangles in the octree are already clipped against the area
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
52 func projectBack(
1328
d753ce6cf588 To make golint happier made context.Context to be the first argument in all calls.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1182
diff changeset
53 ctx context.Context,
808
e10a8a682297 Cross sections: Clip result against area of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 801
diff changeset
54 line octree.MultiLineStringZ,
e10a8a682297 Cross sections: Clip result against area of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 801
diff changeset
55 epsg uint32,
e10a8a682297 Cross sections: Clip result against area of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 801
diff changeset
56 conn *sql.Conn,
e10a8a682297 Cross sections: Clip result against area of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 801
diff changeset
57 ) (models.GeoJSONMultiLineCoordinatesZ, error) {
e10a8a682297 Cross sections: Clip result against area of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 801
diff changeset
58
e10a8a682297 Cross sections: Clip result against area of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 801
diff changeset
59 var mls models.GeoJSONMultiLineCoordinatesZ
e10a8a682297 Cross sections: Clip result against area of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 801
diff changeset
60 err := conn.QueryRowContext(
1182
936dd3714325 cross sections: As the triangles in the octree are already clipped against the area
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
61 ctx, projectBackSQL,
808
e10a8a682297 Cross sections: Clip result against area of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 801
diff changeset
62 epsg, line.AsWKB(),
e10a8a682297 Cross sections: Clip result against area of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 801
diff changeset
63 ).Scan(&mls)
e10a8a682297 Cross sections: Clip result against area of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 801
diff changeset
64
e10a8a682297 Cross sections: Clip result against area of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 801
diff changeset
65 return mls, err
e10a8a682297 Cross sections: Clip result against area of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 801
diff changeset
66 }
e10a8a682297 Cross sections: Clip result against area of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 801
diff changeset
67
801
b6a1779ffb42 Removed old cross section controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 796
diff changeset
68 func crossSection(
753
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
69 input interface{},
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
70 req *http.Request,
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71 conn *sql.Conn,
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72 ) (jr JSONResult, err error) {
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
73
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
74 csi := input.(*models.CrossSectionInput)
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
75
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
76 start := time.Now()
1328
d753ce6cf588 To make golint happier made context.Context to be the first argument in all calls.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1182
diff changeset
77 ctx := req.Context()
753
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
78
1333
8c6b5d47a7ff Renamed octree.OctreeCache to octree.Cache to reduce stuttering.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1328
diff changeset
79 tree, err := octree.FromCache(
1328
d753ce6cf588 To make golint happier made context.Context to be the first argument in all calls.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1182
diff changeset
80 ctx, conn,
d753ce6cf588 To make golint happier made context.Context to be the first argument in all calls.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1182
diff changeset
81 csi.Properties.Bottleneck, csi.Properties.Date.Time)
753
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
82
2547
5afca5bc1d7a Cross profile endpoint: Normalized logging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2319
diff changeset
83 log.Printf("info: loading octree took %s\n", time.Since(start))
838
03e966b71a88 cross profile controller: Handle real errors before checking if there is no matching survey.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 834
diff changeset
84 if err != nil {
03e966b71a88 cross profile controller: Handle real errors before checking if there is no matching survey.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 834
diff changeset
85 return
03e966b71a88 cross profile controller: Handle real errors before checking if there is no matching survey.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 834
diff changeset
86 }
03e966b71a88 cross profile controller: Handle real errors before checking if there is no matching survey.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 834
diff changeset
87
834
232f3f345cf0 Don't crash in cross profile controller if requesting a not existing survey.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 808
diff changeset
88 if tree == nil {
232f3f345cf0 Don't crash in cross profile controller if requesting a not existing survey.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 808
diff changeset
89 err = JSONError{
232f3f345cf0 Don't crash in cross profile controller if requesting a not existing survey.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 808
diff changeset
90 Code: http.StatusNotFound,
232f3f345cf0 Don't crash in cross profile controller if requesting a not existing survey.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 808
diff changeset
91 Message: fmt.Sprintf("Cannot find survey for %s/%s.",
232f3f345cf0 Don't crash in cross profile controller if requesting a not existing survey.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 808
diff changeset
92 csi.Properties.Bottleneck,
232f3f345cf0 Don't crash in cross profile controller if requesting a not existing survey.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 808
diff changeset
93 csi.Properties.Date.Time),
232f3f345cf0 Don't crash in cross profile controller if requesting a not existing survey.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 808
diff changeset
94 }
232f3f345cf0 Don't crash in cross profile controller if requesting a not existing survey.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 808
diff changeset
95 return
232f3f345cf0 Don't crash in cross profile controller if requesting a not existing survey.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 808
diff changeset
96 }
232f3f345cf0 Don't crash in cross profile controller if requesting a not existing survey.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 808
diff changeset
97
753
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
98 // The coordinate system of the octree is an UTM projection.
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
99 // The input coordinates are in WGS84.
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
100 // So we need to reproject them.
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
101
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
102 start = time.Now()
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
103
762
01ba06da8f46 Factored repojection of coordinates to own logic as we need it to reproject the
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 761
diff changeset
104 var rp *models.Reprojector
01ba06da8f46 Factored repojection of coordinates to own logic as we need it to reproject the
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 761
diff changeset
105 if rp, err = models.NewReprojector(
1328
d753ce6cf588 To make golint happier made context.Context to be the first argument in all calls.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1182
diff changeset
106 ctx, conn,
1373
84e78d2e2d95 Backend: Centralized the definition of WGS84 constant in the models package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1333
diff changeset
107 models.WGS84, tree.EPSG,
762
01ba06da8f46 Factored repojection of coordinates to own logic as we need it to reproject the
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 761
diff changeset
108 ); err != nil {
01ba06da8f46 Factored repojection of coordinates to own logic as we need it to reproject the
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 761
diff changeset
109 return
01ba06da8f46 Factored repojection of coordinates to own logic as we need it to reproject the
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 761
diff changeset
110 }
01ba06da8f46 Factored repojection of coordinates to own logic as we need it to reproject the
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 761
diff changeset
111 defer rp.Close()
01ba06da8f46 Factored repojection of coordinates to own logic as we need it to reproject the
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 761
diff changeset
112
1328
d753ce6cf588 To make golint happier made context.Context to be the first argument in all calls.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1182
diff changeset
113 coords, err := reproject(ctx, rp, csi.Geometry.Coordinates)
753
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
114
2547
5afca5bc1d7a Cross profile endpoint: Normalized logging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2319
diff changeset
115 log.Printf("info: transforming input coords took %s\n", time.Since(start))
753
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
116 if err != nil {
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
117 return
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
118 }
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
119
763
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
120 start = time.Now()
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
121
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
122 var segments octree.MultiLineStringZ
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
123
753
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
124 for i := 0; i < len(coords)-1; i++ {
756
5e14000829d1 Complete vertical octree traversal. Seems not very selective.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 755
diff changeset
125 c1 := &coords[i]
5e14000829d1 Complete vertical octree traversal. Seems not very selective.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 755
diff changeset
126 c2 := &coords[i+1]
763
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
127
787
3d927e06b92c Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 766
diff changeset
128 verticalLine := octree.NewVerticalLine(c1.Lat, c1.Lon, c2.Lat, c2.Lon)
3d927e06b92c Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 766
diff changeset
129
763
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
130 var line octree.MultiLineStringZ
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
131 tree.Vertical(c1.Lat, c1.Lon, c2.Lat, c2.Lon, func(t *octree.Triangle) {
787
3d927e06b92c Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 766
diff changeset
132 if ls := verticalLine.Intersection(t); len(ls) > 0 {
796
0cc97135717c More fixes to vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 787
diff changeset
133 line = append(line, ls)
763
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
134 }
756
5e14000829d1 Complete vertical octree traversal. Seems not very selective.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 755
diff changeset
135 })
763
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
136
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
137 if len(line) > 0 {
2547
5afca5bc1d7a Cross profile endpoint: Normalized logging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2319
diff changeset
138 log.Printf("info: line length: %d\n", len(line))
763
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
139 // They are all on the segment (c1.Lat, c1.Lon) - (c2.Lat, c2.Lon).
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
140 // Sort them by project them on this line.
796
0cc97135717c More fixes to vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 787
diff changeset
141 joined := line.JoinOnLine(c1.Lat, c1.Lon, c2.Lat, c2.Lon)
2547
5afca5bc1d7a Cross profile endpoint: Normalized logging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2319
diff changeset
142 log.Printf("info: joined length: %d\n", len(joined))
796
0cc97135717c More fixes to vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 787
diff changeset
143 segments = append(segments, joined...)
763
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
144 }
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
145
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
146 }
2547
5afca5bc1d7a Cross profile endpoint: Normalized logging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2319
diff changeset
147 log.Printf("info: octree traversal took %s\n", time.Since(start))
766
afc635ab9f5b Project the result data of the cross sections which are calculated in UTM back to WGS84.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 763
diff changeset
148
763
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
149 start = time.Now()
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
150
808
e10a8a682297 Cross sections: Clip result against area of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 801
diff changeset
151 var joined models.GeoJSONMultiLineCoordinatesZ
1182
936dd3714325 cross sections: As the triangles in the octree are already clipped against the area
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
152 joined, err = projectBack(
1328
d753ce6cf588 To make golint happier made context.Context to be the first argument in all calls.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1182
diff changeset
153 ctx,
808
e10a8a682297 Cross sections: Clip result against area of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 801
diff changeset
154 segments, tree.EPSG,
1328
d753ce6cf588 To make golint happier made context.Context to be the first argument in all calls.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1182
diff changeset
155 conn,
808
e10a8a682297 Cross sections: Clip result against area of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 801
diff changeset
156 )
766
afc635ab9f5b Project the result data of the cross sections which are calculated in UTM back to WGS84.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 763
diff changeset
157
2547
5afca5bc1d7a Cross profile endpoint: Normalized logging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2319
diff changeset
158 log.Printf("info: projecting back took %s\n", time.Since(start))
763
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
159 if err != nil {
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
160 return
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
161 }
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
162
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
163 jr = JSONResult{
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
164 Result: &models.CrossSectionOutput{
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
165 Type: "Feature",
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
166 Geometry: models.CrossSectionOutputGeometry{
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
167 Type: "MultiLineString",
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
168 Coordinates: joined,
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
169 },
2319
478cc0d26d33 Added current water level to properties of cross-section.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1373
diff changeset
170 Properties: map[string]interface{}{
478cc0d26d33 Added current water level to properties of cross-section.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1373
diff changeset
171 "waterlevel": map[string]interface{}{
478cc0d26d33 Added current water level to properties of cross-section.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1373
diff changeset
172 // TODO: Fetch values from database.
478cc0d26d33 Added current water level to properties of cross-section.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1373
diff changeset
173 "value": float64(50),
478cc0d26d33 Added current water level to properties of cross-section.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1373
diff changeset
174 "when": start.Format(common.TimeFormat),
478cc0d26d33 Added current water level to properties of cross-section.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1373
diff changeset
175 },
478cc0d26d33 Added current water level to properties of cross-section.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1373
diff changeset
176 },
763
d05bc3e34338 More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 762
diff changeset
177 },
753
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
178 }
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
179
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
180 return
e6f8d58434f4 Added stub for octree based cross sections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
181 }