Mercurial > gemma
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)