Mercurial > gemma
diff pkg/imports/sr.go @ 4828:39ee00d06309
Merged remove-octree-debris branch back into default.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 05 Nov 2019 14:31:22 +0100 |
parents | f4abfd0ee8ad |
children | 046a07a33b19 |
line wrap: on
line diff
--- a/pkg/imports/sr.go Tue Nov 05 13:01:08 2019 +0100 +++ b/pkg/imports/sr.go Tue Nov 05 14:31:22 2019 +0100 @@ -35,8 +35,8 @@ shp "github.com/jonas-p/go-shp" "gemma.intevation.de/gemma/pkg/common" + "gemma.intevation.de/gemma/pkg/mesh" "gemma.intevation.de/gemma/pkg/models" - "gemma.intevation.de/gemma/pkg/octree" "gemma.intevation.de/gemma/pkg/wkb" ) @@ -314,8 +314,8 @@ ldc /= 100 xform = chainTransforms( xform, - func(v octree.Vertex) octree.Vertex { - return octree.Vertex{X: v.X, Y: v.Y, Z: v.Z + ldc} + func(v mesh.Vertex) mesh.Vertex { + return mesh.Vertex{X: v.X, Y: v.Y, Z: v.Z + ldc} }) m.DepthReference = depthReference } @@ -324,7 +324,7 @@ return nil, common.ToError(err) } - var xyz octree.MultiPointZ + var xyz mesh.MultiPointZ if z != nil { // Scanning ZIP file for *.xyz file. var xyzf *zip.File @@ -392,7 +392,7 @@ feedback Feedback, importID int64, m *models.SoundingResultMeta, - xyz octree.MultiPointZ, + xyz mesh.MultiPointZ, boundary polygonSlice, ) (interface{}, error) { @@ -429,7 +429,7 @@ feedback.Info("Triangulate XYZ data.") start = time.Now() - tri, err := octree.Triangulate(xyz) + tri, err := mesh.Triangulate(xyz) if err != nil { return nil, err } @@ -437,12 +437,12 @@ feedback.Info("Number triangles: %d.", len(tri.Triangles)/3) var ( - clippingPolygon octree.Polygon - clippingPolygonBuffered octree.Polygon + clippingPolygon mesh.Polygon + clippingPolygonBuffered mesh.Polygon removed map[int32]struct{} polygonArea float64 clippingPolygonWKB []byte - tin *octree.Tin + tin *mesh.Tin ) if boundary == nil { @@ -450,7 +450,7 @@ tooLongEdge := tri.EstimateTooLong() feedback.Info("Eliminate triangles with edges longer than %.2f meters.", tooLongEdge) - var polygon octree.LineStringZ + var polygon mesh.LineStringZ start = time.Now() polygon, removed = tri.ConcaveHull(tooLongEdge) @@ -503,7 +503,7 @@ tin := tri.Tin() tin.EPSG = epsg - var str octree.STRTree + var str mesh.STRTree str.Build(tin) removed = str.Clip(&clippingPolygon) @@ -529,7 +529,7 @@ start = time.Now() tin := tri.Tin() - var virtual octree.STRTree + var virtual mesh.STRTree virtual.BuildWithout(tin, removed) feedback.Info("Building took %v", time.Since(start)) @@ -541,13 +541,13 @@ start = time.Now() - generated := make(octree.LineStringZ, 0, numPoints+clippingPolygon.NumVertices(0)) + generated := make(mesh.LineStringZ, 0, numPoints+clippingPolygon.NumVertices(0)) - octree.GenerateRandomVertices( + mesh.GenerateRandomVertices( numPoints, tin.Min, tin.Max, virtual.Value, - func(vertices []octree.Vertex) { + func(vertices []mesh.Vertex) { generated = append(generated, vertices...) }) @@ -562,15 +562,15 @@ } dupes[key] = struct{}{} if z, ok := virtual.Value(x, y); ok { - generated = append(generated, octree.Vertex{X: x, Y: y, Z: z}) + generated = append(generated, mesh.Vertex{X: x, Y: y, Z: z}) } }) feedback.Info("Triangulate new point cloud.") - xyz = octree.MultiPointZ(generated) + xyz = mesh.MultiPointZ(generated) start = time.Now() - tri, err = octree.Triangulate(xyz) + tri, err = mesh.Triangulate(xyz) if err != nil { return nil, err } @@ -585,7 +585,7 @@ tin = tri.Tin() tin.EPSG = epsg - var str octree.STRTree + var str mesh.STRTree str.Build(tin) feedback.Info("Building clipping index took %v", time.Since(start)) @@ -597,7 +597,7 @@ feedback.Info("Number of triangles to clip %d.", len(removed)) start = time.Now() - final := octree.STRTree{Entries: 16} + final := mesh.STRTree{Entries: 16} final.BuildWithout(tin, removed) feedback.Info("Building final mesh took %v.", time.Since(start)) @@ -742,20 +742,20 @@ return &m, nil } -type vertexTransform func(octree.Vertex) octree.Vertex +type vertexTransform func(mesh.Vertex) mesh.Vertex -func identityTransform(v octree.Vertex) octree.Vertex { return v } +func identityTransform(v mesh.Vertex) mesh.Vertex { return v } -func negateZTransform(v octree.Vertex) octree.Vertex { - return octree.Vertex{X: v.X, Y: v.Y, Z: -v.Z} +func negateZTransform(v mesh.Vertex) mesh.Vertex { + return mesh.Vertex{X: v.X, Y: v.Y, Z: -v.Z} } func chainTransforms(a, b vertexTransform) vertexTransform { - return func(v octree.Vertex) octree.Vertex { return b(a(v)) } + return func(v mesh.Vertex) mesh.Vertex { return b(a(v)) } } -func loadXYZReader(r io.Reader, feedback Feedback, xform vertexTransform) (octree.MultiPointZ, error) { - mpz := make(octree.MultiPointZ, 0, 250000) +func loadXYZReader(r io.Reader, feedback Feedback, xform vertexTransform) (mesh.MultiPointZ, error) { + mpz := make(mesh.MultiPointZ, 0, 250000) s := bufio.NewScanner(r) warnLimiter := common.WarningLimiter{Log: feedback.Warn, MaxWarnings: 100} @@ -764,7 +764,7 @@ for line := 1; s.Scan(); line++ { text := s.Text() - var p octree.Vertex + var p mesh.Vertex // fmt.Sscanf(text, "%f,%f,%f") is 4 times slower. idx := strings.IndexByte(text, ',') if idx == -1 { @@ -801,7 +801,7 @@ return mpz, nil } -func loadXYZ(f *zip.File, feedback Feedback, xform vertexTransform) (octree.MultiPointZ, error) { +func loadXYZ(f *zip.File, feedback Feedback, xform vertexTransform) (mesh.MultiPointZ, error) { r, err := f.Open() if err != nil { return nil, err @@ -810,7 +810,7 @@ return loadXYZReader(r, feedback, xform) } -func loadXYZFile(f string, feedback Feedback, xform vertexTransform) (octree.MultiPointZ, error) { +func loadXYZFile(f string, feedback Feedback, xform vertexTransform) (mesh.MultiPointZ, error) { r, err := os.Open(f) if err != nil { return nil, err @@ -859,11 +859,11 @@ ctx context.Context, tx *sql.Tx, feedback Feedback, - tree *octree.STRTree, + tree *mesh.STRTree, id int64, ) error { - heights, err := octree.LoadClassBreaks( + heights, err := mesh.LoadClassBreaks( ctx, tx, "morphology_classbreaks", ) @@ -879,7 +879,7 @@ heights = append(heights, h) } } else { - heights = octree.ExtrapolateClassBreaks(heights, minZ, maxZ) + heights = mesh.ExtrapolateClassBreaks(heights, minZ, maxZ) } /* @@ -898,7 +898,7 @@ ctx context.Context, tx *sql.Tx, feedback Feedback, - tree *octree.STRTree, + tree *mesh.STRTree, heights []float64, id int64, ) error { @@ -909,14 +909,14 @@ time.Since(total)) }() - box := octree.Box2D{ + box := mesh.Box2D{ X1: tree.Min().X, Y1: tree.Min().Y, X2: tree.Max().X, Y2: tree.Max().Y, } - raster := octree.NewRaster(box, isoCellSize) + raster := mesh.NewRaster(box, isoCellSize) raster.Rasterize(tree.Value) areas := raster.Trace(heights)