comparison pkg/imports/wkb.go @ 2471:63475c8e710e octree-diff

Moved WKB constants to own package.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 26 Feb 2019 11:34:15 +0100
parents f54ac71db1ac
children 8b75ac5e243e
comparison
equal deleted inserted replaced
2470:5bd3236f2b1f 2471:63475c8e710e
18 "encoding/binary" 18 "encoding/binary"
19 "fmt" 19 "fmt"
20 "math" 20 "math"
21 21
22 shp "github.com/jonas-p/go-shp" 22 shp "github.com/jonas-p/go-shp"
23
24 "gemma.intevation.de/gemma/pkg/wkb"
23 ) 25 )
24 26
25 type ( 27 type (
26 pointSlice []float64 28 pointSlice []float64
27 lineSlice [][]float64 29 lineSlice [][]float64
28 polygonSlice [][][]float64 30 polygonSlice [][][]float64
29 ) 31 )
30 32
31 const (
32 wkbNDR byte = 1
33
34 wkbPoint uint32 = 1
35 wkbLineString uint32 = 2
36 wkbPolygon uint32 = 3
37 )
38
39 func (l lineSlice) asWKB() []byte { 33 func (l lineSlice) asWKB() []byte {
40 34
41 size := 1 + 4 + 4 + len(l)*(2*8) 35 size := 1 + 4 + 4 + len(l)*(2*8)
42 36
43 buf := bytes.NewBuffer(make([]byte, 0, size)) 37 buf := bytes.NewBuffer(make([]byte, 0, size))
44 38
45 binary.Write(buf, binary.LittleEndian, wkbNDR) 39 binary.Write(buf, binary.LittleEndian, wkb.NDR)
46 binary.Write(buf, binary.LittleEndian, wkbLineString) 40 binary.Write(buf, binary.LittleEndian, wkb.LineString)
47 binary.Write(buf, binary.LittleEndian, uint32(len(l))) 41 binary.Write(buf, binary.LittleEndian, uint32(len(l)))
48 42
49 for _, c := range l { 43 for _, c := range l {
50 var lat, lon float64 44 var lat, lon float64
51 if len(c) > 0 { 45 if len(c) > 0 {
65 59
66 size := 1 + 4 + 2*8 60 size := 1 + 4 + 2*8
67 61
68 buf := bytes.NewBuffer(make([]byte, 0, size)) 62 buf := bytes.NewBuffer(make([]byte, 0, size))
69 63
70 binary.Write(buf, binary.LittleEndian, wkbNDR) 64 binary.Write(buf, binary.LittleEndian, wkb.NDR)
71 binary.Write(buf, binary.LittleEndian, wkbPoint) 65 binary.Write(buf, binary.LittleEndian, wkb.Point)
72 66
73 var lat, lon float64 67 var lat, lon float64
74 if len(p) > 0 { 68 if len(p) > 0 {
75 lat = p[0] 69 lat = p[0]
76 } 70 }
93 size += 4 + len(ring)*2*8 87 size += 4 + len(ring)*2*8
94 } 88 }
95 89
96 buf := bytes.NewBuffer(make([]byte, 0, size)) 90 buf := bytes.NewBuffer(make([]byte, 0, size))
97 91
98 binary.Write(buf, binary.LittleEndian, wkbNDR) 92 binary.Write(buf, binary.LittleEndian, wkb.NDR)
99 binary.Write(buf, binary.LittleEndian, wkbPolygon) 93 binary.Write(buf, binary.LittleEndian, wkb.Polygon)
100 binary.Write(buf, binary.LittleEndian, uint32(len(p))) 94 binary.Write(buf, binary.LittleEndian, uint32(len(p)))
101 95
102 for _, ring := range p { 96 for _, ring := range p {
103 binary.Write(buf, binary.LittleEndian, uint32(len(ring))) 97 binary.Write(buf, binary.LittleEndian, uint32(len(ring)))
104 for _, v := range ring { 98 for _, v := range ring {