Mercurial > gemma
view cmd/octree2contour/store.go @ 920:862cc5ba4d1d
Merge contour lines
Lines have been stored as multilinestrings comprised of adjacent
2-vertex linestrings. Merging these to longer linestrings will
allow further processing such as simplification.
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Thu, 04 Oct 2018 17:46:59 +0200 |
parents | 271561dce2e6 |
children | 52cb0b82b490 |
line wrap: on
line source
package main import ( "database/sql" "time" "gemma.intevation.de/gemma/pkg/octree" ) type result struct { h float64 lines octree.MultiLineStringZ } const ( deleteSQL = ` DELETE FROM waterway.sounding_results_contour_lines WHERE sounding_result_id IN (SELECT id FROM waterway.sounding_results WHERE bottleneck_id = $1 AND date_info = $2) ` insertSQL = ` INSERT INTO waterway.sounding_results_contour_lines (sounding_result_id, height, lines) SELECT sr.id, $1, ST_Transform( ST_Multi( ST_CollectionExtract( ST_Intersection( ST_Transform(sr.area::geometry, $3::integer), ST_LineMerge(ST_Force2D(ST_GeomFromWKB($2, $3::integer))) ), 2 ) ), 4326 ) FROM waterway.sounding_results sr WHERE bottleneck_id = $4 AND date_info = $5 ` ) func store( all []result, epsg uint32, bottleneck string, date time.Time, ) error { return run(func(db *sql.DB) error { tx, err := db.Begin() if err != nil { return err } defer tx.Rollback() if _, err := tx.Exec(deleteSQL, bottleneck, date); err != nil { return err } stmt, err := tx.Prepare(insertSQL) if err != nil { return err } for _, r := range all { if _, err := stmt.Exec( r.h, r.lines.AsWKB(), epsg, bottleneck, date, ); err != nil { return err } } return tx.Commit() }) }