Mercurial > gemma
diff pkg/octree/vertex.go @ 959:6ab012d0f0c2
Started with writing an importer job for sounding results.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 16 Oct 2018 18:20:50 +0200 |
parents | be7b83638ec8 |
children | a4fe07a21ba7 |
line wrap: on
line diff
--- a/pkg/octree/vertex.go Tue Oct 16 14:59:32 2018 +0200 +++ b/pkg/octree/vertex.go Tue Oct 16 18:20:50 2018 +0200 @@ -20,6 +20,7 @@ Line [2]Vertex + MultiPointZ []Vertex LineStringZ []Vertex MultiLineStringZ []LineStringZ @@ -38,10 +39,13 @@ ) const ( - wkbNDR byte = 1 + wkbNDR byte = 1 + wkbLineString uint32 = 2 + wkbMultiLineString uint32 = 5 + wkbPointZ uint32 = 1000 + 1 wkbLineStringZ uint32 = 1000 + 2 - wkbMultiLineString uint32 = 5 + wkbMultiPointZ uint32 = 1000 + 4 wkbMultiLineStringZ uint32 = 1000 + 5 ) @@ -773,3 +777,23 @@ return out } + +func (mpz MultiPointZ) AsWKB() []byte { + size := 1 + 4 + 4 + len(mpz)*(1+4+3*8) + + buf := bytes.NewBuffer(make([]byte, 0, size)) + + binary.Write(buf, binary.LittleEndian, wkbNDR) + binary.Write(buf, binary.LittleEndian, wkbMultiPointZ) + binary.Write(buf, binary.LittleEndian, uint32(len(mpz))) + + for _, p := range mpz { + binary.Write(buf, binary.LittleEndian, wkbNDR) + binary.Write(buf, binary.LittleEndian, wkbPointZ) + binary.Write(buf, binary.LittleEndian, math.Float64bits(p.X)) + binary.Write(buf, binary.LittleEndian, math.Float64bits(p.Y)) + binary.Write(buf, binary.LittleEndian, math.Float64bits(p.Z)) + } + + return buf.Bytes() +}