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