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