Mercurial > gemma
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 |
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 } |