Mercurial > gemma
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, |