# HG changeset patch # User Tom Gottfried # Date 1538673228 -7200 # Node ID 1334756abb7287825e67d5ed50bc1ad794b6ff13 # Parent 52cb0b82b490e847dbb02ca99f7d947508f43dee# Parent 054561be4d68165974b8d1a535cc2be5eee5a963 Merge diff -r 054561be4d68 -r 1334756abb72 cmd/octree2contour/main.go --- a/cmd/octree2contour/main.go Thu Oct 04 18:28:48 2018 +0200 +++ b/cmd/octree2contour/main.go Thu Oct 04 19:13:48 2018 +0200 @@ -13,7 +13,8 @@ var ( one = flag.Bool("o", false, "create only a single contour") - step = flag.Float64("s", 0.5, "step with") + step = flag.Float64("s", 0.5, "step width") + tol = flag.Float64("t", 0.1, "tolerance for simplification") max = flag.Float64("m", 10, "max height from lowest point") bottleneck = flag.String("bottleneck", "", "bottleneck id") date = flag.String("date", "", "date info") @@ -111,7 +112,7 @@ all := process(tree) log.Printf("processing took: %v\n", time.Since(start)) start = time.Now() - if err = store(all, tree.EPSG, *bottleneck, dateInfo); err != nil { + if err = store(all, tree.EPSG, *bottleneck, dateInfo, *tol); err != nil { log.Printf("error: %v\n", err) } log.Printf("storing took: %v\n", time.Since(start)) diff -r 054561be4d68 -r 1334756abb72 cmd/octree2contour/store.go --- a/cmd/octree2contour/store.go Thu Oct 04 18:28:48 2018 +0200 +++ b/cmd/octree2contour/store.go Thu Oct 04 19:13:48 2018 +0200 @@ -26,15 +26,20 @@ sr.id, $1, ST_Transform( - ST_Translate( - ST_Force3D( - ST_CollectionExtract( - ST_Force2D( - ST_Intersection( - ST_Transform(sr.area::geometry, $3::integer), - ST_SetSRID( - ST_GeomFromWKB($2), $3::integer))), 2)), 0.0, 0.0, $1::numeric), - 4326)::geography + ST_Multi( + ST_CollectionExtract( + ST_Intersection( + ST_Transform(sr.area::geometry, $3::integer), + ST_SimplifyPreserveTopology( + ST_LineMerge(ST_Force2D(ST_GeomFromWKB($2, $3::integer))), + $6 + ) + ), + 2 + ) + ), + 4326 + ) FROM waterway.sounding_results sr WHERE bottleneck_id = $4 AND date_info = $5 ` @@ -43,6 +48,7 @@ func store( all []result, epsg uint32, bottleneck string, date time.Time, + tol float64, ) error { return run(func(db *sql.DB) error { @@ -66,6 +72,7 @@ if _, err := stmt.Exec( r.h, r.lines.AsWKB(), epsg, bottleneck, date, + tol, ); err != nil { return err } diff -r 054561be4d68 -r 1334756abb72 schema/gemma.sql --- a/schema/gemma.sql Thu Oct 04 18:28:48 2018 +0200 +++ b/schema/gemma.sql Thu Oct 04 19:13:48 2018 +0200 @@ -419,7 +419,7 @@ CREATE TABLE sounding_results_contour_lines ( sounding_result_id int NOT NULL REFERENCES sounding_results, height numeric NOT NULL, - lines geography(multilinestringz, 4326) NOT NULL, + lines geography(multilinestring, 4326) NOT NULL, UNIQUE (sounding_result_id, height) ) -- A view to help geoserver serve contour lines. @@ -428,7 +428,7 @@ SELECT bottleneck_id, date_info, height, - CAST(lines AS geometry(multilinestringz, 4326)) AS lines + CAST(lines AS geometry(multilinestring, 4326)) AS lines FROM waterway.sounding_results_contour_lines cl JOIN waterway.sounding_results sr ON sr.id = cl.sounding_result_id