Mercurial > gemma
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]...) |