comparison pkg/imports/sr.go @ 5419:202715173935 marking-single-beam

Do clipping correctly.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 07 Jul 2021 19:24:03 +0200
parents e89ff1894bb4
children c9da747d4109
comparison
equal deleted inserted replaced
5418:e89ff1894bb4 5419:202715173935
640 start = time.Now() 640 start = time.Now()
641 final.BuildWithout(tin, removed) 641 final.BuildWithout(tin, removed)
642 642
643 feedback.Info("Building final mesh took %v.", time.Since(start)) 643 feedback.Info("Building final mesh took %v.", time.Since(start))
644 feedback.Info("Store mesh.") 644 feedback.Info("Store mesh.")
645 } else {
646 start = time.Now()
647 clippingPolygonBuffered.Indexify()
648 removed = make(map[int32]struct{})
649 for i, v := range xyz {
650 if clippingPolygonBuffered.IntersectionBox2D(v.Box2D()) == mesh.IntersectionOutSide {
651 removed[int32(i)] = struct{}{}
652 }
653 }
654 feedback.Info("Clipping took %v.", time.Since(start))
655 feedback.Info("Number of points to clip %d.", len(removed))
645 } 656 }
646 657
647 start = time.Now() 658 start = time.Now()
648 659
649 var ( 660 var (
700 return nil, err 711 return nil, err
701 } 712 }
702 } else { // SurveyTypeMarking 713 } else { // SurveyTypeMarking
703 if err := generateMarkingPoints( 714 if err := generateMarkingPoints(
704 ctx, tx, feedback, 715 ctx, tx, feedback,
705 xyz, epsg, 716 xyz, removed, epsg,
706 id, 717 id,
707 ); err != nil { 718 ); err != nil {
708 return nil, err 719 return nil, err
709 } 720 }
710 } 721 }
951 func generateMarkingPoints( 962 func generateMarkingPoints(
952 ctx context.Context, 963 ctx context.Context,
953 tx *sql.Tx, 964 tx *sql.Tx,
954 feedback Feedback, 965 feedback Feedback,
955 xyz mesh.MultiPointZ, 966 xyz mesh.MultiPointZ,
967 removed map[int32]struct{},
956 epsg uint32, 968 epsg uint32,
957 id int64, 969 id int64,
958 ) error { 970 ) error {
959 log.Printf("debug: generateMarkingPoints") 971 log.Printf("debug: generateMarkingPoints")
960 972
961 min, max := mesh.MinMaxVertex(xyz.All()) 973 min, max := mesh.MinMaxVertex(xyz.FilterRemoved(removed))
962 974
963 log.Printf("debug: min/max %.2f/%.2f\n", min.Z, max.Z) 975 log.Printf("debug: min/max %.2f/%.2f\n", min.Z, max.Z)
964 976
965 heights := loadClassBreaks(ctx, tx, feedback, min.Z, max.Z) 977 heights := loadClassBreaks(ctx, tx, feedback, min.Z, max.Z)
966 978
967 classes := heights.Classify(xyz.All()) 979 classes := heights.Classify(xyz.FilterRemoved(removed))
968 980
969 // Should not happen ... Z values over the top. 981 // Should not happen ... Z values over the top.
970 if n := len(classes) - 1; n > 1 && len(classes[n]) > 0 { 982 if n := len(classes) - 1; n > 1 && len(classes[n]) > 0 {
971 // Place the over the top values to the class below. 983 // Place the over the top values to the class below.
972 classes[n-1] = append(classes[n-1], classes[n]...) 984 classes[n-1] = append(classes[n-1], classes[n]...)