comparison pkg/imports/sr.go @ 3882:37d5c4441c70

Use custom morpho class breaks in sounding result contour generation.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 10 Jul 2019 11:45:55 +0200
parents 98d5dd2f0ca1
children 4b5c4007fc5d
comparison
equal deleted inserted replaced
3881:7db6999962db 3882:37d5c4441c70
612 } 612 }
613 feedback.Info("Storing octree index took %s.", time.Since(start)) 613 feedback.Info("Storing octree index took %s.", time.Since(start))
614 feedback.Info("Generate contour lines") 614 feedback.Info("Generate contour lines")
615 615
616 start = time.Now() 616 start = time.Now()
617 err = generateContours(ctx, tx, builder.Tree(), id) 617 err = generateContours(ctx, tx, feedback, builder.Tree(), id)
618 if err != nil { 618 if err != nil {
619 return nil, err 619 return nil, err
620 } 620 }
621 feedback.Info("Generating contour lines took %s.", 621 feedback.Info("Generating contour lines took %s.",
622 time.Since(start)) 622 time.Since(start))
815 } 815 }
816 816
817 func generateContours( 817 func generateContours(
818 ctx context.Context, 818 ctx context.Context,
819 tx *sql.Tx, 819 tx *sql.Tx,
820 feedback Feedback,
820 tree *octree.Tree, 821 tree *octree.Tree,
821 id int64, 822 id int64,
822 ) error { 823 ) error {
823 stmt, err := tx.PrepareContext(ctx, insertContourSQL) 824 stmt, err := tx.PrepareContext(ctx, insertContourSQL)
824 if err != nil { 825 if err != nil {
825 return err 826 return err
826 } 827 }
827 defer stmt.Close() 828 defer stmt.Close()
828 829
829 // Adjust contour lines heights to multiples of contourStepWidth 830 heights, err := octree.LoadClassBreaks(
830 var heights []float64 831 ctx, tx,
831 h := contourStepWidth * math.Ceil(tree.Min.Z/contourStepWidth) 832 "morphology_classbreaks",
832 for ; h <= tree.Max.Z; h += contourStepWidth { 833 )
833 heights = append(heights, h) 834 if err != nil {
834 } 835 feedback.Warn("Loading class breaks failed: %v", err)
836 feedback.Info("Using default class breaks")
837 heights = nil
838 h := contourStepWidth * math.Ceil(tree.Min.Z/contourStepWidth)
839 for ; h <= tree.Max.Z; h += contourStepWidth {
840 heights = append(heights, h)
841 }
842 } else {
843 heights = octree.ExtrapolateClassBreaks(heights, tree.Min.Z, tree.Max.Z)
844 heights = octree.InBetweenClassBreaks(heights, 0.05, 2)
845 }
846
847 /*
848 for i, v := range heights {
849 fmt.Printf("%d %.2f\n", i, v)
850 }
851 log.Printf("%.2f - %.2f\n", tree.Min.Z, tree.Max.Z)
852 */
835 853
836 octree.DoContours(tree, heights, func(res *octree.ContourResult) { 854 octree.DoContours(tree, heights, func(res *octree.ContourResult) {
837 if err == nil && len(res.Lines) > 0 { 855 if err == nil && len(res.Lines) > 0 {
838 _, err = stmt.ExecContext( 856 _, err = stmt.ExecContext(
839 ctx, 857 ctx,