changeset 658:288c496eca26

Cross sections: Simplified joining segments code a bit and moved timing into controller.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 14 Sep 2018 18:02:53 +0200
parents 40d3b697ea15
children ef658c66cfca
files pkg/controllers/cross.go pkg/models/cross.go
diffstat 2 files changed, 19 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/controllers/cross.go	Fri Sep 14 17:45:42 2018 +0200
+++ b/pkg/controllers/cross.go	Fri Sep 14 18:02:53 2018 +0200
@@ -35,17 +35,16 @@
 
 	csi := input.(*models.CrossSectionInput)
 
-	var rows *sql.Rows
-
 	start := time.Now()
 
-	rows, err = db.QueryContext(
+	var rows *sql.Rows
+	if rows, err = db.QueryContext(
 		req.Context(),
 		crossSQL,
 		csi.Geometry.Coordinates.AsWKB(),
 		csi.Properties.Bottleneck,
-		csi.Properties.Date.Time)
-	if err != nil {
+		csi.Properties.Date.Time,
+	); err != nil {
 		return
 	}
 	defer rows.Close()
@@ -64,10 +63,15 @@
 		return
 	}
 
-	log.Printf("query took %v\n", time.Since(start))
+	log.Printf("query took: %v\n", time.Since(start))
+
+	start = time.Now()
 
 	joined := segments.Join()
 
+	log.Printf("joining took: %v\n", time.Since(start))
+	log.Printf("segments before/after: %d %d\n", len(segments), len(joined))
+
 	/*
 		if err2 := dumpProfile(
 			csi.Geometry.Coordinates[0],
--- a/pkg/models/cross.go	Fri Sep 14 17:45:42 2018 +0200
+++ b/pkg/models/cross.go	Fri Sep 14 18:02:53 2018 +0200
@@ -6,7 +6,6 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	"log"
 	"math"
 	"sort"
 	"time"
@@ -288,8 +287,6 @@
 		return ml
 	}
 
-	start := time.Now()
-
 	type value struct {
 		coords GeoJSONLineCoordinatesZ
 		order  int
@@ -309,19 +306,16 @@
 	}
 
 again:
-	for {
-		for k, v1 := range heads {
-			key := v1.coords[len(v1.coords)-1].quant()
-			if k == key { // cycle detected
-				continue
-			}
-			if v2 := heads[key]; v2 != nil {
-				delete(heads, key)
-				v1.coords = v1.coords.join(v2.coords)
-				continue again
-			}
+	for k, v1 := range heads {
+		key := v1.coords[len(v1.coords)-1].quant()
+		if k == key { // cycle detected
+			continue
 		}
-		break
+		if v2 := heads[key]; v2 != nil {
+			delete(heads, key)
+			v1.coords = v1.coords.join(v2.coords)
+			goto again
+		}
 	}
 
 	// To make it deterministic sort in input order.
@@ -338,9 +332,6 @@
 		out[i] = v.coords
 	}
 
-	log.Printf("joining took: %s\n", time.Since(start))
-	log.Printf("segments before/after: %d %d\n", len(ml), len(out))
-
 	return out
 }
 
@@ -351,8 +342,6 @@
 		return ml
 	}
 
-	start := time.Now()
-
 	lists := make(GeoJSONMultiLineCoordinatesZ, len(ml))
 	copy(lists, ml)
 
@@ -384,9 +373,6 @@
 		j++
 	}
 
-	log.Printf("joining took: %s\n", time.Since(start))
-	log.Printf("segments before/after: %d %d\n", len(ml), len(lists))
-
 	return lists
 }
 */