view cmd/octree2contour/store.go @ 904:e4b72a199258

New default bottleneck colors Mainly to make the stroke color one actually selectable in the ui. In addition the pink does better match the collors used on the ECDIS layer.
author Sascha Wilde <wilde@intevation.de>
date Tue, 02 Oct 2018 13:34:59 +0200
parents fb9faf2c4f60
children 271561dce2e6
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_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
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()
	})
}