diff pkg/wkb/data.go @ 4314:c3b5cf2f200a

shape upload stretch import: Converted multi polygon to WKB.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 03 Sep 2019 17:12:07 +0200
parents 5da02dcc51f6
children 3d6a2c6b436c
line wrap: on
line diff
--- a/pkg/wkb/data.go	Tue Sep 03 16:54:33 2019 +0200
+++ b/pkg/wkb/data.go	Tue Sep 03 17:12:07 2019 +0200
@@ -30,6 +30,41 @@
 	MultiPolygonGeom []PolygonGeom
 )
 
+func (mpg MultiPolygonGeom) AsWKB() []byte {
+
+	size := 1 + 1 + 4
+	for _, pg := range mpg {
+		size += 1 + 4
+		for _, r := range pg {
+			size += 1 + 4 + 2*8*len(r)
+		}
+	}
+
+	buf := bytes.NewBuffer(make([]byte, 0, size))
+
+	binary.Write(buf, binary.LittleEndian, NDR)
+	binary.Write(buf, binary.LittleEndian, MultiPolygon)
+	binary.Write(buf, binary.LittleEndian, uint32(len(mpg)))
+
+	for _, pg := range mpg {
+		binary.Write(buf, binary.LittleEndian, NDR)
+		binary.Write(buf, binary.LittleEndian, uint32(len(mpg)))
+
+		for _, r := range pg {
+			binary.Write(buf, binary.LittleEndian, NDR)
+			binary.Write(buf, binary.LittleEndian, uint32(len(r)))
+			for _, p := range r {
+				x := math.Float64bits(p.X)
+				y := math.Float64bits(p.Y)
+				binary.Write(buf, binary.LittleEndian, x)
+				binary.Write(buf, binary.LittleEndian, y)
+			}
+		}
+	}
+
+	return buf.Bytes()
+}
+
 func (mpg *MultiPolygonGeom) FromWKB(data []byte) error {
 	r := bytes.NewReader(data)