Mercurial > gemma
diff pkg/controllers/octreecross.go @ 762:01ba06da8f46
Factored repojection of coordinates to own logic as we need it to reproject the
results of the cross sections back to WGS84.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 25 Sep 2018 10:35:17 +0200 |
parents | 033975d49c90 |
children | d05bc3e34338 |
line wrap: on
line diff
--- a/pkg/controllers/octreecross.go Tue Sep 25 10:09:33 2018 +0200 +++ b/pkg/controllers/octreecross.go Tue Sep 25 10:35:17 2018 +0200 @@ -11,32 +11,18 @@ "gemma.intevation.de/gemma/pkg/octree" ) -const ( - reprojectSQL = ` -SELECT ST_X(p), ST_Y(p) -FROM ST_Transform(ST_SetSRID(ST_MakePoint($1, $2), $3::integer), $4::integer) AS p` -) - func reproject( - conn *sql.Conn, + rp *models.Reprojector, + src models.GeoJSONLineCoordinates, ctx context.Context, - src models.GeoJSONLineCoordinates, - fromEPSG, toEPSG uint32, ) (models.GeoJSONLineCoordinates, error) { - stmt, err := conn.PrepareContext(ctx, reprojectSQL) - if err != nil { - return nil, err - } - defer stmt.Close() - dst := make(models.GeoJSONLineCoordinates, len(src)) for i, s := range src { - if err := stmt.QueryRowContext( - ctx, - s.Lat, s.Lon, - fromEPSG, toEPSG, - ).Scan(&dst[i].Lat, &dst[i].Lon); err != nil { + var err error + if dst[i].Lat, dst[i].Lon, err = rp.Reproject( + s.Lat, s.Lon, ctx, + ); err != nil { return nil, err } } @@ -68,10 +54,16 @@ start = time.Now() - coords, err := reproject( + var rp *models.Reprojector + if rp, err = models.NewReprojector( conn, req.Context(), - csi.Geometry.Coordinates, - 4326, tree.EPSG) + 4326, tree.EPSG, + ); err != nil { + return + } + defer rp.Close() + + coords, err := reproject(rp, csi.Geometry.Coordinates, req.Context()) log.Printf("transforming input coords took: %s\n", time.Since(start)) if err != nil {