annotate pkg/imports/sr.go @ 971:f9fb6c399f3f

Moved generating of tins to octree package.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 18 Oct 2018 11:52:13 +0200
parents 1e2dce348cfb
children 17a03a84b0e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 package imports
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
3 import (
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
4 "archive/zip"
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5 "bufio"
964
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
6 "bytes"
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7 "context"
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
8 "database/sql"
964
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
9 "encoding/binary"
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10 "encoding/json"
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11 "errors"
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12 "fmt"
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13 "io"
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14 "log"
964
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
15 "math"
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16 "os"
960
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
17 "path"
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 "strconv"
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 "strings"
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20 "time"
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21
960
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
22 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
23
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24 "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
25 )
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
27 type SoundingResult struct {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28 who string
960
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
29 zip string
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
31
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32 const SoundingResultDateFormat = "2006-01-02"
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33
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
34 type (
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
35 SoundingResultDate struct{ time.Time }
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
36
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
37 SoundingResultMeta struct {
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
38 Date SoundingResultDate `json:"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
39 Bottleneck string `json:"bottleneck"`
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
40 EPSG uint `json:"epsg"`
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
41 DepthReference string `json:"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
42 }
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
43
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
44 Point struct {
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
45 X float64
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
46 Y float64
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
47 }
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
48 LineString []Point
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
49 Polygon []LineString
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
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
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
52 const (
964
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
53 wkbNDR byte = 1
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
54 wkbPolygon uint32 = 3
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
55 )
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
56
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
57 const (
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
58 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
59 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
60 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
61 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
62 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
63 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
64 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
65 ) 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
66 (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
67 $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
68 $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
69 ST_Transform(ST_GeomFromWKB($4, $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
70 (SELECT CASE $5 IS NULL THEN
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
71 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
72 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
73 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
74 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
75 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
76 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
77 )
971
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 964
diff changeset
78 RETURNING
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 964
diff changeset
79 id,
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 964
diff changeset
80 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
81 32600
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 964
diff changeset
82 ELSE
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 964
diff changeset
83 32700
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 964
diff changeset
84 END + floor((ST_X(ST_Centroid(point_cloud::geometry))+180)/6)::int + 1`
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
85 )
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
86
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
87 func (srd *SoundingResultDate) UnmarshalJSON(data []byte) error {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
88 var s string
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
89 if err := json.Unmarshal(data, &s); err != nil {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
90 return err
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
91 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
92 d, err := time.Parse(SoundingResultDateFormat, s)
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
93 if err == nil {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
94 *srd = SoundingResultDate{d}
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
95 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
96 return err
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
97 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
98
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
99 func (sr *SoundingResult) Who() string {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
100 return sr.who
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
101 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
102
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
103 func (sr *SoundingResult) CleanUp() error {
960
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
104 return os.RemoveAll(sr.zip)
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
105 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
106
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
107 func find(needle string, haystack []*zip.File) *zip.File {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
108 needle = strings.ToLower(needle)
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
109 for _, straw := range haystack {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
110 if strings.HasSuffix(strings.ToLower(straw.Name), needle) {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
111 return straw
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
112 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
113 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
114 return nil
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
115 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
116
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
117 func loadMeta(f *zip.File) (*SoundingResultMeta, error) {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
118 r, err := f.Open()
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
119 if err != nil {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
120 return nil, err
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
121 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
122 defer r.Close()
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
123 var m SoundingResultMeta
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
124 err = json.NewDecoder(r).Decode(&m)
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
125 return &m, err
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
126 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
127
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
128 func (m *SoundingResultMeta) validate(conn *sql.Conn) error {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
129
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
130 var b bool
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
131 err := conn.QueryRowContext(context.Background(),
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
132 `SELECT true FROM internal.depth_references WHERE depth_reference = $1`,
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
133 m.DepthReference).Scan(&b)
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
134 switch {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
135 case err == sql.ErrNoRows:
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
136 return fmt.Errorf("Unknown depth reference '%s'\n", m.DepthReference)
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
137 case err != nil:
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
138 return err
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
139 case !b:
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
140 return errors.New("Unexpected depth reference")
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
141 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
142
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
143 err = conn.QueryRowContext(context.Background(),
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
144 `SELECT true FROM waterway.bottlenecks WHERE objnam = $1`,
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
145 m.Bottleneck).Scan(&b)
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
146 switch {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
147 case err == sql.ErrNoRows:
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
148 return fmt.Errorf("Unknown bottleneck '%s'\n", m.Bottleneck)
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
149 case err != nil:
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
150 return err
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
151 case !b:
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
152 return errors.New("Unexpected bottleneck")
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
153 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
154
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
155 return nil
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
156 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
157
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
158 func loadXYZReader(r io.Reader) (octree.MultiPointZ, error) {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
159 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
160 s := bufio.NewScanner(r)
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
161
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
162 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
163 text := s.Text()
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
164 var p octree.Vertex
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
165 // 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
166 idx := strings.IndexByte(text, ',')
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
167 if idx == -1 {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
168 log.Printf("format error in line %d\n", line)
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
169 continue
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
170 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
171 var err error
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
172 if p.X, err = strconv.ParseFloat(text[:idx], 64); err != nil {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
173 log.Printf("format error in line %d: %v\n", line, err)
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
174 continue
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
175 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
176 text = text[idx+1:]
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
177 if idx = strings.IndexByte(text, ','); idx == -1 {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
178 log.Printf("format error in line %d\n", line)
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
179 continue
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
180 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
181 if p.Y, err = strconv.ParseFloat(text[:idx], 64); err != nil {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
182 log.Printf("format error in line %d: %v\n", line, err)
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
183 continue
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
184 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
185 text = text[idx+1:]
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
186 if p.Z, err = strconv.ParseFloat(text, 64); err != nil {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
187 log.Printf("format error in line %d: %v\n", line, err)
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
188 continue
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
189 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
190 mpz = append(mpz, p)
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
191 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
192
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
193 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
194 return nil, err
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
195 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
196
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
197 return mpz, nil
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
198 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
199
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
200 func loadXYZ(f *zip.File) (octree.MultiPointZ, error) {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
201 r, err := f.Open()
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
202 if err != nil {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
203 return nil, err
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
204 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
205 defer r.Close()
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
206 return loadXYZReader(r)
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
207 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
208
960
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
209 func toPolygon(numParts int32, parts []int32, points []shp.Point) Polygon {
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
210 out := make(Polygon, numParts)
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
211 pos := 0
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
212 for i := range out {
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
213 ps := parts[i]
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
214 line := make(LineString, ps)
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
215 for j := int32(0); j < ps; j, pos = j+1, pos+1 {
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
216 p := &points[pos]
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
217 line[j] = Point{p.X, p.Y}
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
218 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
219 out[i] = line
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
220 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
221 return out
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
222 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
223
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
224 func loadBoundary(z *zip.ReadCloser) (Polygon, error) {
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
225 shpF := find(".shp", z.File)
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
226 if shpF == nil {
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
227 return nil, nil
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
228 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
229 prefix := strings.TrimSuffix(shpF.Name, path.Ext(shpF.Name))
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
230 dbfF := find(prefix+".dbf", z.File)
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
231 if dbfF == nil {
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
232 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
233 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
234
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
235 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
236 if err != nil {
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
237 return nil, err
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
238 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
239
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
240 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
241 if err != nil {
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
242 shpR.Close()
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
243 return nil, err
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
244 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
245 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
246 defer sr.Close()
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
247
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
248 if !sr.Next() {
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
249 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
250 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
251
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
252 _, s := sr.Shape()
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
253 if s == nil {
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
254 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
255 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
256
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
257 switch p := s.(type) {
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
258 case *shp.Polygon:
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
259 return toPolygon(p.NumParts, p.Parts, p.Points), nil
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
260 case *shp.PolygonZ:
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
261 return toPolygon(p.NumParts, p.Parts, p.Points), nil
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
262 case *shp.PolygonM:
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
263 return toPolygon(p.NumParts, p.Parts, p.Points), nil
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
264 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
265 return nil, fmt.Errorf("Unsupported shape type %T", s)
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
266 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
267
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
268 func (sr *SoundingResult) Do(conn *sql.Conn) error {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
269
960
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
270 z, err := zip.OpenReader(sr.zip)
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
271 if err != nil {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
272 return err
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
273 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
274 defer z.Close()
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
275
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
276 mf := find("meta.json", z.File)
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
277 if mf == nil {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
278 return errors.New("Cannot find 'meta.json'")
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
279 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
280
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
281 m, err := loadMeta(mf)
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
282 if err != nil {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
283 return err
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
284 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
285
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
286 if err := m.validate(conn); err != nil {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
287 return err
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
288 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
289
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
290 xyzf := find(".xyz", z.File)
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
291 if xyzf == nil {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
292 return errors.New("Cannot find any *.xyz file")
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
293 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
294
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
295 xyz, err := loadXYZ(xyzf)
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
296 if err != nil {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
297 return err
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
298 }
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 if len(xyz) == 0 {
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
301 return errors.New("XYZ does not contain any vertices.")
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
302 }
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
303
960
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
304 // Is there a boundary shapefile in the ZIP archive?
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
305 polygon, err := loadBoundary(z)
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
306 if err != nil {
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
307 return err
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
308 }
e23ae2c83427 Load boundary polygon of sounding result from ZIP file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 959
diff changeset
309
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
310 tx, err := conn.BeginTx(context.Background(), nil)
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
311 if err != nil {
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
312 return err
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
313 }
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
314 defer tx.Rollback()
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
315
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
316 var id int64
971
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 964
diff changeset
317 var epsg uint32
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
318
971
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 964
diff changeset
319 if err := tx.QueryRow(insertPointsSQL,
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
320 m.Bottleneck,
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
321 m.Date.Time,
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
322 m.DepthReference,
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
323 xyz.AsWKB(),
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
324 polygon.AsWBK(),
971
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 964
diff changeset
325 m.EPSG,
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 964
diff changeset
326 ).Scan(&id, &epsg); err != nil {
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
327 return err
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
328 }
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
329
971
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 964
diff changeset
330 log.Printf("EPSG: %d\n", epsg)
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 964
diff changeset
331
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
332 // TODO: Build octree
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
333 // TODO: Generate iso-lines
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
334
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
335 return tx.Commit()
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
336 }
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
337
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
338 func (p Polygon) AsWBK() []byte {
964
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
339 if p == nil {
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
340 return nil
a4c92e0ef2e1 Stored point cloud and bounding area of sounding result in database. WIP.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 960
diff changeset
341 }
964
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
342 // pre-calculate size to avoid reallocations.
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
343 size := 1 + 4 + 4
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
344 for _, ring := range p {
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
345 size += 4 + len(ring)*2*8
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
346 }
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
347
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
348 buf := bytes.NewBuffer(make([]byte, 0, size))
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
349
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
350 binary.Write(buf, binary.LittleEndian, wkbNDR)
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
351 binary.Write(buf, binary.LittleEndian, wkbPolygon)
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
352 binary.Write(buf, binary.LittleEndian, uint32(len(p)))
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
353
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
354 for _, ring := range p {
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
355 binary.Write(buf, binary.LittleEndian, uint32(len(ring)))
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
356 for _, v := range ring {
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
357 binary.Write(buf, binary.LittleEndian, math.Float64bits(v.X))
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
358 binary.Write(buf, binary.LittleEndian, math.Float64bits(v.Y))
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
359 }
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
360 }
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
361
1e2dce348cfb Serialize boundary polygon of sounding result as WKB.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 961
diff changeset
362 return buf.Bytes()
959
6ab012d0f0c2 Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
363 }