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()
+}