diff cmd/octreediff/main.go @ 2488:cb55d7eaaa36 octree-diff

Started with the idea to clip an octree by an bounding polygon.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sun, 03 Mar 2019 14:45:41 +0100
parents 4fa92d468164
children 12ed6feefea5
line wrap: on
line diff
--- a/cmd/octreediff/main.go	Sun Mar 03 13:00:50 2019 +0100
+++ b/cmd/octreediff/main.go	Sun Mar 03 14:45:41 2019 +0100
@@ -65,6 +65,23 @@
     4326
   )
 `
+	clippingPolygonSQL = `
+WITH joined AS (
+  SELECT
+    sr.area      AS area,
+    sr.date_info AS date_info
+  FROM waterway.sounding_results sr JOIN
+     waterway.bottlenecks bn ON sr.bottleneck_id = bn.id
+  WHERE bn.bottleneck_id = $1
+)
+SELECT ST_AsBinary(
+  ST_Buffer(
+  ST_intersection(
+    (SELECT ST_Transform(area::geometry, $2::int) FROM joined WHERE date_info = $3::date),
+    (SELECT ST_Transform(area::geometry, $2::int) FROM joined WHERE date_info = $4::date)
+  ),
+  0.001)) AS area
+`
 	insertContourSQLClipped = `
 WITH joined AS (
   SELECT
@@ -347,6 +364,21 @@
 		last = now
 		log.Printf("num points: %d\n", len(result))
 
+		var clip []byte
+
+		if err := tx.QueryRowContext(
+			ctx, clippingPolygonSQL,
+			bottleneck,
+			first.EPSG,
+			firstDate, secondDate,
+		).Scan(&clip); err != nil {
+			return err
+		}
+
+		now = time.Now()
+		log.Printf("loading clipping polygon took %v\n", now.Sub(last))
+		last = now
+
 		tri, err := result.triangulate()
 		if err != nil {
 			return err