changeset 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 ee4c47c3e7b2
files pkg/imports/stsh.go pkg/wkb/data.go
diffstat 2 files changed, 38 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/imports/stsh.go	Tue Sep 03 16:54:33 2019 +0200
+++ b/pkg/imports/stsh.go	Tue Sep 03 17:12:07 2019 +0200
@@ -123,7 +123,9 @@
 		// Convert to a multi polygon.
 		mp := poly.MultiPolygonGeom()
 
-		_ = mp
+		wkb := mp.AsWKB()
+
+		_ = wkb
 
 		for k, f := range fields {
 			name := f.String()
--- 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)