# HG changeset patch # User Sascha L. Teichmann # Date 1536940973 -7200 # Node ID 288c496eca265d46cd9bb6db7b6e9db33cc4c075 # Parent 40d3b697ea154f213c46955c44bc65455d3679eb Cross sections: Simplified joining segments code a bit and moved timing into controller. diff -r 40d3b697ea15 -r 288c496eca26 pkg/controllers/cross.go --- 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], diff -r 40d3b697ea15 -r 288c496eca26 pkg/models/cross.go --- 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 } */