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 }