Mercurial > gemma
comparison pkg/octree/vertex.go @ 926:9e210b00ace9 geo-style
Merged default into geo-style branch.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 08 Oct 2018 10:54:50 +0200 |
parents | 15bf101e1522 |
children | 0a0013fbda4a |
comparison
equal
deleted
inserted
replaced
915:2ebf677fc2e1 | 926:9e210b00ace9 |
---|---|
37 } | 37 } |
38 ) | 38 ) |
39 | 39 |
40 const ( | 40 const ( |
41 wkbNDR byte = 1 | 41 wkbNDR byte = 1 |
42 wkbLineString uint32 = 2 | |
42 wkbLineStringZ uint32 = 1000 + 2 | 43 wkbLineStringZ uint32 = 1000 + 2 |
44 wkbMultiLineString uint32 = 5 | |
43 wkbMultiLineStringZ uint32 = 1000 + 5 | 45 wkbMultiLineStringZ uint32 = 1000 + 5 |
44 ) | 46 ) |
45 | 47 |
46 func (v *Vertex) Minimize(w Vertex) { | 48 func (v *Vertex) Minimize(w Vertex) { |
47 if w.X < v.X { | 49 if w.X < v.X { |
292 return nil | 294 return nil |
293 } | 295 } |
294 | 296 |
295 func (mls MultiLineStringZ) AsWKB() []byte { | 297 func (mls MultiLineStringZ) AsWKB() []byte { |
296 | 298 |
297 var buf bytes.Buffer | 299 // pre-calculate size to avoid reallocations. |
298 | 300 size := 1 + 4 + 4 |
299 binary.Write(&buf, binary.LittleEndian, wkbNDR) | |
300 binary.Write(&buf, binary.LittleEndian, wkbMultiLineStringZ) | |
301 binary.Write(&buf, binary.LittleEndian, uint32(len(mls))) | |
302 | |
303 for _, ml := range mls { | 301 for _, ml := range mls { |
304 binary.Write(&buf, binary.LittleEndian, wkbNDR) | 302 size += 1 + 4 + 4 + len(ml)*3*8 |
305 binary.Write(&buf, binary.LittleEndian, wkbLineStringZ) | 303 } |
306 binary.Write(&buf, binary.LittleEndian, uint32(len(ml))) | 304 |
305 buf := bytes.NewBuffer(make([]byte, 0, size)) | |
306 | |
307 binary.Write(buf, binary.LittleEndian, wkbNDR) | |
308 binary.Write(buf, binary.LittleEndian, wkbMultiLineStringZ) | |
309 binary.Write(buf, binary.LittleEndian, uint32(len(mls))) | |
310 | |
311 for _, ml := range mls { | |
312 binary.Write(buf, binary.LittleEndian, wkbNDR) | |
313 binary.Write(buf, binary.LittleEndian, wkbLineStringZ) | |
314 binary.Write(buf, binary.LittleEndian, uint32(len(ml))) | |
307 for _, p := range ml { | 315 for _, p := range ml { |
308 binary.Write(&buf, binary.LittleEndian, math.Float64bits(p.X)) | 316 binary.Write(buf, binary.LittleEndian, math.Float64bits(p.X)) |
309 binary.Write(&buf, binary.LittleEndian, math.Float64bits(p.Y)) | 317 binary.Write(buf, binary.LittleEndian, math.Float64bits(p.Y)) |
310 binary.Write(&buf, binary.LittleEndian, math.Float64bits(p.Z)) | 318 binary.Write(buf, binary.LittleEndian, math.Float64bits(p.Z)) |
319 } | |
320 } | |
321 | |
322 return buf.Bytes() | |
323 } | |
324 | |
325 func (mls MultiLineStringZ) AsWKB2D() []byte { | |
326 | |
327 // pre-calculate size to avoid reallocations. | |
328 size := 1 + 4 + 4 | |
329 for _, ml := range mls { | |
330 size += 1 + 4 + 4 + len(ml)*2*8 | |
331 } | |
332 | |
333 buf := bytes.NewBuffer(make([]byte, 0, size)) | |
334 | |
335 binary.Write(buf, binary.LittleEndian, wkbNDR) | |
336 binary.Write(buf, binary.LittleEndian, wkbMultiLineString) | |
337 binary.Write(buf, binary.LittleEndian, uint32(len(mls))) | |
338 | |
339 for _, ml := range mls { | |
340 binary.Write(buf, binary.LittleEndian, wkbNDR) | |
341 binary.Write(buf, binary.LittleEndian, wkbLineString) | |
342 binary.Write(buf, binary.LittleEndian, uint32(len(ml))) | |
343 for _, p := range ml { | |
344 binary.Write(buf, binary.LittleEndian, math.Float64bits(p.X)) | |
345 binary.Write(buf, binary.LittleEndian, math.Float64bits(p.Y)) | |
311 } | 346 } |
312 } | 347 } |
313 | 348 |
314 return buf.Bytes() | 349 return buf.Bytes() |
315 } | 350 } |