Mercurial > gemma
diff pkg/imports/sr.go @ 1392:0e1d89241cda
Imports: An Import (e.g. a sounding result import) can now write a 'summary' of a successful import. This is done if the import switches to to state 'pending'.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 28 Nov 2018 09:52:34 +0100 |
parents | 8d59457a5651 |
children | eb82076fdffe |
line wrap: on
line diff
--- a/pkg/imports/sr.go Wed Nov 28 08:11:23 2018 +0100 +++ b/pkg/imports/sr.go Wed Nov 28 09:52:34 2018 +0100 @@ -115,6 +115,8 @@ ) RETURNING id, + ST_X(ST_Centroid(point_cloud::geometry)), + ST_Y(ST_Centroid(point_cloud::geometry)), CASE WHEN ST_Y(ST_Centroid(point_cloud::geometry)) > 0 THEN 32600 ELSE @@ -169,58 +171,61 @@ importID int64, conn *sql.Conn, feedback Feedback, -) error { +) (interface{}, error) { z, err := zip.OpenReader(filepath.Join(sr.Dir, "sr.zip")) if err != nil { - return err + return nil, err } defer z.Close() feedback.Info("Looking for 'meta.json'") mf := common.FindInZIP(z, "meta.json") if mf == nil && !sr.completeOverride() { - return errors.New("Cannot find 'meta.json'") + return nil, errors.New("Cannot find 'meta.json'") } m, err := sr.loadMeta(mf) if err != nil { - return err + return nil, err } if err := m.Validate(ctx, conn); err != nil { - return common.ToError(err) + return nil, common.ToError(err) } feedback.Info("Looking for '*.xyz'") xyzf := common.FindInZIP(z, ".xyz") if xyzf == nil { - return errors.New("Cannot find any *.xyz file") + return nil, errors.New("Cannot find any *.xyz file") } xyz, err := loadXYZ(xyzf, feedback) if err != nil { - return err + return nil, err } if len(xyz) == 0 { - return errors.New("XYZ does not contain any vertices") + return nil, errors.New("XYZ does not contain any vertices") } // Is there a boundary shapefile in the ZIP archive? polygon, err := loadBoundary(z) if err != nil { - return err + return nil, err } tx, err := conn.BeginTx(ctx, nil) if err != nil { - return err + return nil, err } defer tx.Rollback() - var id int64 - var epsg uint32 + var ( + id int64 + epsg uint32 + lat, lon float64 + ) start := time.Now() err = tx.QueryRow(insertPointsSQL, @@ -230,11 +235,11 @@ xyz.AsWKB(), polygon.AsWBK(), m.EPSG, - ).Scan(&id, &epsg) + ).Scan(&id, &lat, &lon, &epsg) xyz, polygon = nil, nil // not need from now on. feedback.Info("storing points took %s", time.Since(start)) if err != nil { - return err + return nil, err } feedback.Info("Best suited UTM EPSG: %d", epsg) @@ -244,11 +249,11 @@ tin, err := octree.GenerateTinByID(ctx, conn, id, epsg) feedback.Info("triangulation took %s", time.Since(start)) if err != nil { - return err + return nil, err } if tin == nil { - return errors.New("cannot load TIN from database") + return nil, errors.New("cannot load TIN from database") } feedback.Info("Building octree...") @@ -259,7 +264,7 @@ tin = nil // not needed from now on feedback.Info("building octree took %s", time.Since(start)) if err != nil { - return err + return nil, err } feedback.Info("Store octree...") @@ -270,7 +275,7 @@ _, err = tx.Exec(insertOctreeSQL, id, checksum, octreeIndex) feedback.Info("storing octree index took %s", time.Since(start)) if err != nil { - return err + return nil, err } tree := builder.Tree() @@ -281,18 +286,30 @@ err = generateContours(tree, tx, id) feedback.Info("generating and storing contour lines took %s", time.Since(start)) if err != nil { - return err + return nil, err } // Store for potential later removal. if err = track(ctx, tx, importID, "waterway.sounding_results", id); err != nil { - return err + return nil, err } if err = tx.Commit(); err == nil { feedback.Info("Storing sounding result was successful.") } - return err + + summary := struct { + Bottleneck string `json:"bottleneck"` + Date models.SoundingResultDate `json:"date"` + Lat float64 `json:"lat"` + Lon float64 `json:"lon"` + }{ + Bottleneck: m.Bottleneck, + Date: m.Date, + Lat: lat, + Lon: lon, + } + return &summary, err } func (sr *SoundingResult) CleanUp() error {