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