annotate cmd/tin2octree/main.go @ 977:4a2ca0e20006

Fixed build error. Copied file to the wrong place and said 'go build' to another wrong place. Argh.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 18 Oct 2018 17:30:53 +0200
parents f9fb6c399f3f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 package main
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
3 import (
720
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
4 "bytes"
971
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 969
diff changeset
5 "context"
720
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
6 "crypto/sha1"
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7 "database/sql"
720
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
8 "encoding/base64"
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
9 "flag"
720
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
10 "fmt"
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
11 "io"
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12 "log"
664
a3d722e1f593 octree: Load point cloud data projected in a suited UTM zone.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 661
diff changeset
13 "math"
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14 "os"
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15 "time"
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16
968
a4fe07a21ba7 Moved octree builder into octree package to be reusable by the sounding result import job.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 720
diff changeset
17 "gemma.intevation.de/gemma/pkg/octree"
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 "github.com/jackc/pgx"
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 "github.com/jackc/pgx/stdlib"
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20 )
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22 var (
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23 bottleneck = flag.String("bottleneck", "", "bottleneck id")
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24 date = flag.String("date", "", "date info")
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25 file = flag.String("file", "", "save to file")
720
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
26 insert = flag.Bool("insert", false, "write as SQL insert statement")
664
a3d722e1f593 octree: Load point cloud data projected in a suited UTM zone.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 661
diff changeset
27
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28 dbhost = flag.String("dbhost", "localhost", "database host")
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29 dbport = flag.Uint("dbport", 5432, "database port")
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30 dbname = flag.String("dbname", "gemma", "database user")
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
31 dbuser = flag.String("dbuser", "scott", "database user")
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32 dbpassword = flag.String("dbpw", "tiger", "database password")
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33 dbssl = flag.String("dbssl", "prefer", "database SSL mode")
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34 )
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36 func run(fn func(*sql.DB) error) error {
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38 // To ease SSL config ride a bit on parsing.
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39 cc, err := pgx.ParseConnectionString("sslmode=" + *dbssl)
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40 if err != nil {
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41 return err
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42 }
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
43
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44 // Do the rest manually to allow whitespace in user/password.
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45 cc.Host = *dbhost
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46 cc.Port = uint16(*dbport)
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47 cc.User = *dbuser
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48 cc.Password = *dbpassword
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49 cc.Database = *dbname
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
51 db := stdlib.OpenDB(cc)
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
52 defer db.Close()
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
53
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
54 return fn(db)
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
55 }
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
56
664
a3d722e1f593 octree: Load point cloud data projected in a suited UTM zone.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 661
diff changeset
57 const (
a3d722e1f593 octree: Load point cloud data projected in a suited UTM zone.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 661
diff changeset
58 centroidSQL = `
a3d722e1f593 octree: Load point cloud data projected in a suited UTM zone.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 661
diff changeset
59 SELECT ST_X(ST_Centroid(point_cloud::geometry)), ST_Y(ST_Centroid(point_cloud::geometry))
a3d722e1f593 octree: Load point cloud data projected in a suited UTM zone.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 661
diff changeset
60 FROM waterway.sounding_results
a3d722e1f593 octree: Load point cloud data projected in a suited UTM zone.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 661
diff changeset
61 WHERE bottleneck_id = $1 AND date_info = $2
a3d722e1f593 octree: Load point cloud data projected in a suited UTM zone.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 661
diff changeset
62 `
a3d722e1f593 octree: Load point cloud data projected in a suited UTM zone.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 661
diff changeset
63 )
a3d722e1f593 octree: Load point cloud data projected in a suited UTM zone.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 661
diff changeset
64
971
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 969
diff changeset
65 func utmZone(x, y float64) uint32 {
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 969
diff changeset
66 var pref uint32
664
a3d722e1f593 octree: Load point cloud data projected in a suited UTM zone.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 661
diff changeset
67 if y > 0 {
a3d722e1f593 octree: Load point cloud data projected in a suited UTM zone.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 661
diff changeset
68 pref = 32600
a3d722e1f593 octree: Load point cloud data projected in a suited UTM zone.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 661
diff changeset
69 } else {
a3d722e1f593 octree: Load point cloud data projected in a suited UTM zone.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 661
diff changeset
70 pref = 32700
a3d722e1f593 octree: Load point cloud data projected in a suited UTM zone.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 661
diff changeset
71 }
971
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 969
diff changeset
72 zone := uint32(math.Floor((x+180)/6)) + 1
664
a3d722e1f593 octree: Load point cloud data projected in a suited UTM zone.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 661
diff changeset
73 return zone + pref
a3d722e1f593 octree: Load point cloud data projected in a suited UTM zone.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 661
diff changeset
74 }
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
75
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
76 func main() {
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
77 flag.Parse()
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
78
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
79 if *bottleneck == "" || *date == "" {
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
80 log.Fatalln("missing bottleneck or date option.")
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
81 }
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
82
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
83 dateInfo, err := time.Parse("2006-01-02", *date)
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
84 if err != nil {
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
85 log.Fatalf("error: %v\n", err)
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
86 }
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
87
971
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 969
diff changeset
88 var t *octree.Tin
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 969
diff changeset
89
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 969
diff changeset
90 ctx := context.Background()
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
91
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
92 if err := run(func(db *sql.DB) error {
971
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 969
diff changeset
93 conn, err := db.Conn(ctx)
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 969
diff changeset
94 if err != nil {
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 969
diff changeset
95 return err
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 969
diff changeset
96 }
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 969
diff changeset
97 defer conn.Close()
664
a3d722e1f593 octree: Load point cloud data projected in a suited UTM zone.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 661
diff changeset
98
971
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 969
diff changeset
99 var utmZ uint32
969
a4e003ba0074 Throw out triangles out of triangulation result which are not covered by the the bounding polygon of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 968
diff changeset
100 var cx, cy float64
971
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 969
diff changeset
101
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 969
diff changeset
102 conn.QueryRowContext(ctx, centroidSQL, *bottleneck, dateInfo).Scan(&cx, &cy)
969
a4e003ba0074 Throw out triangles out of triangulation result which are not covered by the the bounding polygon of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 968
diff changeset
103 switch {
a4e003ba0074 Throw out triangles out of triangulation result which are not covered by the the bounding polygon of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 968
diff changeset
104 case err == sql.ErrNoRows:
a4e003ba0074 Throw out triangles out of triangulation result which are not covered by the the bounding polygon of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 968
diff changeset
105 return nil
a4e003ba0074 Throw out triangles out of triangulation result which are not covered by the the bounding polygon of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 968
diff changeset
106 case err != nil:
a4e003ba0074 Throw out triangles out of triangulation result which are not covered by the the bounding polygon of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 968
diff changeset
107 return err
664
a3d722e1f593 octree: Load point cloud data projected in a suited UTM zone.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 661
diff changeset
108 }
969
a4e003ba0074 Throw out triangles out of triangulation result which are not covered by the the bounding polygon of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 968
diff changeset
109 log.Printf("lat/lon: [%f, %f]\n", cx, cy)
a4e003ba0074 Throw out triangles out of triangulation result which are not covered by the the bounding polygon of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 968
diff changeset
110 utmZ = utmZone(cx, cy)
a4e003ba0074 Throw out triangles out of triangulation result which are not covered by the the bounding polygon of the sounding result.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 968
diff changeset
111 log.Printf("UTM zone: %d\n", utmZ)
664
a3d722e1f593 octree: Load point cloud data projected in a suited UTM zone.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 661
diff changeset
112
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
113 start := time.Now()
971
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 969
diff changeset
114 t, err = octree.GenerateTin(conn, ctx, *bottleneck, dateInfo, utmZ)
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
115 log.Printf("query took: %s\n", time.Since(start))
971
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 969
diff changeset
116 return err
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
117 }); err != nil {
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
118 log.Fatalf("error: %v\n", err)
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
119 }
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
120
971
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 969
diff changeset
121 if t == nil {
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 969
diff changeset
122 log.Fatalf("error: No such sounding result (%s, %s)\n",
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 969
diff changeset
123 *bottleneck, dateInfo)
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 969
diff changeset
124 }
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 969
diff changeset
125
f9fb6c399f3f Moved generating of tins to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 969
diff changeset
126 tb := octree.NewBuilder(t)
968
a4fe07a21ba7 Moved octree builder into octree package to be reusable by the sounding result import job.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 720
diff changeset
127 tb.Build()
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
128
720
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
129 if *insert {
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
130 var w io.Writer
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
131 var f *os.File
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
132
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
133 if *file != "" {
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
134 if f, err = os.Create(*file); err != nil {
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
135 log.Fatalf("error: %v\n", err)
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
136 }
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
137 w = f
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
138 } else {
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
139 w = os.Stdout
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
140 }
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
141
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
142 var buf bytes.Buffer
968
a4fe07a21ba7 Moved octree builder into octree package to be reusable by the sounding result import job.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 720
diff changeset
143 if err := tb.WriteTo(&buf); err != nil {
720
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
144 log.Fatalf("error: %v\n", err)
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
145 }
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
146 data := buf.String()
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
147 h := sha1.New()
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
148 buf.WriteTo(h)
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
149 fmt.Fprintln(w, "BEGIN;")
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
150 fmt.Fprintln(w, "INSERT INTO waterway.octrees")
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
151 fmt.Fprintf(w, "SELECT sr.id, '%x',\n", h.Sum(nil))
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
152 fmt.Fprint(w, "decode('")
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
153 fmt.Fprintf(w, "%s", base64.StdEncoding.EncodeToString([]byte(data)))
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
154 fmt.Fprintln(w, "', 'base64')")
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
155 fmt.Fprintln(w, "FROM waterway.sounding_results sr")
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
156 fmt.Fprintf(w,
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
157 "WHERE sr.bottleneck_id = '%s' AND sr.date_info = '%s'::date;\n",
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
158 *bottleneck, *date)
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
159 fmt.Fprintln(w, "END;")
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
160
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
161 if f != nil {
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
162 if err := f.Close(); err != nil {
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
163 log.Fatalf("error: %v\n", err)
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
164 }
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
165 }
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
166 return
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
167 }
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
168
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
169 if *file != "" {
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
170 f, err := os.Create(*file)
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
171 if err != nil {
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
172 log.Printf("error: %v\n", err)
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
173 }
968
a4fe07a21ba7 Moved octree builder into octree package to be reusable by the sounding result import job.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 720
diff changeset
174 err = tb.WriteTo(f)
720
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
175 if err2 := f.Close(); err == nil {
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
176 if err != nil {
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
177 err = err2
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
178 }
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
179 }
720
aeaa2adf5a8b octree: write SQL insert statements for octree indices.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 672
diff changeset
180 if err != nil {
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
181 log.Fatalf("error: %v\n", err)
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
182 }
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
183 }
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
184 }