comparison cmd/octree2contour/store.go @ 727:41c8dc61f38f

Moved octree loading stuff to octree package.
author Sascha L. Teichmann <teichmann@intevation.de>
date Sat, 22 Sep 2018 21:57:30 +0200
parents 5af9ab39e715
children 39b5cf9a6b8f
comparison
equal deleted inserted replaced
726:5af9ab39e715 727:41c8dc61f38f
1 package main 1 package main
2 2
3 import ( 3 import (
4 "bytes"
5 "database/sql" 4 "database/sql"
6 "encoding/binary"
7 "math"
8 )
9 5
10 const ( 6 "gemma.intevation.de/gemma/pkg/octree"
11 wkbNDR byte = 1
12 wkbPointZ uint32 = 1000 + 1
13 wkbLineStringZ uint32 = 1000 + 2
14 wkbMultiLineStringZ uint32 = 1000 + 5
15 ) 7 )
16 8
17 type result struct { 9 type result struct {
18 h float64 10 h float64
19 lines MultiLineStringZ 11 lines octree.MultiLineStringZ
20 } 12 }
21 13
22 const insertSQL = ` 14 const insertSQL = `
23 INSERT INTO waterway.contour_lines (height, geom) 15 INSERT INTO waterway.contour_lines (height, geom)
24 VALUES ($1, ST_Transform( 16 VALUES ($1, ST_Transform(
39 if err != nil { 31 if err != nil {
40 return err 32 return err
41 } 33 }
42 34
43 for _, r := range all { 35 for _, r := range all {
44 if _, err := stmt.Exec(r.h, r.lines.asWKB(), epsg); err != nil { 36 if _, err := stmt.Exec(r.h, r.lines.AsWKB(), epsg); err != nil {
45 return err 37 return err
46 } 38 }
47 } 39 }
48 40
49 return tx.Commit() 41 return tx.Commit()
50 }) 42 })
51 } 43 }
52
53 func (mls MultiLineStringZ) asWKB() []byte {
54
55 var buf bytes.Buffer
56
57 binary.Write(&buf, binary.LittleEndian, wkbNDR)
58 binary.Write(&buf, binary.LittleEndian, wkbMultiLineStringZ)
59 binary.Write(&buf, binary.LittleEndian, uint32(len(mls)))
60
61 for _, ml := range mls {
62 binary.Write(&buf, binary.LittleEndian, wkbNDR)
63 binary.Write(&buf, binary.LittleEndian, wkbLineStringZ)
64 binary.Write(&buf, binary.LittleEndian, uint32(len(ml)))
65 for _, p := range ml {
66 binary.Write(&buf, binary.LittleEndian, math.Float64bits(p.x))
67 binary.Write(&buf, binary.LittleEndian, math.Float64bits(p.y))
68 binary.Write(&buf, binary.LittleEndian, math.Float64bits(p.z))
69 }
70 }
71
72 return buf.Bytes()
73 }