changeset 1786:09349ca27dd7

Imports: Removed duplicated code path to store WKB polygons into database.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sun, 13 Jan 2019 13:02:39 +0100
parents 614c6c766691
children b0bf7533deec
files pkg/imports/sr.go pkg/imports/wa.go pkg/imports/wkb.go
diffstat 3 files changed, 10 insertions(+), 41 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/imports/sr.go	Sat Jan 12 19:53:31 2019 +0100
+++ b/pkg/imports/sr.go	Sun Jan 13 13:02:39 2019 +0100
@@ -428,7 +428,7 @@
 	return loadXYZReader(r, feedback)
 }
 
-func loadBoundary(z *zip.ReadCloser) (polygon, error) {
+func loadBoundary(z *zip.ReadCloser) (polygonSlice, error) {
 	shpF := common.FindInZIP(z, ".shp")
 	if shpF == nil {
 		return nil, nil
--- a/pkg/imports/wa.go	Sat Jan 12 19:53:31 2019 +0100
+++ b/pkg/imports/wa.go	Sun Jan 13 13:02:39 2019 +0100
@@ -206,7 +206,7 @@
 
 			switch feature.Geometry.Type {
 			case "Polygon":
-				var p polygon
+				var p polygonSlice
 				if err := json.Unmarshal(*feature.Geometry.Coordinates, &p); err != nil {
 					return err
 				}
--- a/pkg/imports/wkb.go	Sat Jan 12 19:53:31 2019 +0100
+++ b/pkg/imports/wkb.go	Sun Jan 13 13:02:39 2019 +0100
@@ -25,13 +25,6 @@
 type (
 	lineSlice    [][]float64
 	polygonSlice [][][]float64
-
-	point struct {
-		X float64
-		Y float64
-	}
-	lineString []point
-	polygon    []lineString
 )
 
 const (
@@ -100,7 +93,7 @@
 	return buf.Bytes()
 }
 
-func shapeToPolygon(s shp.Shape) (polygon, error) {
+func shapeToPolygon(s shp.Shape) (polygonSlice, error) {
 	switch p := s.(type) {
 	case *shp.Polygon:
 		return toPolygon(p.NumParts, p.Parts, p.Points), nil
@@ -112,8 +105,8 @@
 	return nil, fmt.Errorf("Unsupported shape type %T", s)
 }
 
-func toPolygon(numParts int32, parts []int32, points []shp.Point) polygon {
-	out := make(polygon, numParts)
+func toPolygon(numParts int32, parts []int32, points []shp.Point) polygonSlice {
+	out := make(polygonSlice, numParts)
 	var pos int32
 
 	for i := range out {
@@ -124,39 +117,15 @@
 			howMany = parts[i+1] - parts[i]
 		}
 
-		line := make(lineString, howMany)
+		line := make([][]float64, howMany)
+		vertices := make([]float64, 2*howMany)
 		for j := int32(0); j < howMany; j, pos = j+1, pos+1 {
 			p := &points[pos]
-			line[j] = point{p.X, p.Y}
+			vertex := vertices[j*2 : j*2+2]
+			vertex[0], vertex[1] = p.X, p.Y
+			line[j] = vertex
 		}
 		out[i] = line
 	}
 	return out
 }
-
-func (p polygon) asWKB() []byte {
-	if p == nil {
-		return nil
-	}
-	// pre-calculate size to avoid reallocations.
-	size := 1 + 4 + 4
-	for _, ring := range p {
-		size += 4 + len(ring)*2*8
-	}
-
-	buf := bytes.NewBuffer(make([]byte, 0, size))
-
-	binary.Write(buf, binary.LittleEndian, wkbNDR)
-	binary.Write(buf, binary.LittleEndian, wkbPolygon)
-	binary.Write(buf, binary.LittleEndian, uint32(len(p)))
-
-	for _, ring := range p {
-		binary.Write(buf, binary.LittleEndian, uint32(len(ring)))
-		for _, v := range ring {
-			binary.Write(buf, binary.LittleEndian, math.Float64bits(v.X))
-			binary.Write(buf, binary.LittleEndian, math.Float64bits(v.Y))
-		}
-	}
-
-	return buf.Bytes()
-}