comparison pkg/wkb/data.go @ 5601:1222b777f51f

Made golint finally happy.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sat, 06 Aug 2022 02:09:57 +0200
parents 0ddb308fed37
children 2dd155cc95ec
comparison
equal deleted inserted replaced
5600:9967a78e43f4 5601:1222b777f51f
19 "fmt" 19 "fmt"
20 "math" 20 "math"
21 ) 21 )
22 22
23 type ( 23 type (
24 // PointGeom is a 2D point,
24 PointGeom struct { 25 PointGeom struct {
25 X float64 26 X float64
26 Y float64 27 Y float64
27 } 28 }
28 LinearRingGeom []PointGeom 29 // LinearRingGeom is a ring of points.
29 PolygonGeom []LinearRingGeom 30 LinearRingGeom []PointGeom
31 // PolygonGeom is a polygon.
32 PolygonGeom []LinearRingGeom
33 // MultiPolygonGeom is a multi polygon.
30 MultiPolygonGeom []PolygonGeom 34 MultiPolygonGeom []PolygonGeom
31 ) 35 )
32 36
37 // AsWKB serializes a multi polygon as WKB.
33 func (mpg MultiPolygonGeom) AsWKB() []byte { 38 func (mpg MultiPolygonGeom) AsWKB() []byte {
34 39
35 size := 1 + 4 + 4 40 size := 1 + 4 + 4
36 for _, pg := range mpg { 41 for _, pg := range mpg {
37 size += 1 + 4 + 4 42 size += 1 + 4 + 4
63 } 68 }
64 69
65 return buf.Bytes() 70 return buf.Bytes()
66 } 71 }
67 72
73 // FromWKB deserializes a multi polygon from WKB.
68 func (mpg *MultiPolygonGeom) FromWKB(data []byte) error { 74 func (mpg *MultiPolygonGeom) FromWKB(data []byte) error {
69 r := bytes.NewReader(data) 75 r := bytes.NewReader(data)
70 76
71 var order binary.ByteOrder 77 var order binary.ByteOrder
72 78
150 156
151 *mpg = polygons 157 *mpg = polygons
152 return nil 158 return nil
153 } 159 }
154 160
161 // CCW tells if the ring is oriented counter clock wise.
155 func (lr LinearRingGeom) CCW() bool { 162 func (lr LinearRingGeom) CCW() bool {
156 var sum float64 163 var sum float64
157 for i, v1 := range lr { 164 for i, v1 := range lr {
158 v2 := lr[(i+1)%len(lr)] 165 v2 := lr[(i+1)%len(lr)]
159 sum += (v2.X - v1.X) * (v2.Y + v1.Y) 166 sum += (v2.X - v1.X) * (v2.Y + v1.Y)
160 } 167 }
161 return sum > 0 168 return sum > 0
162 } 169 }
163 170
171 // Reverse changes the orientation of the ring.
164 func (lr LinearRingGeom) Reverse() { 172 func (lr LinearRingGeom) Reverse() {
165 for i, j := 0, len(lr)-1; i < j; i, j = i+1, j-1 { 173 for i, j := 0, len(lr)-1; i < j; i, j = i+1, j-1 {
166 lr[i], lr[j] = lr[j], lr[i] 174 lr[i], lr[j] = lr[j], lr[i]
167 } 175 }
168 } 176 }