Mercurial > gemma
comparison pkg/imports/sr.go @ 3651:c368a9a20478 single-beam
Tried to fix invalid new boundary polygon with ST_MakeValid() ... and failed.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 13 Jun 2019 16:04:46 +0200 |
parents | 01ce3ba9b0d0 |
children | f415c5ed60f6 |
comparison
equal
deleted
inserted
replaced
3650:01ce3ba9b0d0 | 3651:c368a9a20478 |
---|---|
126 $3, | 126 $3, |
127 (SELECT | 127 (SELECT |
128 CASE WHEN $5::bytea IS NULL THEN | 128 CASE WHEN $5::bytea IS NULL THEN |
129 ST_Transform(ST_ConcaveHull(ST_Force2D(ST_GeomFromWKB($4, $6::integer)), 0.7), 4326)::geography | 129 ST_Transform(ST_ConcaveHull(ST_Force2D(ST_GeomFromWKB($4, $6::integer)), 0.7), 4326)::geography |
130 ELSE | 130 ELSE |
131 ST_Transform(ST_MakeValid(ST_GeomFromWKB($5, $6::integer)), 4326)::geography | 131 ST_Transform(ST_GeomFromWKB($5, $6::integer), 4326)::geography |
132 END) | 132 END) |
133 RETURNING | 133 RETURNING |
134 id, | 134 id, |
135 ST_X(ST_Centroid(area::geometry)), | 135 ST_X(ST_Centroid(area::geometry)), |
136 ST_Y(ST_Centroid(area::geometry)), | 136 ST_Y(ST_Centroid(area::geometry)), |
143 ` | 143 ` |
144 insertOctreeSQL = ` | 144 insertOctreeSQL = ` |
145 UPDATE waterway.sounding_results SET | 145 UPDATE waterway.sounding_results SET |
146 octree_checksum = $2, octree_index = $3 | 146 octree_checksum = $2, octree_index = $3 |
147 WHERE id = $1` | 147 WHERE id = $1` |
148 | |
149 repairBoundarySQL = ` | |
150 SELECT | |
151 ST_AsBinary(ST_Buffer(ST_MakeValid(ST_GeomFromWKB($1, $2::integer)), 0.0)), | |
152 ST_AsBinary(ST_Buffer(ST_MakeValid(ST_GeomFromWKB($1, $2::integer)), 0.1))` | |
148 | 153 |
149 insertContourSQL = ` | 154 insertContourSQL = ` |
150 INSERT INTO waterway.sounding_results_contour_lines ( | 155 INSERT INTO waterway.sounding_results_contour_lines ( |
151 sounding_result_id, | 156 sounding_result_id, |
152 height, | 157 height, |
379 if polygonArea < 0.0 { // counter clockwise | 384 if polygonArea < 0.0 { // counter clockwise |
380 polygonArea = -polygonArea | 385 polygonArea = -polygonArea |
381 polygon.Reverse() | 386 polygon.Reverse() |
382 } | 387 } |
383 | 388 |
389 clippingPolygon.FromLineStringZ(polygon) | |
390 | |
391 var repaired, buffered []byte | |
392 | |
393 if err := tx.QueryRowContext( | |
394 ctx, | |
395 repairBoundarySQL, | |
396 clippingPolygon.AsWKB(), | |
397 epsg, | |
398 ).Scan(&repaired, &buffered); err != nil { | |
399 return nil, err | |
400 } | |
401 | |
402 if err := clippingPolygon.FromWKB(repaired); err != nil { | |
403 return nil, err | |
404 } | |
405 var clippingPolygonBuffered octree.Polygon | |
406 if err := clippingPolygonBuffered.FromWKB(buffered); err != nil { | |
407 return nil, err | |
408 } | |
409 | |
384 firstTin := tri.Tin() | 410 firstTin := tri.Tin() |
385 builder := octree.NewBuilder(firstTin) | 411 builder := octree.NewBuilder(firstTin) |
386 builder.Build(removed) | 412 builder.Build(removed) |
387 | 413 |
388 firstTree := builder.Tree() | 414 firstTree := builder.Tree() |
479 | 505 |
480 secondTin := tri.Tin() | 506 secondTin := tri.Tin() |
481 | 507 |
482 //polygon.Buffer(1.0) | 508 //polygon.Buffer(1.0) |
483 | 509 |
484 clippingPolygon.FromLineStringZ(polygon) | 510 clippingPolygonBuffered.Indexify() |
485 clippingPolygon.Indexify() | |
486 | 511 |
487 var str octree.STRTree | 512 var str octree.STRTree |
488 str.Build(secondTin) | 513 str.Build(secondTin) |
489 log.Printf("Building STR tree took %v", time.Since(start)) | 514 log.Printf("Building STR tree took %v", time.Since(start)) |
490 | 515 |
491 start = time.Now() | 516 start = time.Now() |
492 | 517 |
493 removed = str.Clip(&clippingPolygon) | 518 removed = str.Clip(&clippingPolygonBuffered) |
494 log.Printf("Clipping STR tree took %v.", time.Since(start)) | 519 log.Printf("Clipping STR tree took %v.", time.Since(start)) |
495 log.Printf("Number of triangles to clip %d.", len(removed)) | 520 log.Printf("Number of triangles to clip %d.", len(removed)) |
496 | 521 |
497 start = time.Now() | 522 start = time.Now() |
498 | 523 |
519 insertHullSQL, | 544 insertHullSQL, |
520 m.Bottleneck, | 545 m.Bottleneck, |
521 m.Date.Time, | 546 m.Date.Time, |
522 m.DepthReference, | 547 m.DepthReference, |
523 nil, | 548 nil, |
524 clippingPolygon.AsWKB(), | 549 repaired, |
525 m.EPSG, | 550 m.EPSG, |
526 ).Scan( | 551 ).Scan( |
527 &id, | 552 &id, |
528 &lat, | 553 &lat, |
529 &lon, | 554 &lon, |