annotate pkg/imports/sr.go @ 1239:d842d9d10872

Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 20 Nov 2018 17:04:06 +0100
parents 4d7c44f7044e
children 5aeda02c51b9
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>
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 991
diff changeset
13
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14 package imports
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16 import (
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
17 "archive/zip"
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 "bufio"
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 "context"
973
b6fec8f85599 Generate TINs and octrees in sounding result importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 972
diff changeset
20 "crypto/sha1"
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21 "database/sql"
973
b6fec8f85599 Generate TINs and octrees in sounding result importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 972
diff changeset
22 "encoding/hex"
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
23 "encoding/json"
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"
bc4b642c8d04 Started with an upload sounding result to temp upload area.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1193
diff changeset
38 "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
39 "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
40 )
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41
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
42 type SoundingResult struct {
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
43 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
44
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 // Override data
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
46 Date *models.SoundingResultDate `json:"date,omitempty"`
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
47 Bottleneck *string `json:"bottleneck,omitempty"`
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 EPSG *uint `json:"epsg,omitempty"`
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 DepthReference *string `json:"depth-reference,omitempty"`
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 }
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
51
964
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
52 const (
1130
42617bba8709 Go from 50cm to 10cm stepwidth in calculating the contorlines.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
53 contourStepWidth = 0.1
977
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
54 contourTolerance = 0.1
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
55 )
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
56
991
a301d240905f Decoupled import job creation and job execution with a factory function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 988
diff changeset
57 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
58
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
59 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
60
1193
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
61 func init() {
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
62 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
63 }
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
64
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
65 func (srJobCreator) Create(_ JobKind, data string) (Job, error) {
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 sr := new(SoundingResult)
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
67 if err := sr.FromString(data); 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
68 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
69 }
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
70 return sr, nil
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
71 }
a5069da2f0b7 Independent imports in terms of affected tables/dependencies are now run concurrently.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1131
diff changeset
72
a5069da2f0b7 Independent imports in terms of affected tables/dependencies are now run concurrently.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1131
diff changeset
73 func (srJobCreator) Depends() []string {
a5069da2f0b7 Independent imports in terms of affected tables/dependencies are now run concurrently.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1131
diff changeset
74 return []string{
a5069da2f0b7 Independent imports in terms of affected tables/dependencies are now run concurrently.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1131
diff changeset
75 "waterway.sounding_results",
a5069da2f0b7 Independent imports in terms of affected tables/dependencies are now run concurrently.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1131
diff changeset
76 "waterway.sounding_results_contour_lines",
a5069da2f0b7 Independent imports in terms of affected tables/dependencies are now run concurrently.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1131
diff changeset
77 "waterway.bottlenecks",
a5069da2f0b7 Independent imports in terms of affected tables/dependencies are now run concurrently.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1131
diff changeset
78 }
a5069da2f0b7 Independent imports in terms of affected tables/dependencies are now run concurrently.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1131
diff changeset
79 }
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
1193
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
81 func (srJobCreator) StageDone(
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
82 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
83 ctx context.Context,
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
84 id int64,
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
85 ) error {
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
86 _, 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
87 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
88 }
a301d240905f Decoupled import job creation and job execution with a factory function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 988
diff changeset
89
977
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
90 const (
1193
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
91 srStageDoneSQL = `
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
92 UPDATE waterway.sounding_results SET staging_done = true
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
93 WHERE id = $1`
58acc343b1b6 Implemented the db stuff of the review process. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
94
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
95 insertPointsSQL = `
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
96 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
97 bottleneck_id,
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
98 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
99 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
100 point_cloud,
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
101 area
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
102 ) VALUES (
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
103 (SELECT bottleneck_id from waterway.bottlenecks where objnam = $1),
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
104 $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
105 $3,
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
106 ST_Transform(ST_GeomFromWKB($4, $6::integer), 4326)::geography,
984
3c9ea8ab856a Fixed small glitches in sounding result importer.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 983
diff changeset
107 (SELECT CASE WHEN $5::bytea IS NULL THEN
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
108 ST_Transform(
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
109 ST_ConcaveHull(
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
110 ST_Force2D(ST_GeomFromWKB($4, $6::integer)), 0.7), 4326)::geography
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
111 ELSE
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
112 ST_Transform(ST_GeomFromWKB($5, $6::integer), 4326)::geography
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
113 END)
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
114 )
971
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 964
diff changeset
115 RETURNING
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 964
diff changeset
116 id,
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 964
diff changeset
117 CASE WHEN ST_Y(ST_Centroid(point_cloud::geometry)) > 0 THEN
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 964
diff changeset
118 32600
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 964
diff changeset
119 ELSE
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 964
diff changeset
120 32700
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 964
diff changeset
121 END + floor((ST_X(ST_Centroid(point_cloud::geometry))+180)/6)::int + 1`
973
b6fec8f85599 Generate TINs and octrees in sounding result importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 972
diff changeset
122
b6fec8f85599 Generate TINs and octrees in sounding result importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 972
diff changeset
123 insertOctreeSQL = `
1131
2e6b47cdb2ca Store octrees along with sounding results
Tom Gottfried <tom@intevation.de>
parents: 1130
diff changeset
124 UPDATE waterway.sounding_results SET
2e6b47cdb2ca Store octrees along with sounding results
Tom Gottfried <tom@intevation.de>
parents: 1130
diff changeset
125 octree_checksum = $2, octree_index = $3
2e6b47cdb2ca Store octrees along with sounding results
Tom Gottfried <tom@intevation.de>
parents: 1130
diff changeset
126 WHERE id = $1`
977
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
127
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
128 insertContourSQL = `
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
129 INSERT INTO waterway.sounding_results_contour_lines (
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
130 sounding_result_id,
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
131 height,
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
132 lines
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
133 )
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
134 SELECT
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
135 $1,
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
136 $2,
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
137 ST_Transform(
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
138 ST_Multi(
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
139 ST_CollectionExtract(
1137
2fb6c0a6ec8a Avoid intersection of each isoline with area on insert
Tom Gottfried <tom@intevation.de>
parents: 1136
diff changeset
140 ST_SimplifyPreserveTopology(
2fb6c0a6ec8a Avoid intersection of each isoline with area on insert
Tom Gottfried <tom@intevation.de>
parents: 1136
diff changeset
141 ST_GeomFromWKB($4, $3::integer),
2fb6c0a6ec8a Avoid intersection of each isoline with area on insert
Tom Gottfried <tom@intevation.de>
parents: 1136
diff changeset
142 $5
977
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
143 ),
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
144 2
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
145 )
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
146 ),
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
147 4326
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
148 )
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
149 FROM waterway.sounding_results sr
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
150 WHERE id = $1
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
151 `
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
152 )
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
153
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
154 func (sr *SoundingResult) FromString(data string) 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
155 return json.NewDecoder(strings.NewReader(data)).Decode(sr)
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
156 }
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
157
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
158 func (sr *SoundingResult) ToString() (string, 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
159 var b strings.Builder
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
160 if err := json.NewEncoder(&b).Encode(sr); 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
161 return "", 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
162 }
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
163 return b.String(), 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
164 }
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
165
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
166 func (sr *SoundingResult) Do(
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
167 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
168 ctx context.Context,
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
169 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
170 feedback Feedback,
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
171 ) 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
172
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
173 z, err := zip.OpenReader(filepath.Join(sr.Dir, "sr.zip"))
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
174 if err != nil {
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
175 return err
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
176 }
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
177 defer z.Close()
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
178
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
179 feedback.Info("Looking for 'meta.json'")
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
180 mf := common.FindInZIP(z, "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
181 if mf == nil {
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
182 return errors.New("Cannot find 'meta.json'")
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
183 }
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
184
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
185 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
186 if err != nil {
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
187 return err
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
188 }
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
189
1224
bc4b642c8d04 Started with an upload sounding result to temp upload area.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1193
diff changeset
190 if err := m.Validate(conn, ctx); err != nil {
bc4b642c8d04 Started with an upload sounding result to temp upload area.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1193
diff changeset
191 return 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
192 }
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
193
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
194 feedback.Info("Looking for '*.xyz'")
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
195 xyzf := common.FindInZIP(z, ".xyz")
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
196 if xyzf == nil {
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
197 return errors.New("Cannot find any *.xyz file")
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
198 }
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
199
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
200 xyz, err := loadXYZ(xyzf, feedback)
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
201 if err != nil {
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
202 return err
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
203 }
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
204
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
205 if len(xyz) == 0 {
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
206 return errors.New("XYZ does not contain any vertices.")
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
207 }
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
208
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
209 // Is there a boundary shapefile in the ZIP archive?
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
210 polygon, err := loadBoundary(z)
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
211 if err != nil {
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
212 return err
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
213 }
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
214
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
215 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
216 if err != nil {
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
217 return err
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
218 }
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
219 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
220
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
221 var id int64
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
222 var epsg uint32
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
223 start := time.Now()
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
224
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
225 err = tx.QueryRow(insertPointsSQL,
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
226 m.Bottleneck,
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
227 m.Date.Time,
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
228 m.DepthReference,
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
229 xyz.AsWKB(),
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
230 polygon.AsWBK(),
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
231 m.EPSG,
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
232 ).Scan(&id, &epsg)
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
233 xyz, polygon = nil, nil // not need from now on.
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
234 feedback.Info("storing points took %s", time.Since(start))
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
235 if err != nil {
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
236 return err
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
237 }
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("Best suited UTM EPSG: %d", epsg)
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
240
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
241 feedback.Info("Triangulate...")
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
242 start = time.Now()
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
243 tin, err := octree.GenerateTinByID(conn, ctx, id, epsg)
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
244 feedback.Info("triangulation took %s", time.Since(start))
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
245 if err != nil {
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
246 return err
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
247 }
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
248
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
249 if tin == nil {
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
250 return errors.New("cannot load TIN from database")
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
251 }
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
252
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
253 feedback.Info("Building octree...")
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
254 builder := octree.NewBuilder(tin)
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
255 start = time.Now()
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
256 builder.Build()
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
257 octreeIndex, err := builder.Bytes()
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
258 tin = nil // not needed from now on
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
259 feedback.Info("building octree took %s", time.Since(start))
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
260 if err != nil {
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
261 return err
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
262 }
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
263
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
264 feedback.Info("Store octree...")
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
265 start = time.Now()
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
266 h := sha1.New()
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
267 h.Write(octreeIndex)
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
268 checksum := hex.EncodeToString(h.Sum(nil))
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
269 _, err = tx.Exec(insertOctreeSQL, id, checksum, octreeIndex)
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
270 feedback.Info("storing octree index took %s", time.Since(start))
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
271 if err != nil {
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
272 return err
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
273 }
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
274
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
275 tree := builder.Tree()
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
276 builder = nil // not needed from now on
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
277
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
278 feedback.Info("Generate contour lines...")
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
279 start = time.Now()
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
280 err = generateContours(tree, tx, id)
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
281 feedback.Info("generating and storing contour lines took %s", time.Since(start))
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
282 if err != nil {
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
283 return err
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
284 }
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
285
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
286 // Store for potential later removal.
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
287 if err = track(tx, ctx, importID, "waterway.sounding_results", id); err != nil {
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
288 return err
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
289 }
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
290
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
291 if err = tx.Commit(); err == nil {
443fc80a315f Don't issue new lines at end of log messages when importing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1137
diff changeset
292 feedback.Info("Storing sounding result was successful.")
443fc80a315f Don't issue new lines at end of log messages when importing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1137
diff changeset
293 }
443fc80a315f Don't issue new lines at end of log messages when importing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1137
diff changeset
294 return 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
295 }
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
296
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
297 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
298 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
299 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
300
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
301 func (sr *SoundingResult) loadMeta(f *zip.File) (*models.SoundingResultMeta, error) {
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
302 r, err := f.Open()
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
303 if err != nil {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
304 return nil, err
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
305 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
306 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
307 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
308 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
309 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
310 }
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
311
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
312 // 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
313 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
314 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
315 }
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
316 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
317 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
318 }
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
319 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
320 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
321 }
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
322 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
323 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
324 }
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
325
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
326 return &m, nil
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
327 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
328
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 func loadXYZReader(r io.Reader, feedback Feedback) (octree.MultiPointZ, error) {
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
330 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
331 s := bufio.NewScanner(r)
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
332
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
333 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
334 text := s.Text()
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
335 var p octree.Vertex
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
336 // 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
337 idx := strings.IndexByte(text, ',')
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
338 if 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
339 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
340 continue
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
341 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
342 var err error
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
343 if p.X, err = strconv.ParseFloat(text[:idx], 64); err != nil {
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
344 feedback.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
345 continue
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
346 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
347 text = text[idx+1:]
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
348 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
349 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
350 continue
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
351 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
352 if p.Y, err = strconv.ParseFloat(text[:idx], 64); err != nil {
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
353 feedback.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
354 continue
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
355 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
356 text = text[idx+1:]
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
357 if p.Z, err = strconv.ParseFloat(text, 64); err != nil {
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
358 feedback.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
359 continue
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
360 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
361 mpz = append(mpz, p)
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
362 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
363
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
364 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
365 return nil, err
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
366 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
367
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
368 return mpz, nil
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
369 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
370
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
371 func loadXYZ(f *zip.File, feedback Feedback) (octree.MultiPointZ, error) {
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
372 r, err := f.Open()
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
373 if err != nil {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
374 return nil, err
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
375 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
376 defer r.Close()
988
7dfd3db94e6d In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 984
diff changeset
377 return loadXYZReader(r, feedback)
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
378 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
379
960
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
380 func loadBoundary(z *zip.ReadCloser) (Polygon, 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
381 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
382 if shpF == nil {
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
383 return nil, nil
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
384 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
385 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
386 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
387 if dbfF == nil {
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
388 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
389 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
390
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
391 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
392 if err != nil {
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
393 return nil, err
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
394 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
395
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
396 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
397 if err != nil {
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
398 shpR.Close()
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
399 return nil, err
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
400 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
401 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
402 defer sr.Close()
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
403
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
404 if !sr.Next() {
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
405 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
406 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
407
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
408 _, s := sr.Shape()
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
409 if s == nil {
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
410 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
411 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
412
972
17a03a84b0e8 Split out polygon code out of sounding result importer source file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 971
diff changeset
413 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
414 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
415
977
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
416 func generateContours(tree *octree.Tree, tx *sql.Tx, id int64) error {
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
417 stmt, err := tx.Prepare(insertContourSQL)
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
418 if err != nil {
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
419 return err
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
420 }
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
421 defer stmt.Close()
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
422
1184
064d44ccc6f2 Adjust contour lines heights to multiples of step width
Tom Gottfried <tom@intevation.de>
parents: 1168
diff changeset
423 // Adjust contour lines heights to multiples of contourStepWidth
064d44ccc6f2 Adjust contour lines heights to multiples of step width
Tom Gottfried <tom@intevation.de>
parents: 1168
diff changeset
424 heights := make([]float64, 0)
064d44ccc6f2 Adjust contour lines heights to multiples of step width
Tom Gottfried <tom@intevation.de>
parents: 1168
diff changeset
425 h := contourStepWidth * math.Ceil(tree.Min.Z/contourStepWidth)
064d44ccc6f2 Adjust contour lines heights to multiples of step width
Tom Gottfried <tom@intevation.de>
parents: 1168
diff changeset
426 for ; h <= tree.Max.Z; h += contourStepWidth {
064d44ccc6f2 Adjust contour lines heights to multiples of step width
Tom Gottfried <tom@intevation.de>
parents: 1168
diff changeset
427 heights = append(heights, h)
064d44ccc6f2 Adjust contour lines heights to multiples of step width
Tom Gottfried <tom@intevation.de>
parents: 1168
diff changeset
428 }
064d44ccc6f2 Adjust contour lines heights to multiples of step width
Tom Gottfried <tom@intevation.de>
parents: 1168
diff changeset
429
064d44ccc6f2 Adjust contour lines heights to multiples of step width
Tom Gottfried <tom@intevation.de>
parents: 1168
diff changeset
430 octree.DoContours(tree, heights, func(res *octree.ContourResult) {
977
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
431 if err == nil {
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
432 _, err = stmt.Exec(
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
433 id, res.Height, tree.EPSG,
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
434 res.Lines.AsWKB2D(),
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
435 contourTolerance)
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
436 }
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
437 })
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
438
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
439 return err
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
440 }