Mercurial > gemma
view pkg/wkb/data.go @ 4296:95786a675d70
WIP: Started with downloading stretches as ESRI shapes.
GET /api/data/stretch/shape/{stretch}
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Fri, 30 Aug 2019 18:34:27 +0200 |
parents | |
children | 8b730ee6f17b |
line wrap: on
line source
// This is Free Software under GNU Affero General Public License v >= 3.0 // without warranty, see README.md and license for details. // // SPDX-License-Identifier: AGPL-3.0-or-later // License-Filename: LICENSES/AGPL-3.0.txt // // Copyright (C) 2019 by via donau // – Österreichische Wasserstraßen-Gesellschaft mbH // Software engineering by Intevation GmbH // // Author(s): // * Sascha L. Teichmann <sascha.teichmann@intevation.de> package wkb import ( "bytes" "encoding/binary" "fmt" "log" ) type ( PointGeom struct { X float64 Y float64 } LinearRingGeom []PointGeom PolygonGeom []LinearRingGeom MultiPolygonGeom []PolygonGeom ) func (mpg *MultiPolygonGeom) FromWKB(data []byte) error { r := bytes.NewReader(data) endian, err := r.ReadByte() var order binary.ByteOrder switch { case err != nil: return err case endian == NDR: order = binary.LittleEndian case endian == XDR: order = binary.BigEndian default: return fmt.Errorf("unknown byte order %x", endian) } var geomType uint32 err = binary.Read(r, order, &geomType) switch { case err != nil: return err case geomType != MultiPolygon: return fmt.Errorf("unknown geometry type %x", geomType) } var numPolygons int32 if err := binary.Read(r, order, &numPolygons); err != nil { return err } log.Printf("info: num polygons: %d\n", numPolygons) polygons := make([]PolygonGeom, numPolygons) // TODO: Parse the polygons. *mpg = polygons return nil }