annotate pkg/imports/sr.go @ 3977:3eab3fc113b7

Removed more dead code.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 17 Jul 2019 11:38:24 +0200
parents cb4fda122321
children 98e2041c7ebf
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: 991
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: 991
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: 991
diff changeset
3 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 991
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: 991
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: 991
diff changeset
6 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 991
diff changeset
7 // Copyright (C) 2018 by via donau
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 991
diff changeset
8 // – Österreichische Wasserstraßen-Gesellschaft mbH
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 991
diff changeset
9 // Software engineering by Intevation GmbH
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 991
diff changeset
10 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 991
diff changeset
11 // Author(s):
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 991
diff changeset
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de>
1337
53057ab27ff2 add headers for licensing to some middleware files
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1292
diff changeset
13 // * Tom Gottfried <tom@intevation.de>
1017
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 991
diff changeset
14
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15 package imports
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
17 import (
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 "archive/zip"
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 "bufio"
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20 "context"
973
b6fec8f85599 Generate TINs and octrees in sounding result importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 972
diff changeset
21 "crypto/sha1"
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22 "database/sql"
973
b6fec8f85599 Generate TINs and octrees in sounding result importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 972
diff changeset
23 "encoding/hex"
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24 "errors"
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25 "fmt"
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26 "io"
1184
064d44ccc6f2 Adjust contour lines heights to multiples of step width
Tom Gottfried <tom@intevation.de>
parents: 1168
diff changeset
27 "math"
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28 "os"
960
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
29 "path"
978
544a5cfe07cd Started with endpoint for uploading sounding result and trigger respective import job.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 977
diff changeset
30 "path/filepath"
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
31 "strconv"
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32 "strings"
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33 "time"
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34
960
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
35 shp "github.com/jonas-p/go-shp"
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
36
1224
bc4b642c8d04 Started with an upload sounding result to temp upload area.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1193
diff changeset
37 "gemma.intevation.de/gemma/pkg/common"
3504
6e748f31777a AGM/SR import. Limit logging of warnings to 100.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3487
diff changeset
38 "gemma.intevation.de/gemma/pkg/misc"
1224
bc4b642c8d04 Started with an upload sounding result to temp upload area.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1193
diff changeset
39 "gemma.intevation.de/gemma/pkg/models"
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40 "gemma.intevation.de/gemma/pkg/octree"
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41 )
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42
1498
5df748916fcf Finished API docs for sounding result imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1496
diff changeset
43 // SoundingResult is a Job to import sounding reults
5df748916fcf Finished API docs for sounding result imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1496
diff changeset
44 // from a ZIP file into the database.
1239
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
45 type SoundingResult struct {
1498
5df748916fcf Finished API docs for sounding result imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1496
diff changeset
46 // Dir is the folder in the file system where the
5df748916fcf Finished API docs for sounding result imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1496
diff changeset
47 // 'sr.zip' is expect to be.
1239
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
48 Dir string `json:"dir"`
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
49
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
50 // Override data
1498
5df748916fcf Finished API docs for sounding result imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1496
diff changeset
51 // Date if given overrides the date value from the meta.json.
1900
6a67cd819e93 To prepare stretch import made some model data types re-usable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1786
diff changeset
52 Date *models.Date `json:"date,omitempty"`
1498
5df748916fcf Finished API docs for sounding result imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1496
diff changeset
53 // Date if given overrides the name of the bottleneck from the meta.json.
5df748916fcf Finished API docs for sounding result imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1496
diff changeset
54 Bottleneck *string `json:"bottleneck,omitempty"`
5df748916fcf Finished API docs for sounding result imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1496
diff changeset
55 // EPSG if given overrides the EPSG code from the meta.json.
5df748916fcf Finished API docs for sounding result imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1496
diff changeset
56 // Defaults to WGS84.
5df748916fcf Finished API docs for sounding result imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1496
diff changeset
57 EPSG *uint `json:"epsg,omitempty"`
5df748916fcf Finished API docs for sounding result imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1496
diff changeset
58 // DepthReference if given overides the DepthReference value
5df748916fcf Finished API docs for sounding result imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1496
diff changeset
59 // from the meta.json.
5df748916fcf Finished API docs for sounding result imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1496
diff changeset
60 DepthReference *string `json:"depth-reference,omitempty"`
3585
479da494bc09 SR import: access beam-type parameter supplied by client. TODO: Implement single beam code path.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3518
diff changeset
61 // SingleBeam indicates that the sounding is a single beam scan.
479da494bc09 SR import: access beam-type parameter supplied by client. TODO: Implement single beam code path.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3518
diff changeset
62 SingleBeam *bool `json:"single-beam,omitempty"`
3945
3bdbaf1b282a SR import: Negate the Z values in the XYZ files if the flag `negate-z` is set.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3904
diff changeset
63 // NegateZ indicated that the Z values of thy XYZ input should be
3bdbaf1b282a SR import: Negate the Z values in the XYZ files if the flag `negate-z` is set.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3904
diff changeset
64 // multiplied by -1.
3946
d668742c8978 SR import: Made `negate-z` flag more symmetrical to `single-beam` flag.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3945
diff changeset
65 NegateZ *bool `json:"negate-z,omitempty"`
1239
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
66 }
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
67
964
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
68 const (
1130
42617bba8709 Go from 50cm to 10cm stepwidth in calculating the contorlines.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
69 contourStepWidth = 0.1
977
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
70 contourTolerance = 0.1
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
71 )
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
72
3646
810b28f59b8b Generate random points for second mesh.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3609
diff changeset
73 const (
3650
01ce3ba9b0d0 Fixed generating of random points.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3646
diff changeset
74 pointsPerSquareMeter = 2
3646
810b28f59b8b Generate random points for second mesh.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3609
diff changeset
75 )
810b28f59b8b Generate random points for second mesh.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3609
diff changeset
76
1498
5df748916fcf Finished API docs for sounding result imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1496
diff changeset
77 // SRJobKind is the unique name of a SoundingResult import job.
991
a301d240905f Decoupled import job creation and job execution with a factory function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 988
diff changeset
78 const SRJobKind JobKind = "sr"
a301d240905f Decoupled import job creation and job execution with a factory function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 988
diff changeset
79
1136
a5069da2f0b7 Independent imports in terms of affected tables/dependencies are now run concurrently.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1131
diff changeset
80 type srJobCreator struct{}
a5069da2f0b7 Independent imports in terms of affected tables/dependencies are now run concurrently.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1131
diff changeset
81
1193
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
82 func init() {
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
83 RegisterJobCreator(SRJobKind, srJobCreator{})
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
84 }
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
85
1754
807569b08513 Import queue: Auto acceptance is now a property of the import kind itself and is not configurable any more.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1664
diff changeset
86 func (srJobCreator) Description() string { return "sounding results" }
807569b08513 Import queue: Auto acceptance is now a property of the import kind itself and is not configurable any more.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1664
diff changeset
87
807569b08513 Import queue: Auto acceptance is now a property of the import kind itself and is not configurable any more.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1664
diff changeset
88 func (srJobCreator) AutoAccept() bool { return false }
1646
a0982c38eac0 Import queue: Implemented email notifications.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1572
diff changeset
89
2187
7c83b5277c1c Import queue: Removed boilerplate code to deserialize jobs from JSON by making it part of the import queue.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2168
diff changeset
90 func (srJobCreator) Create() Job { return new(SoundingResult) }
1136
a5069da2f0b7 Independent imports in terms of affected tables/dependencies are now run concurrently.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1131
diff changeset
91
3219
4acbee65275d Import queue: Split locked dependencies in exclusively and multiple uses.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2963
diff changeset
92 func (srJobCreator) Depends() [2][]string {
4acbee65275d Import queue: Split locked dependencies in exclusively and multiple uses.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2963
diff changeset
93 return [2][]string{
4acbee65275d Import queue: Split locked dependencies in exclusively and multiple uses.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2963
diff changeset
94 {"sounding_results", "sounding_results_contour_lines"},
4acbee65275d Import queue: Split locked dependencies in exclusively and multiple uses.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2963
diff changeset
95 {"bottlenecks"},
1136
a5069da2f0b7 Independent imports in terms of affected tables/dependencies are now run concurrently.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1131
diff changeset
96 }
a5069da2f0b7 Independent imports in terms of affected tables/dependencies are now run concurrently.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1131
diff changeset
97 }
a5069da2f0b7 Independent imports in terms of affected tables/dependencies are now run concurrently.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1131
diff changeset
98
1193
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
99 func (srJobCreator) StageDone(
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: 1317
diff changeset
100 ctx context.Context,
1193
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
101 tx *sql.Tx,
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
102 id int64,
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
103 ) error {
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
104 _, err := tx.ExecContext(ctx, srStageDoneSQL, id)
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
105 return err
991
a301d240905f Decoupled import job creation and job execution with a factory function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 988
diff changeset
106 }
a301d240905f Decoupled import job creation and job execution with a factory function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 988
diff changeset
107
977
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
108 const (
1193
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
109 srStageDoneSQL = `
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
110 UPDATE waterway.sounding_results SET staging_done = true
1502
0abcc82ef976 Sounding results: Be a bit more precise when setting stageing_done.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1501
diff changeset
111 WHERE id = (
1995
59055c8301df Move import queue to its own database namespace
Tom Gottfried <tom@intevation.de>
parents: 1900
diff changeset
112 SELECT key from import.track_imports
1502
0abcc82ef976 Sounding results: Be a bit more precise when setting stageing_done.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1501
diff changeset
113 WHERE import_id = $1 AND
0abcc82ef976 Sounding results: Be a bit more precise when setting stageing_done.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1501
diff changeset
114 relation = 'waterway.sounding_results'::regclass)`
1193
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
115
2529
45d51a49f191 SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2516
diff changeset
116 insertHullSQL = `
961
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
117 INSERT INTO waterway.sounding_results (
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
118 bottleneck_id,
3656
2a079d0a71c1 Ensure sounding results are associated to matching bottleneck version
Tom Gottfried <tom@intevation.de>
parents: 3645
diff changeset
119 bottleneck_validity,
961
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
120 date_info,
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
121 depth_reference,
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
122 area
2529
45d51a49f191 SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2516
diff changeset
123 ) SELECT
3656
2a079d0a71c1 Ensure sounding results are associated to matching bottleneck version
Tom Gottfried <tom@intevation.de>
parents: 3645
diff changeset
124 bottleneck_id,
2a079d0a71c1 Ensure sounding results are associated to matching bottleneck version
Tom Gottfried <tom@intevation.de>
parents: 3645
diff changeset
125 validity,
961
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
126 $2::date,
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
127 $3,
2529
45d51a49f191 SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2516
diff changeset
128 (SELECT
45d51a49f191 SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2516
diff changeset
129 CASE WHEN $5::bytea IS NULL THEN
45d51a49f191 SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2516
diff changeset
130 ST_Transform(ST_ConcaveHull(ST_Force2D(ST_GeomFromWKB($4, $6::integer)), 0.7), 4326)::geography
45d51a49f191 SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2516
diff changeset
131 ELSE
3652
f415c5ed60f6 Another attempt to fix the ST_IsValid check contstraint problem ... and also failed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3651
diff changeset
132 ST_MakeValid(ST_Transform(ST_GeomFromWKB($5, $6::integer), 4326))::geography
2529
45d51a49f191 SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2516
diff changeset
133 END)
3656
2a079d0a71c1 Ensure sounding results are associated to matching bottleneck version
Tom Gottfried <tom@intevation.de>
parents: 3645
diff changeset
134 FROM waterway.bottlenecks
2a079d0a71c1 Ensure sounding results are associated to matching bottleneck version
Tom Gottfried <tom@intevation.de>
parents: 3645
diff changeset
135 WHERE objnam = $1 AND validity @> CAST($2 AS timestamptz)
971
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 964
diff changeset
136 RETURNING
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 964
diff changeset
137 id,
2529
45d51a49f191 SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2516
diff changeset
138 ST_X(ST_Centroid(area::geometry)),
45d51a49f191 SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2516
diff changeset
139 ST_Y(ST_Centroid(area::geometry)),
2833
1b6840093eac Prevent calculation of wrong UTM zones
Tom Gottfried <tom@intevation.de>
parents: 2612
diff changeset
140 best_utm(area),
1b6840093eac Prevent calculation of wrong UTM zones
Tom Gottfried <tom@intevation.de>
parents: 2612
diff changeset
141 ST_AsBinary(ST_Transform(area::geometry, best_utm(area)))
2529
45d51a49f191 SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2516
diff changeset
142 `
973
b6fec8f85599 Generate TINs and octrees in sounding result importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 972
diff changeset
143
3658
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
144 reprojectPointsBufferedSQL = `
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
145 SELECT
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
146 ST_AsBinary(ST_Transform(ST_GeomFromWKB($1, $2::integer), $3::integer)),
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
147 ST_AsBinary(ST_Buffer(ST_Transform(ST_GeomFromWKB($1, $2::integer), $3::integer), 0.1)),
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
148 ST_Area(ST_Transform(ST_GeomFromWKB($1, $2::integer), $3::integer))`
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
149
973
b6fec8f85599 Generate TINs and octrees in sounding result importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 972
diff changeset
150 insertOctreeSQL = `
1131
2e6b47cdb2ca Store octrees along with sounding results
Tom Gottfried <tom@intevation.de>
parents: 1130
diff changeset
151 UPDATE waterway.sounding_results SET
2e6b47cdb2ca Store octrees along with sounding results
Tom Gottfried <tom@intevation.de>
parents: 1130
diff changeset
152 octree_checksum = $2, octree_index = $3
2e6b47cdb2ca Store octrees along with sounding results
Tom Gottfried <tom@intevation.de>
parents: 1130
diff changeset
153 WHERE id = $1`
977
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
154
3651
c368a9a20478 Tried to fix invalid new boundary polygon with ST_MakeValid() ... and failed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3650
diff changeset
155 repairBoundarySQL = `
c368a9a20478 Tried to fix invalid new boundary polygon with ST_MakeValid() ... and failed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3650
diff changeset
156 SELECT
c368a9a20478 Tried to fix invalid new boundary polygon with ST_MakeValid() ... and failed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3650
diff changeset
157 ST_AsBinary(ST_Buffer(ST_MakeValid(ST_GeomFromWKB($1, $2::integer)), 0.0)),
c368a9a20478 Tried to fix invalid new boundary polygon with ST_MakeValid() ... and failed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3650
diff changeset
158 ST_AsBinary(ST_Buffer(ST_MakeValid(ST_GeomFromWKB($1, $2::integer)), 0.1))`
c368a9a20478 Tried to fix invalid new boundary polygon with ST_MakeValid() ... and failed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3650
diff changeset
159
977
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
160 insertContourSQL = `
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
161 INSERT INTO waterway.sounding_results_contour_lines (
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
162 sounding_result_id,
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
163 height,
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
164 lines
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
165 )
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
166 SELECT
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
167 $1,
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
168 $2,
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
169 ST_Transform(
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
170 ST_Multi(
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
171 ST_CollectionExtract(
1137
2fb6c0a6ec8a Avoid intersection of each isoline with area on insert
Tom Gottfried <tom@intevation.de>
parents: 1136
diff changeset
172 ST_SimplifyPreserveTopology(
1410
eb82076fdffe Sounding result import: Ensure that the generated iso-lines are valid.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1392
diff changeset
173 ST_Multi(ST_Collectionextract(
eb82076fdffe Sounding result import: Ensure that the generated iso-lines are valid.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1392
diff changeset
174 ST_MakeValid(ST_GeomFromWKB($4, $3::integer)), 2)),
1137
2fb6c0a6ec8a Avoid intersection of each isoline with area on insert
Tom Gottfried <tom@intevation.de>
parents: 1136
diff changeset
175 $5
977
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
176 ),
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
177 2
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
178 )
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
179 ),
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
180 4326
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
181 )
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
182 FROM waterway.sounding_results sr
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
183 WHERE id = $1
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
184 `
3479
83b58f6356e7 Translate sounding results Z values import to LDC if ZPG was found as depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3219
diff changeset
185
83b58f6356e7 Translate sounding results Z values import to LDC if ZPG was found as depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3219
diff changeset
186 selectGaugeLDCSQL = `
83b58f6356e7 Translate sounding results Z values import to LDC if ZPG was found as depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3219
diff changeset
187 SELECT
3518
4cd4375efd5d ZP for sounding result imports: Use precise name of the depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3504
diff changeset
188 grwl.value,
4cd4375efd5d ZP for sounding result imports: Use precise name of the depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3504
diff changeset
189 grwl.depth_reference
3479
83b58f6356e7 Translate sounding results Z values import to LDC if ZPG was found as depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3219
diff changeset
190 FROM waterway.gauges_reference_water_levels grwl
83b58f6356e7 Translate sounding results Z values import to LDC if ZPG was found as depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3219
diff changeset
191 JOIN waterway.bottlenecks bns
83b58f6356e7 Translate sounding results Z values import to LDC if ZPG was found as depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3219
diff changeset
192 ON grwl.location = bns.gauge_location
83b58f6356e7 Translate sounding results Z values import to LDC if ZPG was found as depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3219
diff changeset
193 AND grwl.validity = bns.gauge_validity
3645
02951a62e8c6 'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents: 3609
diff changeset
194 WHERE bns.objnam = $1
02951a62e8c6 'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents: 3609
diff changeset
195 AND bns.validity @> CAST($2 AS timestamptz)
02951a62e8c6 'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents: 3609
diff changeset
196 AND grwl.depth_reference like 'LDC%'
3479
83b58f6356e7 Translate sounding results Z values import to LDC if ZPG was found as depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3219
diff changeset
197 `
3591
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
198
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
199 reprojectPointsSingleBeamSQL = `
3600
6590733e2ebc SR import: If in single beam mode and no boundary is given eliminate triangles which have at least an edge with is longer than 98% of the overall edge lengths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3596
diff changeset
200 SELECT
6590733e2ebc SR import: If in single beam mode and no boundary is given eliminate triangles which have at least an edge with is longer than 98% of the overall edge lengths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3596
diff changeset
201 ST_AsBinary(
6590733e2ebc SR import: If in single beam mode and no boundary is given eliminate triangles which have at least an edge with is longer than 98% of the overall edge lengths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3596
diff changeset
202 ST_Transform(
6590733e2ebc SR import: If in single beam mode and no boundary is given eliminate triangles which have at least an edge with is longer than 98% of the overall edge lengths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3596
diff changeset
203 ST_GeomFromWKB($1, $2::integer),
6590733e2ebc SR import: If in single beam mode and no boundary is given eliminate triangles which have at least an edge with is longer than 98% of the overall edge lengths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3596
diff changeset
204 best_utm(CAST(ST_Transform(ST_GeomFromWKB($1, $2::integer), 4326) AS geography)))),
6590733e2ebc SR import: If in single beam mode and no boundary is given eliminate triangles which have at least an edge with is longer than 98% of the overall edge lengths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3596
diff changeset
205 best_utm(CAST(ST_Transform(ST_GeomFromWKB($1, $2::integer), 4326) AS geography))
3591
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
206 `
961
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
207 )
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
208
3946
d668742c8978 SR import: Made `negate-z` flag more symmetrical to `single-beam` flag.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3945
diff changeset
209 func (sr *SoundingResult) singleBeam() bool {
3585
479da494bc09 SR import: access beam-type parameter supplied by client. TODO: Implement single beam code path.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3518
diff changeset
210 return sr.SingleBeam != nil && *sr.SingleBeam
479da494bc09 SR import: access beam-type parameter supplied by client. TODO: Implement single beam code path.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3518
diff changeset
211 }
479da494bc09 SR import: access beam-type parameter supplied by client. TODO: Implement single beam code path.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3518
diff changeset
212
3946
d668742c8978 SR import: Made `negate-z` flag more symmetrical to `single-beam` flag.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3945
diff changeset
213 func (sr *SoundingResult) negateZ() bool {
d668742c8978 SR import: Made `negate-z` flag more symmetrical to `single-beam` flag.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3945
diff changeset
214 return sr.NegateZ != nil && *sr.NegateZ
d668742c8978 SR import: Made `negate-z` flag more symmetrical to `single-beam` flag.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3945
diff changeset
215 }
d668742c8978 SR import: Made `negate-z` flag more symmetrical to `single-beam` flag.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3945
diff changeset
216
1498
5df748916fcf Finished API docs for sounding result imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1496
diff changeset
217 // Do executes the actual sounding result import.
1239
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
218 func (sr *SoundingResult) Do(
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: 1317
diff changeset
219 ctx context.Context,
1168
930fdd8b474f Track successfull imports in a separate table to be able to remove them later.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1138
diff changeset
220 importID int64,
930fdd8b474f Track successfull imports in a separate table to be able to remove them later.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1138
diff changeset
221 conn *sql.Conn,
930fdd8b474f Track successfull imports in a separate table to be able to remove them later.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1138
diff changeset
222 feedback Feedback,
1392
0e1d89241cda Imports: An Import (e.g. a sounding result import) can now write a 'summary' of a successful import. This is done if the import switches to to state 'pending'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1384
diff changeset
223 ) (interface{}, error) {
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
224
3587
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
225 start := time.Now()
2529
45d51a49f191 SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2516
diff changeset
226
3748
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
227 zpath := filepath.Join(sr.Dir, "sr.zip")
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
228
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
229 z, err := zip.OpenReader(zpath)
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
230 if err != nil {
3762
98d5dd2f0ca1 Don't show unnecessary warnings when uploading TXT file for SR.
Sascha Wilde <wilde@intevation.de>
parents: 3748
diff changeset
231 feedback.Info("%v", err)
98d5dd2f0ca1 Don't show unnecessary warnings when uploading TXT file for SR.
Sascha Wilde <wilde@intevation.de>
parents: 3748
diff changeset
232 feedback.Info("Falling back to TXT file mode.")
3748
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
233 z = nil
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
234 }
3748
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
235 if z != nil {
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
236 defer z.Close()
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
237 }
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
238
1138
443fc80a315f Don't issue new lines at end of log messages when importing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1137
diff changeset
239 feedback.Info("Looking for 'meta.json'")
3600
6590733e2ebc SR import: If in single beam mode and no boundary is given eliminate triangles which have at least an edge with is longer than 98% of the overall edge lengths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3596
diff changeset
240
1225
4d7c44f7044e Factored out som zip lookup code to be reusable in sounding result upload controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1224
diff changeset
241 mf := common.FindInZIP(z, "meta.json")
1292
5aeda02c51b9 Sounding result import: Don't fail if an import ZIP does not contain an meta.json but has a full set of overrides.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1239
diff changeset
242 if mf == nil && !sr.completeOverride() {
1392
0e1d89241cda Imports: An Import (e.g. a sounding result import) can now write a 'summary' of a successful import. This is done if the import switches to to state 'pending'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1384
diff changeset
243 return nil, errors.New("Cannot find 'meta.json'")
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
244 }
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
245
1239
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
246 m, err := sr.loadMeta(mf)
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
247 if err != nil {
1392
0e1d89241cda Imports: An Import (e.g. a sounding result import) can now write a 'summary' of a successful import. This is done if the import switches to to state 'pending'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1384
diff changeset
248 return nil, err
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
249 }
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
250
2873
b1707f60f241 SR import: Log name of bottleneck and survey date into import log.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2833
diff changeset
251 feedback.Info("Bottleneck: %s", m.Bottleneck)
b1707f60f241 SR import: Log name of bottleneck and survey date into import log.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2833
diff changeset
252 feedback.Info("Survey date: %s", m.Date.Format(common.DateFormat))
b1707f60f241 SR import: Log name of bottleneck and survey date into import log.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2833
diff changeset
253
3487
fdb0439850d5 Generalized transformation of vertices during sounding result import a bit.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3479
diff changeset
254 var xform vertexTransform
fdb0439850d5 Generalized transformation of vertices during sounding result import a bit.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3479
diff changeset
255
3946
d668742c8978 SR import: Made `negate-z` flag more symmetrical to `single-beam` flag.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3945
diff changeset
256 if sr.negateZ() {
3945
3bdbaf1b282a SR import: Negate the Z values in the XYZ files if the flag `negate-z` is set.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3904
diff changeset
257 xform = negateZTransform
3bdbaf1b282a SR import: Negate the Z values in the XYZ files if the flag `negate-z` is set.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3904
diff changeset
258 } else {
3bdbaf1b282a SR import: Negate the Z values in the XYZ files if the flag `negate-z` is set.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3904
diff changeset
259 xform = identityTransform
3bdbaf1b282a SR import: Negate the Z values in the XYZ files if the flag `negate-z` is set.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3904
diff changeset
260 }
3bdbaf1b282a SR import: Negate the Z values in the XYZ files if the flag `negate-z` is set.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3904
diff changeset
261
3479
83b58f6356e7 Translate sounding results Z values import to LDC if ZPG was found as depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3219
diff changeset
262 if m.DepthReference == "ZPG" {
83b58f6356e7 Translate sounding results Z values import to LDC if ZPG was found as depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3219
diff changeset
263 feedback.Info("Found ZPG as reference system -> translating Z values to LDC")
3487
fdb0439850d5 Generalized transformation of vertices during sounding result import a bit.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3479
diff changeset
264 var ldc float64
3518
4cd4375efd5d ZP for sounding result imports: Use precise name of the depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3504
diff changeset
265 var depthReference string
3645
02951a62e8c6 'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents: 3609
diff changeset
266 err := conn.QueryRowContext(ctx,
02951a62e8c6 'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents: 3609
diff changeset
267 selectGaugeLDCSQL,
02951a62e8c6 'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents: 3609
diff changeset
268 m.Bottleneck,
02951a62e8c6 'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents: 3609
diff changeset
269 m.Date.Time,
02951a62e8c6 'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents: 3609
diff changeset
270 ).Scan(
3518
4cd4375efd5d ZP for sounding result imports: Use precise name of the depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3504
diff changeset
271 &ldc,
4cd4375efd5d ZP for sounding result imports: Use precise name of the depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3504
diff changeset
272 &depthReference,
4cd4375efd5d ZP for sounding result imports: Use precise name of the depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3504
diff changeset
273 )
3479
83b58f6356e7 Translate sounding results Z values import to LDC if ZPG was found as depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3219
diff changeset
274 switch {
83b58f6356e7 Translate sounding results Z values import to LDC if ZPG was found as depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3219
diff changeset
275 case err == sql.ErrNoRows:
83b58f6356e7 Translate sounding results Z values import to LDC if ZPG was found as depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3219
diff changeset
276 return nil, errors.New("Cannot load LDC value")
83b58f6356e7 Translate sounding results Z values import to LDC if ZPG was found as depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3219
diff changeset
277 case err != nil:
83b58f6356e7 Translate sounding results Z values import to LDC if ZPG was found as depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3219
diff changeset
278 return nil, err
83b58f6356e7 Translate sounding results Z values import to LDC if ZPG was found as depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3219
diff changeset
279 }
3904
4b5c4007fc5d SR import: Fixed LDC treatment if depth reference system is ZPG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3882
diff changeset
280
4b5c4007fc5d SR import: Fixed LDC treatment if depth reference system is ZPG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3882
diff changeset
281 // LDC is cm. The data is in m.
4b5c4007fc5d SR import: Fixed LDC treatment if depth reference system is ZPG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3882
diff changeset
282 ldc /= 100
3945
3bdbaf1b282a SR import: Negate the Z values in the XYZ files if the flag `negate-z` is set.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3904
diff changeset
283 xform = chainTransforms(
3bdbaf1b282a SR import: Negate the Z values in the XYZ files if the flag `negate-z` is set.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3904
diff changeset
284 xform,
3bdbaf1b282a SR import: Negate the Z values in the XYZ files if the flag `negate-z` is set.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3904
diff changeset
285 func(v octree.Vertex) octree.Vertex {
3bdbaf1b282a SR import: Negate the Z values in the XYZ files if the flag `negate-z` is set.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3904
diff changeset
286 return octree.Vertex{X: v.X, Y: v.Y, Z: v.Z + ldc}
3bdbaf1b282a SR import: Negate the Z values in the XYZ files if the flag `negate-z` is set.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3904
diff changeset
287 })
3518
4cd4375efd5d ZP for sounding result imports: Use precise name of the depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3504
diff changeset
288 m.DepthReference = depthReference
3479
83b58f6356e7 Translate sounding results Z values import to LDC if ZPG was found as depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3219
diff changeset
289 }
83b58f6356e7 Translate sounding results Z values import to LDC if ZPG was found as depth reference system.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3219
diff changeset
290
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: 1317
diff changeset
291 if err := m.Validate(ctx, conn); err != nil {
1392
0e1d89241cda Imports: An Import (e.g. a sounding result import) can now write a 'summary' of a successful import. This is done if the import switches to to state 'pending'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1384
diff changeset
292 return nil, common.ToError(err)
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
293 }
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
294
3748
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
295 var xyz octree.MultiPointZ
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
296
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
297 if z != nil { // Scanning ZIP file for *.xyz file.
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
298 var xyzf *zip.File
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
299 for _, ext := range []string{".xyz", ".txt"} {
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
300 feedback.Info("Looking for '*%s'", ext)
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
301 if xyzf = common.FindInZIP(z, ext); xyzf != nil {
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
302 break
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
303 }
1528
5874cedd7f91 Sounding result import: Accept *.txt files for XYZ data, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1502
diff changeset
304 }
3748
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
305 if xyzf == nil {
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
306 return nil, errors.New("Cannot find any *.xyz or *.txt file")
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
307 }
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
308 xyz, err = loadXYZ(xyzf, feedback, xform)
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
309 } else { // TXT file mode
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
310 xyz, err = loadXYZFile(zpath, feedback, xform)
1528
5874cedd7f91 Sounding result import: Accept *.txt files for XYZ data, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1502
diff changeset
311 }
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
312 if err != nil {
1392
0e1d89241cda Imports: An Import (e.g. a sounding result import) can now write a 'summary' of a successful import. This is done if the import switches to to state 'pending'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1384
diff changeset
313 return nil, err
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
314 }
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
315
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
316 if len(xyz) == 0 {
1392
0e1d89241cda Imports: An Import (e.g. a sounding result import) can now write a 'summary' of a successful import. This is done if the import switches to to state 'pending'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1384
diff changeset
317 return nil, errors.New("XYZ does not contain any vertices")
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
318 }
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
319
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
320 // Is there a boundary shapefile in the ZIP archive?
3591
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
321 boundary, err := loadBoundary(z)
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
322 if err != nil {
1392
0e1d89241cda Imports: An Import (e.g. a sounding result import) can now write a 'summary' of a successful import. This is done if the import switches to to state 'pending'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1384
diff changeset
323 return nil, err
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
324 }
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
325
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
326 tx, err := conn.BeginTx(ctx, nil)
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
327 if err != nil {
1392
0e1d89241cda Imports: An Import (e.g. a sounding result import) can now write a 'summary' of a successful import. This is done if the import switches to to state 'pending'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1384
diff changeset
328 return nil, err
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
329 }
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
330 defer tx.Rollback()
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
331
3587
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
332 var summary interface{}
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
333
3946
d668742c8978 SR import: Made `negate-z` flag more symmetrical to `single-beam` flag.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3945
diff changeset
334 if sr.singleBeam() {
3742
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
335 summary, err = sr.processScan(
3587
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
336 ctx,
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
337 tx,
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
338 feedback,
3742
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
339 true,
3587
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
340 importID,
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
341 m,
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
342 xyz,
3591
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
343 boundary,
3587
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
344 )
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
345 } else {
3742
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
346 summary, err = sr.processScan(
3587
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
347 ctx,
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
348 tx,
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
349 feedback,
3742
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
350 false,
3587
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
351 importID,
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
352 m,
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
353 xyz,
3591
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
354 boundary,
3587
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
355 )
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
356 }
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
357 if err != nil {
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
358 return nil, err
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
359 }
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
360
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
361 if err = tx.Commit(); err != nil {
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
362 feedback.Error(
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
363 "Storing sounding result failed after %v.", time.Since(start))
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
364 return nil, err
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
365 }
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
366
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
367 feedback.Info(
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
368 "Storing sounding result was successful after %v.", time.Since(start))
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
369
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
370 return summary, nil
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
371 }
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
372
3742
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
373 func (sr *SoundingResult) processScan(
3587
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
374 ctx context.Context,
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
375 tx *sql.Tx,
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
376 feedback Feedback,
3742
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
377 singleBeam bool,
3587
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
378 importID int64,
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
379 m *models.SoundingResultMeta,
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
380 xyz octree.MultiPointZ,
3591
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
381 boundary polygonSlice,
3587
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
382 ) (interface{}, error) {
3591
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
383
3742
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
384 if singleBeam {
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
385 feedback.Info("Processing as single beam scan.")
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
386 } else {
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
387 feedback.Info("Processing as multi beam scan.")
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
388 }
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
389
3658
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
390 feedback.Info("Reproject XYZ data.")
3591
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
391
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
392 start := time.Now()
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
393
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
394 xyzWKB := xyz.AsWKB()
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
395 var reproj []byte
3742
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
396 var epsg uint32
3591
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
397
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
398 if err := tx.QueryRowContext(
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
399 ctx,
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
400 reprojectPointsSingleBeamSQL,
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
401 xyzWKB,
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
402 m.EPSG,
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
403 ).Scan(&reproj, &epsg); err != nil {
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
404 return nil, err
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
405 }
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
406
3600
6590733e2ebc SR import: If in single beam mode and no boundary is given eliminate triangles which have at least an edge with is longer than 98% of the overall edge lengths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3596
diff changeset
407 if err := xyz.FromWKB(reproj); err != nil {
6590733e2ebc SR import: If in single beam mode and no boundary is given eliminate triangles which have at least an edge with is longer than 98% of the overall edge lengths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3596
diff changeset
408 return nil, err
6590733e2ebc SR import: If in single beam mode and no boundary is given eliminate triangles which have at least an edge with is longer than 98% of the overall edge lengths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3596
diff changeset
409 }
6590733e2ebc SR import: If in single beam mode and no boundary is given eliminate triangles which have at least an edge with is longer than 98% of the overall edge lengths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3596
diff changeset
410
3591
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
411 feedback.Info("Reprojecting points to EPSG %d took %v.",
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
412 epsg, time.Since(start))
3600
6590733e2ebc SR import: If in single beam mode and no boundary is given eliminate triangles which have at least an edge with is longer than 98% of the overall edge lengths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3596
diff changeset
413 feedback.Info("Number of reprojected points: %d", len(xyz))
3658
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
414 feedback.Info("Triangulate XYZ data.")
3600
6590733e2ebc SR import: If in single beam mode and no boundary is given eliminate triangles which have at least an edge with is longer than 98% of the overall edge lengths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3596
diff changeset
415
6590733e2ebc SR import: If in single beam mode and no boundary is given eliminate triangles which have at least an edge with is longer than 98% of the overall edge lengths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3596
diff changeset
416 start = time.Now()
6590733e2ebc SR import: If in single beam mode and no boundary is given eliminate triangles which have at least an edge with is longer than 98% of the overall edge lengths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3596
diff changeset
417 tri, err := octree.Triangulate(xyz)
6590733e2ebc SR import: If in single beam mode and no boundary is given eliminate triangles which have at least an edge with is longer than 98% of the overall edge lengths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3596
diff changeset
418 if err != nil {
6590733e2ebc SR import: If in single beam mode and no boundary is given eliminate triangles which have at least an edge with is longer than 98% of the overall edge lengths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3596
diff changeset
419 return nil, err
6590733e2ebc SR import: If in single beam mode and no boundary is given eliminate triangles which have at least an edge with is longer than 98% of the overall edge lengths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3596
diff changeset
420 }
6590733e2ebc SR import: If in single beam mode and no boundary is given eliminate triangles which have at least an edge with is longer than 98% of the overall edge lengths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3596
diff changeset
421 feedback.Info("Triangulation took %v.", time.Since(start))
6590733e2ebc SR import: If in single beam mode and no boundary is given eliminate triangles which have at least an edge with is longer than 98% of the overall edge lengths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3596
diff changeset
422 feedback.Info("Number triangles: %d.", len(tri.Triangles)/3)
6590733e2ebc SR import: If in single beam mode and no boundary is given eliminate triangles which have at least an edge with is longer than 98% of the overall edge lengths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3596
diff changeset
423
3658
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
424 var (
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
425 clippingPolygon octree.Polygon
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
426 clippingPolygonBuffered octree.Polygon
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
427 removed map[int32]struct{}
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
428 polygonArea float64
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
429 clippingPolygonWKB []byte
3742
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
430 tin *octree.Tin
3658
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
431 )
3646
810b28f59b8b Generate random points for second mesh.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3609
diff changeset
432
3600
6590733e2ebc SR import: If in single beam mode and no boundary is given eliminate triangles which have at least an edge with is longer than 98% of the overall edge lengths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3596
diff changeset
433 if boundary == nil {
3658
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
434 feedback.Info("No boundary given. Calulate from XYZ data.")
3733
ec86a7155377 Estimated too large triangles as triangles which have an edge which is at least 3.5 times as long as the standard dev of the longest egde per inner triangle.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3664
diff changeset
435 tooLongEdge := tri.EstimateTooLong()
3655
a6c671abbc35 Started with cleaning up the single beam import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3654
diff changeset
436 feedback.Info("Eliminate triangles with edges longer than %.2f meters.", tooLongEdge)
3646
810b28f59b8b Generate random points for second mesh.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3609
diff changeset
437
3658
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
438 var polygon octree.LineStringZ
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
439 start = time.Now()
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
440 polygon, removed = tri.ConcaveHull(tooLongEdge)
3646
810b28f59b8b Generate random points for second mesh.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3609
diff changeset
441
3658
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
442 polygonArea = polygon.Area()
3646
810b28f59b8b Generate random points for second mesh.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3609
diff changeset
443 if polygonArea < 0.0 { // counter clockwise
810b28f59b8b Generate random points for second mesh.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3609
diff changeset
444 polygonArea = -polygonArea
810b28f59b8b Generate random points for second mesh.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3609
diff changeset
445 polygon.Reverse()
810b28f59b8b Generate random points for second mesh.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3609
diff changeset
446 }
810b28f59b8b Generate random points for second mesh.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3609
diff changeset
447
3651
c368a9a20478 Tried to fix invalid new boundary polygon with ST_MakeValid() ... and failed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3650
diff changeset
448 clippingPolygon.FromLineStringZ(polygon)
c368a9a20478 Tried to fix invalid new boundary polygon with ST_MakeValid() ... and failed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3650
diff changeset
449
3658
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
450 var buffered []byte
3651
c368a9a20478 Tried to fix invalid new boundary polygon with ST_MakeValid() ... and failed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3650
diff changeset
451 if err := tx.QueryRowContext(
c368a9a20478 Tried to fix invalid new boundary polygon with ST_MakeValid() ... and failed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3650
diff changeset
452 ctx,
c368a9a20478 Tried to fix invalid new boundary polygon with ST_MakeValid() ... and failed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3650
diff changeset
453 repairBoundarySQL,
c368a9a20478 Tried to fix invalid new boundary polygon with ST_MakeValid() ... and failed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3650
diff changeset
454 clippingPolygon.AsWKB(),
c368a9a20478 Tried to fix invalid new boundary polygon with ST_MakeValid() ... and failed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3650
diff changeset
455 epsg,
3658
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
456 ).Scan(&clippingPolygonWKB, &buffered); err != nil {
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
457 return nil, err
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
458 }
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
459
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
460 if err := clippingPolygon.FromWKB(clippingPolygonWKB); err != nil {
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
461 return nil, err
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
462 }
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
463 if err := clippingPolygonBuffered.FromWKB(buffered); err != nil {
3651
c368a9a20478 Tried to fix invalid new boundary polygon with ST_MakeValid() ... and failed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3650
diff changeset
464 return nil, err
c368a9a20478 Tried to fix invalid new boundary polygon with ST_MakeValid() ... and failed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3650
diff changeset
465 }
c368a9a20478 Tried to fix invalid new boundary polygon with ST_MakeValid() ... and failed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3650
diff changeset
466
3658
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
467 feedback.Info("Calculating took %v.", time.Since(start))
3600
6590733e2ebc SR import: If in single beam mode and no boundary is given eliminate triangles which have at least an edge with is longer than 98% of the overall edge lengths.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3596
diff changeset
468
3658
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
469 } else { // has Boundary
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
470 feedback.Info("Using uploaded boundary polygon.")
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
471 var buffered []byte
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
472 if err = tx.QueryRowContext(
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
473 ctx,
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
474 reprojectPointsBufferedSQL,
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
475 boundary.asWKB(),
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
476 m.EPSG,
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
477 epsg,
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
478 ).Scan(&clippingPolygonWKB, &buffered, &polygonArea); err != nil {
3651
c368a9a20478 Tried to fix invalid new boundary polygon with ST_MakeValid() ... and failed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3650
diff changeset
479 return nil, err
c368a9a20478 Tried to fix invalid new boundary polygon with ST_MakeValid() ... and failed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3650
diff changeset
480 }
3658
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
481 if err := clippingPolygon.FromWKB(clippingPolygonWKB); err != nil {
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
482 return nil, err
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
483 }
3651
c368a9a20478 Tried to fix invalid new boundary polygon with ST_MakeValid() ... and failed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3650
diff changeset
484 if err := clippingPolygonBuffered.FromWKB(buffered); err != nil {
c368a9a20478 Tried to fix invalid new boundary polygon with ST_MakeValid() ... and failed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3650
diff changeset
485 return nil, err
c368a9a20478 Tried to fix invalid new boundary polygon with ST_MakeValid() ... and failed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3650
diff changeset
486 }
c368a9a20478 Tried to fix invalid new boundary polygon with ST_MakeValid() ... and failed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3650
diff changeset
487
3658
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
488 tin := tri.Tin()
3742
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
489 tin.EPSG = epsg
3650
01ce3ba9b0d0 Fixed generating of random points.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3646
diff changeset
490
01ce3ba9b0d0 Fixed generating of random points.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3646
diff changeset
491 var str octree.STRTree
3658
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
492 str.Build(tin)
3655
a6c671abbc35 Started with cleaning up the single beam import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3654
diff changeset
493
3658
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
494 removed = str.Clip(&clippingPolygon)
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
495 }
3650
01ce3ba9b0d0 Fixed generating of random points.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3646
diff changeset
496
3742
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
497 if singleBeam {
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
498
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
499 // Build the first mesh to generate random points on.
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
500
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
501 feedback.Info("Build virtual DEM based on original XYZ data.")
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
502
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
503 start = time.Now()
3650
01ce3ba9b0d0 Fixed generating of random points.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3646
diff changeset
504
3742
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
505 var tree *octree.Tree
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
506 {
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
507 builder := octree.NewBuilder(tri.Tin())
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
508 builder.Build(removed)
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
509 tree = builder.Tree()
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
510 }
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
511
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
512 feedback.Info("Building took %v", time.Since(start))
3650
01ce3ba9b0d0 Fixed generating of random points.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3646
diff changeset
513
3742
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
514 feedback.Info("Boundary area: %.2fm²", polygonArea)
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
515
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
516 numPoints := int(math.Ceil(polygonArea * pointsPerSquareMeter))
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
517
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
518 feedback.Info("Generate %d random points for an average density of ~%d points/m².",
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
519 numPoints, pointsPerSquareMeter)
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
520
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
521 start = time.Now()
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
522
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
523 generated := make(octree.LineStringZ, 0, numPoints+clippingPolygon.NumVertices(0))
3650
01ce3ba9b0d0 Fixed generating of random points.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3646
diff changeset
524
3742
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
525 tree.GenerateRandomVertices(numPoints, func(vertices []octree.Vertex) {
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
526 generated = append(generated, vertices...)
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
527 })
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
528
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
529 feedback.Info("Generating %d points took %v.", len(generated), time.Since(start))
3591
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
530
3742
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
531 // Add the boundary to new point cloud.
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
532 dupes := map[[2]float64]struct{}{}
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
533 clippingPolygon.Vertices(0, func(x, y float64) {
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
534 key := [2]float64{x, y}
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
535 if _, found := dupes[key]; found {
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
536 return
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
537 }
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
538 dupes[key] = struct{}{}
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
539 if z, ok := tree.Value(x, y); ok {
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
540 generated = append(generated, octree.Vertex{X: x, Y: y, Z: z})
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
541 }
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
542 })
3658
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
543
3742
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
544 feedback.Info("Triangulate new point cloud.")
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
545 xyz = octree.MultiPointZ(generated)
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
546 start = time.Now()
3658
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
547
3742
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
548 tri, err = octree.Triangulate(xyz)
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
549 if err != nil {
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
550 return nil, err
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
551 }
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
552 feedback.Info("Second triangulation took %v.", time.Since(start))
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
553 feedback.Info("Number triangles: %d.", len(tri.Triangles)/3)
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
554 feedback.Info("Clipping triangles from new mesh.")
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
555
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
556 }
3658
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
557
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
558 start = time.Now()
3742
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
559 tin = tri.Tin()
879c297c47e9 SR import: Use home-brew concave hull algorithm in multi-beam scan case, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
560 tin.EPSG = epsg
3658
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
561
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
562 var str octree.STRTree
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
563 str.Build(tin)
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
564 feedback.Info("Building STR tree took %v", time.Since(start))
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
565
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
566 start = time.Now()
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
567
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
568 clippingPolygonBuffered.Indexify()
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
569 removed = str.Clip(&clippingPolygonBuffered)
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
570 feedback.Info("Clipping STR tree took %v.", time.Since(start))
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
571 feedback.Info("Number of triangles to clip %d.", len(removed))
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
572
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
573 feedback.Info("Build final octree index")
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
574
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
575 builder := octree.NewBuilder(tin)
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
576 builder.Build(removed)
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
577 octreeIndex, err := builder.Bytes()
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
578 if err != nil {
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
579 return nil, err
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
580 }
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
581 feedback.Info("Building octree took %v.", time.Since(start))
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
582 feedback.Info("Store octree.")
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
583
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
584 start = time.Now()
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
585
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
586 var (
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
587 id int64
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
588 dummy uint32
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
589 lat, lon float64
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
590 )
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
591
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
592 var hull []byte
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
593
3664
58508f50d192 SR import: Made error messages symmetrical to multi beam if no matching bottleneck is found for single beam imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3659
diff changeset
594 err = tx.QueryRowContext(
3658
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
595 ctx,
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
596 insertHullSQL,
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
597 m.Bottleneck,
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
598 m.Date.Time,
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
599 m.DepthReference,
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
600 nil,
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
601 clippingPolygonWKB,
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
602 epsg,
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
603 ).Scan(
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
604 &id,
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
605 &lat,
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
606 &lon,
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
607 &dummy,
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
608 &hull,
3664
58508f50d192 SR import: Made error messages symmetrical to multi beam if no matching bottleneck is found for single beam imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3659
diff changeset
609 )
58508f50d192 SR import: Made error messages symmetrical to multi beam if no matching bottleneck is found for single beam imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3659
diff changeset
610
58508f50d192 SR import: Made error messages symmetrical to multi beam if no matching bottleneck is found for single beam imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3659
diff changeset
611 switch {
58508f50d192 SR import: Made error messages symmetrical to multi beam if no matching bottleneck is found for single beam imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3659
diff changeset
612 case err == sql.ErrNoRows:
58508f50d192 SR import: Made error messages symmetrical to multi beam if no matching bottleneck is found for single beam imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3659
diff changeset
613 return nil, fmt.Errorf(
58508f50d192 SR import: Made error messages symmetrical to multi beam if no matching bottleneck is found for single beam imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3659
diff changeset
614 "No matching bottleneck of given name or time available: %v", err)
58508f50d192 SR import: Made error messages symmetrical to multi beam if no matching bottleneck is found for single beam imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3659
diff changeset
615 case err != nil:
3658
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
616 return nil, err
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
617 }
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
618
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
619 h := sha1.New()
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
620 h.Write(octreeIndex)
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
621 checksum := hex.EncodeToString(h.Sum(nil))
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
622 _, err = tx.ExecContext(ctx, insertOctreeSQL, id, checksum, octreeIndex)
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
623 if err != nil {
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
624 return nil, err
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
625 }
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
626 feedback.Info("Storing octree index took %s.", time.Since(start))
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
627 feedback.Info("Generate contour lines")
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
628
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
629 start = time.Now()
3882
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3762
diff changeset
630 err = generateContours(ctx, tx, feedback, builder.Tree(), id)
3658
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
631 if err != nil {
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
632 return nil, err
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
633 }
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
634 feedback.Info("Generating contour lines took %s.",
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
635 time.Since(start))
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
636
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
637 // Store for potential later removal.
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
638 if err = track(ctx, tx, importID, "waterway.sounding_results", id); err != nil {
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
639 return nil, err
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
640 }
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
641
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
642 summary := struct {
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
643 Bottleneck string `json:"bottleneck"`
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
644 Date models.Date `json:"date"`
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
645 Lat float64 `json:"lat"`
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
646 Lon float64 `json:"lon"`
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
647 }{
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
648 Bottleneck: m.Bottleneck,
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
649 Date: m.Date,
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
650 Lat: lat,
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
651 Lon: lon,
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
652 }
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
653
1c3df921361d Handle th case that a boundary polygon is uploaded along side with the single beam scan.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3655
diff changeset
654 return &summary, nil
3587
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
655 }
a9d140c7db8d SR import: Prepare the separate code paths for single and multibeam scans.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3586
diff changeset
656
1498
5df748916fcf Finished API docs for sounding result imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1496
diff changeset
657 // CleanUp removes the folder containing the ZIP file with the
5df748916fcf Finished API docs for sounding result imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1496
diff changeset
658 // the sounding result import.
1239
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
659 func (sr *SoundingResult) CleanUp() error {
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
660 return os.RemoveAll(sr.Dir)
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
661 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
662
1292
5aeda02c51b9 Sounding result import: Don't fail if an import ZIP does not contain an meta.json but has a full set of overrides.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1239
diff changeset
663 func (sr *SoundingResult) completeOverride() bool {
1384
8d59457a5651 Sounding result import: Consider parameter override as complete even if there is no EPSG code. Use WGS84 in this case as a default.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1338
diff changeset
664 // sr.EPSG == nil -> WGS84
3586
b9adb0ea4c41 SR import: a complete parameter overwrite now includes single beam flag.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3585
diff changeset
665 return sr.Bottleneck != nil &&
b9adb0ea4c41 SR import: a complete parameter overwrite now includes single beam flag.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3585
diff changeset
666 sr.Date != nil &&
b9adb0ea4c41 SR import: a complete parameter overwrite now includes single beam flag.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3585
diff changeset
667 sr.DepthReference != nil &&
3946
d668742c8978 SR import: Made `negate-z` flag more symmetrical to `single-beam` flag.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3945
diff changeset
668 sr.SingleBeam != nil &&
d668742c8978 SR import: Made `negate-z` flag more symmetrical to `single-beam` flag.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3945
diff changeset
669 sr.NegateZ != nil
1292
5aeda02c51b9 Sounding result import: Don't fail if an import ZIP does not contain an meta.json but has a full set of overrides.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1239
diff changeset
670 }
5aeda02c51b9 Sounding result import: Don't fail if an import ZIP does not contain an meta.json but has a full set of overrides.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1239
diff changeset
671
1239
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
672 func (sr *SoundingResult) loadMeta(f *zip.File) (*models.SoundingResultMeta, error) {
1292
5aeda02c51b9 Sounding result import: Don't fail if an import ZIP does not contain an meta.json but has a full set of overrides.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1239
diff changeset
673 if f == nil {
1384
8d59457a5651 Sounding result import: Consider parameter override as complete even if there is no EPSG code. Use WGS84 in this case as a default.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1338
diff changeset
674 var epsg uint
8d59457a5651 Sounding result import: Consider parameter override as complete even if there is no EPSG code. Use WGS84 in this case as a default.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1338
diff changeset
675 if sr.EPSG != nil {
8d59457a5651 Sounding result import: Consider parameter override as complete even if there is no EPSG code. Use WGS84 in this case as a default.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1338
diff changeset
676 epsg = *sr.EPSG
8d59457a5651 Sounding result import: Consider parameter override as complete even if there is no EPSG code. Use WGS84 in this case as a default.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1338
diff changeset
677 } else {
8d59457a5651 Sounding result import: Consider parameter override as complete even if there is no EPSG code. Use WGS84 in this case as a default.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1338
diff changeset
678 epsg = models.WGS84
8d59457a5651 Sounding result import: Consider parameter override as complete even if there is no EPSG code. Use WGS84 in this case as a default.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1338
diff changeset
679 }
1292
5aeda02c51b9 Sounding result import: Don't fail if an import ZIP does not contain an meta.json but has a full set of overrides.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1239
diff changeset
680 return &models.SoundingResultMeta{
5aeda02c51b9 Sounding result import: Don't fail if an import ZIP does not contain an meta.json but has a full set of overrides.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1239
diff changeset
681 Date: *sr.Date,
5aeda02c51b9 Sounding result import: Don't fail if an import ZIP does not contain an meta.json but has a full set of overrides.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1239
diff changeset
682 Bottleneck: *sr.Bottleneck,
1384
8d59457a5651 Sounding result import: Consider parameter override as complete even if there is no EPSG code. Use WGS84 in this case as a default.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1338
diff changeset
683 EPSG: epsg,
1292
5aeda02c51b9 Sounding result import: Don't fail if an import ZIP does not contain an meta.json but has a full set of overrides.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1239
diff changeset
684 DepthReference: *sr.DepthReference,
3946
d668742c8978 SR import: Made `negate-z` flag more symmetrical to `single-beam` flag.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3945
diff changeset
685 SingleBeam: sr.singleBeam(),
d668742c8978 SR import: Made `negate-z` flag more symmetrical to `single-beam` flag.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3945
diff changeset
686 NegateZ: sr.negateZ(),
1292
5aeda02c51b9 Sounding result import: Don't fail if an import ZIP does not contain an meta.json but has a full set of overrides.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1239
diff changeset
687 }, nil
5aeda02c51b9 Sounding result import: Don't fail if an import ZIP does not contain an meta.json but has a full set of overrides.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1239
diff changeset
688 }
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
689 r, err := f.Open()
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
690 if err != nil {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
691 return nil, err
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
692 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
693 defer r.Close()
1224
bc4b642c8d04 Started with an upload sounding result to temp upload area.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1193
diff changeset
694 var m models.SoundingResultMeta
1239
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
695 if err := m.Decode(r); err != nil {
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
696 return nil, err
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
697 }
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
698
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
699 // Apply overrides
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
700 if sr.Date != nil {
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
701 m.Date = *sr.Date
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
702 }
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
703 if sr.Bottleneck != nil {
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
704 m.Bottleneck = *sr.Bottleneck
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
705 }
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
706 if sr.EPSG != nil {
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
707 m.EPSG = *sr.EPSG
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
708 }
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
709 if sr.DepthReference != nil {
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
710 m.DepthReference = *sr.DepthReference
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
711 }
3585
479da494bc09 SR import: access beam-type parameter supplied by client. TODO: Implement single beam code path.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3518
diff changeset
712 if sr.SingleBeam != nil {
479da494bc09 SR import: access beam-type parameter supplied by client. TODO: Implement single beam code path.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3518
diff changeset
713 m.SingleBeam = *sr.SingleBeam
479da494bc09 SR import: access beam-type parameter supplied by client. TODO: Implement single beam code path.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3518
diff changeset
714 }
3946
d668742c8978 SR import: Made `negate-z` flag more symmetrical to `single-beam` flag.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3945
diff changeset
715 if sr.NegateZ != nil {
d668742c8978 SR import: Made `negate-z` flag more symmetrical to `single-beam` flag.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3945
diff changeset
716 m.NegateZ = *sr.NegateZ
d668742c8978 SR import: Made `negate-z` flag more symmetrical to `single-beam` flag.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3945
diff changeset
717 }
1239
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
718
d842d9d10872 Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1225
diff changeset
719 return &m, nil
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
720 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
721
3487
fdb0439850d5 Generalized transformation of vertices during sounding result import a bit.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3479
diff changeset
722 type vertexTransform func(octree.Vertex) octree.Vertex
fdb0439850d5 Generalized transformation of vertices during sounding result import a bit.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3479
diff changeset
723
3945
3bdbaf1b282a SR import: Negate the Z values in the XYZ files if the flag `negate-z` is set.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3904
diff changeset
724 func identityTransform(v octree.Vertex) octree.Vertex { return v }
3bdbaf1b282a SR import: Negate the Z values in the XYZ files if the flag `negate-z` is set.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3904
diff changeset
725
3bdbaf1b282a SR import: Negate the Z values in the XYZ files if the flag `negate-z` is set.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3904
diff changeset
726 func negateZTransform(v octree.Vertex) octree.Vertex {
3bdbaf1b282a SR import: Negate the Z values in the XYZ files if the flag `negate-z` is set.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3904
diff changeset
727 return octree.Vertex{X: v.X, Y: v.Y, Z: -v.Z}
3bdbaf1b282a SR import: Negate the Z values in the XYZ files if the flag `negate-z` is set.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3904
diff changeset
728 }
3bdbaf1b282a SR import: Negate the Z values in the XYZ files if the flag `negate-z` is set.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3904
diff changeset
729
3bdbaf1b282a SR import: Negate the Z values in the XYZ files if the flag `negate-z` is set.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3904
diff changeset
730 func chainTransforms(a, b vertexTransform) vertexTransform {
3bdbaf1b282a SR import: Negate the Z values in the XYZ files if the flag `negate-z` is set.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3904
diff changeset
731 return func(v octree.Vertex) octree.Vertex { return b(a(v)) }
3bdbaf1b282a SR import: Negate the Z values in the XYZ files if the flag `negate-z` is set.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3904
diff changeset
732 }
3bdbaf1b282a SR import: Negate the Z values in the XYZ files if the flag `negate-z` is set.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3904
diff changeset
733
3487
fdb0439850d5 Generalized transformation of vertices during sounding result import a bit.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3479
diff changeset
734 func loadXYZReader(r io.Reader, feedback Feedback, xform vertexTransform) (octree.MultiPointZ, error) {
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
735 mpz := make(octree.MultiPointZ, 0, 250000)
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
736 s := bufio.NewScanner(r)
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
737
3504
6e748f31777a AGM/SR import. Limit logging of warnings to 100.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3487
diff changeset
738 warnLimiter := misc.WarningLimiter{Log: feedback.Warn, MaxWarnings: 100}
6e748f31777a AGM/SR import. Limit logging of warnings to 100.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3487
diff changeset
739 warn := warnLimiter.Warn
6e748f31777a AGM/SR import. Limit logging of warnings to 100.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3487
diff changeset
740 defer warnLimiter.Close()
2963
27ffd94afcb5 SR import: Limit number of warnings in parsing XYZ files to 100.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2873
diff changeset
741
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
742 for line := 1; s.Scan(); line++ {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
743 text := s.Text()
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
744 var p octree.Vertex
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
745 // fmt.Sscanf(text, "%f,%f,%f") is 4 times slower.
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
746 idx := strings.IndexByte(text, ',')
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
747 if idx == -1 {
2963
27ffd94afcb5 SR import: Limit number of warnings in parsing XYZ files to 100.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2873
diff changeset
748 warn("format error in line %d", line)
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
749 continue
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
750 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
751 var err error
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
752 if p.X, err = strconv.ParseFloat(text[:idx], 64); err != nil {
2963
27ffd94afcb5 SR import: Limit number of warnings in parsing XYZ files to 100.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2873
diff changeset
753 warn("format error in line %d: %v", line, err)
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
754 continue
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
755 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
756 text = text[idx+1:]
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
757 if idx = strings.IndexByte(text, ','); idx == -1 {
1138
443fc80a315f Don't issue new lines at end of log messages when importing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1137
diff changeset
758 feedback.Warn("format error in line %d", line)
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
759 continue
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
760 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
761 if p.Y, err = strconv.ParseFloat(text[:idx], 64); err != nil {
2963
27ffd94afcb5 SR import: Limit number of warnings in parsing XYZ files to 100.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2873
diff changeset
762 warn("format error in line %d: %v", line, err)
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
763 continue
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
764 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
765 text = text[idx+1:]
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
766 if p.Z, err = strconv.ParseFloat(text, 64); err != nil {
2963
27ffd94afcb5 SR import: Limit number of warnings in parsing XYZ files to 100.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2873
diff changeset
767 warn("format error in line %d: %v", line, err)
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
768 continue
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
769 }
3945
3bdbaf1b282a SR import: Negate the Z values in the XYZ files if the flag `negate-z` is set.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3904
diff changeset
770 p = xform(p)
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
771 mpz = append(mpz, p)
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
772 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
773
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
774 if err := s.Err(); err != nil {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
775 return nil, err
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
776 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
777
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
778 return mpz, nil
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
779 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
780
3487
fdb0439850d5 Generalized transformation of vertices during sounding result import a bit.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3479
diff changeset
781 func loadXYZ(f *zip.File, feedback Feedback, xform vertexTransform) (octree.MultiPointZ, error) {
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
782 r, err := f.Open()
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
783 if err != nil {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
784 return nil, err
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
785 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
786 defer r.Close()
3487
fdb0439850d5 Generalized transformation of vertices during sounding result import a bit.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3479
diff changeset
787 return loadXYZReader(r, feedback, xform)
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
788 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
789
3748
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
790 func loadXYZFile(f string, feedback Feedback, xform vertexTransform) (octree.MultiPointZ, error) {
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
791 r, err := os.Open(f)
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
792 if err != nil {
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
793 return nil, err
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
794 }
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
795 defer r.Close()
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
796 return loadXYZReader(r, feedback, xform)
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
797 }
4bb5dfa0b7e3 SR import: Accept TXT file for uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3742
diff changeset
798
1786
09349ca27dd7 Imports: Removed duplicated code path to store WKB polygons into database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1754
diff changeset
799 func loadBoundary(z *zip.ReadCloser) (polygonSlice, error) {
1225
4d7c44f7044e Factored out som zip lookup code to be reusable in sounding result upload controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1224
diff changeset
800 shpF := common.FindInZIP(z, ".shp")
960
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
801 if shpF == nil {
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
802 return nil, nil
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
803 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
804 prefix := strings.TrimSuffix(shpF.Name, path.Ext(shpF.Name))
1225
4d7c44f7044e Factored out som zip lookup code to be reusable in sounding result upload controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1224
diff changeset
805 dbfF := common.FindInZIP(z, prefix+".dbf")
960
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
806 if dbfF == nil {
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
807 return nil, fmt.Errorf("No DBF file found for %s", shpF.Name)
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
808 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
809
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
810 shpR, err := shpF.Open()
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
811 if err != nil {
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
812 return nil, err
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
813 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
814
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
815 dbfR, err := dbfF.Open()
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
816 if err != nil {
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
817 shpR.Close()
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
818 return nil, err
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
819 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
820 sr := shp.SequentialReaderFromExt(shpR, dbfR)
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
821 defer sr.Close()
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
822
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
823 if !sr.Next() {
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
824 return nil, sr.Err()
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
825 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
826
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
827 _, s := sr.Shape()
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
828 if s == nil {
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
829 return nil, sr.Err()
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
830 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
831
972
17a03a84b0e8 Split out polygon code out of sounding result importer source file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 971
diff changeset
832 return shapeToPolygon(s)
960
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
833 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
834
3591
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
835 func generateContours(
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
836 ctx context.Context,
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
837 tx *sql.Tx,
3882
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3762
diff changeset
838 feedback Feedback,
3591
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
839 tree *octree.Tree,
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
840 id int64,
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
841 ) error {
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
842 stmt, err := tx.PrepareContext(ctx, insertContourSQL)
977
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
843 if err != nil {
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
844 return err
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
845 }
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
846 defer stmt.Close()
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
847
3882
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3762
diff changeset
848 heights, err := octree.LoadClassBreaks(
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3762
diff changeset
849 ctx, tx,
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3762
diff changeset
850 "morphology_classbreaks",
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3762
diff changeset
851 )
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3762
diff changeset
852 if err != nil {
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3762
diff changeset
853 feedback.Warn("Loading class breaks failed: %v", err)
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3762
diff changeset
854 feedback.Info("Using default class breaks")
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3762
diff changeset
855 heights = nil
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3762
diff changeset
856 h := contourStepWidth * math.Ceil(tree.Min.Z/contourStepWidth)
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3762
diff changeset
857 for ; h <= tree.Max.Z; h += contourStepWidth {
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3762
diff changeset
858 heights = append(heights, h)
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3762
diff changeset
859 }
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3762
diff changeset
860 } else {
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3762
diff changeset
861 heights = octree.ExtrapolateClassBreaks(heights, tree.Min.Z, tree.Max.Z)
3949
c1be6aacefb1 Don't create extra inbetween class breaks.
Sascha Wilde <wilde@intevation.de>
parents: 3904
diff changeset
862 // We set steps for InBetweenClassBreaks to 1, so it
c1be6aacefb1 Don't create extra inbetween class breaks.
Sascha Wilde <wilde@intevation.de>
parents: 3904
diff changeset
863 // becomes a null operation. The extra class breaks
c1be6aacefb1 Don't create extra inbetween class breaks.
Sascha Wilde <wilde@intevation.de>
parents: 3904
diff changeset
864 // were considered unexpected and confusing by the
c1be6aacefb1 Don't create extra inbetween class breaks.
Sascha Wilde <wilde@intevation.de>
parents: 3904
diff changeset
865 // users. Once we get filled polygones the visual will
c1be6aacefb1 Don't create extra inbetween class breaks.
Sascha Wilde <wilde@intevation.de>
parents: 3904
diff changeset
866 // be considerably different anyway. -- sw
3954
cb4fda122321 Completing: Don't create extra inbetween class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3951
diff changeset
867 // heights = octree.InBetweenClassBreaks(heights, 0.05, 1)
1184
064d44ccc6f2 Adjust contour lines heights to multiples of step width
Tom Gottfried <tom@intevation.de>
parents: 1168
diff changeset
868 }
064d44ccc6f2 Adjust contour lines heights to multiples of step width
Tom Gottfried <tom@intevation.de>
parents: 1168
diff changeset
869
3882
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3762
diff changeset
870 /*
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3762
diff changeset
871 for i, v := range heights {
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3762
diff changeset
872 fmt.Printf("%d %.2f\n", i, v)
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3762
diff changeset
873 }
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3762
diff changeset
874 log.Printf("%.2f - %.2f\n", tree.Min.Z, tree.Max.Z)
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3762
diff changeset
875 */
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3762
diff changeset
876
1184
064d44ccc6f2 Adjust contour lines heights to multiples of step width
Tom Gottfried <tom@intevation.de>
parents: 1168
diff changeset
877 octree.DoContours(tree, heights, func(res *octree.ContourResult) {
2529
45d51a49f191 SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2516
diff changeset
878 if err == nil && len(res.Lines) > 0 {
3591
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
879 _, err = stmt.ExecContext(
062dc9b54b86 SR import: Using context.Context aware SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3587
diff changeset
880 ctx,
977
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
881 id, res.Height, tree.EPSG,
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
882 res.Lines.AsWKB2D(),
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
883 contourTolerance)
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
884 }
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
885 })
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
886
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
887 return err
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
888 }