transformation.h
Go to the documentation of this file.
1 //=============================================================================
2 // Copyright (C) 2021-2024 Wageningen University - All Rights Reserved
3 // Author: Gonzalo Mier
4 // BSD-3 License
5 //=============================================================================
6 
7 #pragma once
8 #ifndef FIELDS2COVER_UTILS_TRANSFORMATION_H_
9 #define FIELDS2COVER_UTILS_TRANSFORMATION_H_
10 
11 #include <gdal/ogr_spatialref.h>
12 #include <memory>
13 #include <utility>
14 #include <string>
15 #include <algorithm>
16 #include "fields2cover/types.h"
17 
18 namespace f2c {
19 
20 class Transform {
21  public:
22  static std::unique_ptr<OGRCoordinateTransformation,
23  void(*)(OGRCoordinateTransformation*)>
25  const std::string& coord_sys_from, const std::string& coord_sys_to);
26 
28  const F2CField& field, const std::string& coord_sys_to);
30  const F2CField& field, const std::string& coord_sys_to);
31  static F2CSwath transformSwathWithFieldRef(const F2CSwath& swath,
32  const F2CField& field, const std::string& coord_sys_to);
34  const F2CField& field, const std::string& coord_sys_to);
36  const F2CField& field, const std::string& coord_sys_to);
37 
38 
39  static void transform(F2CField& field, const std::string& coord_sys_to);
40 
41  static void transformToUTM(F2CField& field, bool is_etrs89_opt = true);
42  static void transformToPrevCRS(F2CField& field);
43 
44  static F2CRoute transformToPrevCRS(const F2CRoute& p, const F2CField& field);
45  static F2CPath transformToPrevCRS(const F2CPath& p, const F2CField& field);
46  static F2CStrip transformToPrevCRS(const F2CStrip& s, const F2CField& field);
48  const F2CStrips& s, const F2CField& field);
50  const F2CSwath& s, const F2CField& field);
52  const F2CSwaths& s, const F2CField& field);
53 
54  static F2CPath transformPath(const F2CPath& p,
55  const std::string& coord_sys_from, const std::string& coord_sys_to);
56  static F2CStrip transformStrip(const F2CStrip& s,
57  const std::string& coord_sys_from, const std::string& coord_sys_to);
58  static F2CStrips transformStrips(const F2CStrips& s,
59  const std::string& coord_sys_from, const std::string& coord_sys_to);
60  static F2CSwath transformSwath(const F2CSwath& s,
61  const std::string& coord_sys_from, const std::string& coord_sys_to);
62  static F2CSwaths transformSwaths(const F2CSwaths& s,
63  const std::string& coord_sys_from, const std::string& coord_sys_to);
64 
65  template <class T>
66  static T transform(const T& t,
67  const std::string& coord_sys_from, const std::string& coord_sys_to);
68 
69  template <class T>
70  static T transform(const T& t, const F2CPoint& ref_point,
71  const std::string& coord_sys_from, const std::string& coord_sys_to);
72 
73  static F2CPoint getRefPointInGPS(const F2CField& field);
74 
75  static std::unique_ptr<OGRSpatialReference, void(*)(OGRSpatialReference*)>
76  createSptRef(const std::string& coord_sys, bool fail_silently = false);
77 
78  static std::unique_ptr<OGRCoordinateTransformation,
79  void(*)(OGRCoordinateTransformation*)> createCoordTransf(
80  std::unique_ptr<OGRSpatialReference, void(*)(OGRSpatialReference*)> in,
81  std::unique_ptr<OGRSpatialReference, void(*)(OGRSpatialReference*)> out);
82 };
83 
84 template <class T>
85 T Transform::transform(const T& t, const F2CPoint& ref_point,
86  const std::string& coord_sys_from, const std::string& coord_sys_to) {
87  return transform(t + ref_point, coord_sys_from, coord_sys_to);
88 }
89 
90 template <class T>
91 T Transform::transform(const T& t,
92  const std::string& coord_sys_from, const std::string& coord_sys_to) {
93  T new_t = t.clone();
94  new_t->transform(generateCoordTransf(coord_sys_from, coord_sys_to).get());
95  return new_t;
96 }
97 
98 } // namespace f2c
99 
100 #endif // FIELDS2COVER_UTILS_TRANSFORMATION_H_
5_route_planning.swaths
swaths
Definition: 5_route_planning.py:58
types.h
2_objective_functions.path
path
Definition: 2_objective_functions.py:88
f2c::Transform::createCoordTransf
static std::unique_ptr< OGRCoordinateTransformation, void(*)(OGRCoordinateTransformation *)> createCoordTransf(std::unique_ptr< OGRSpatialReference, void(*)(OGRSpatialReference *)> in, std::unique_ptr< OGRSpatialReference, void(*)(OGRSpatialReference *)> out)
Definition: transformation.cpp:273
f2c::types::Field
Definition: Field.h:18
f2c::Transform::createSptRef
static std::unique_ptr< OGRSpatialReference, void(*)(OGRSpatialReference *)> createSptRef(const std::string &coord_sys, bool fail_silently=false)
Definition: transformation.cpp:242
f2c::Transform::transformRouteWithFieldRef
static F2CRoute transformRouteWithFieldRef(const F2CRoute &route, const F2CField &field, const std::string &coord_sys_to)
Definition: transformation.cpp:35
f2c::Transform::transform
static void transform(F2CField &field, const std::string &coord_sys_to)
Definition: transformation.cpp:20
f2c::Transform::transformSwathWithFieldRef
static F2CSwath transformSwathWithFieldRef(const F2CSwath &swath, const F2CField &field, const std::string &coord_sys_to)
Definition: transformation.cpp:88
f2c::Transform::transformPathWithFieldRef
static F2CPath transformPathWithFieldRef(const F2CPath &path, const F2CField &field, const std::string &coord_sys_to)
Definition: transformation.cpp:50
F2CStrips
std::vector< F2CStrip > F2CStrips
Definition: types.h:57
f2c::types::Swath
Definition: Swath.h:23
f2c::Transform::generateCoordTransf
static std::unique_ptr< OGRCoordinateTransformation, void(*)(OGRCoordinateTransformation *)> generateCoordTransf(const std::string &coord_sys_from, const std::string &coord_sys_to)
Definition: transformation.cpp:14
f2c::types::Strip
Definition: Strip.h:16
f2c::Transform::transformSwathsWithFieldRef
static F2CSwaths transformSwathsWithFieldRef(const F2CSwaths &swaths, const F2CField &field, const std::string &coord_sys_to)
Definition: transformation.cpp:95
5_route_planning.route
route
Definition: 5_route_planning.py:29
f2c::Transform::transformMultiPointWithFieldRef
static F2CMultiPoint transformMultiPointWithFieldRef(const F2CMultiPoint &mp, const F2CField &field, const std::string &coord_sys_to)
Definition: transformation.cpp:76
f2c::Transform::transformStrip
static F2CStrip transformStrip(const F2CStrip &s, const std::string &coord_sys_from, const std::string &coord_sys_to)
Definition: transformation.cpp:105
f2c::Transform::transformSwath
static F2CSwath transformSwath(const F2CSwath &s, const std::string &coord_sys_from, const std::string &coord_sys_to)
Definition: transformation.cpp:133
f2c::types::Path
Definition: Path.h:23
f2c::types::MultiPoint
Definition: MultiPoint.h:18
f2c::Transform::transformSwaths
static F2CSwaths transformSwaths(const F2CSwaths &s, const std::string &coord_sys_from, const std::string &coord_sys_to)
Definition: transformation.cpp:123
f2c::Transform::transformToPrevCRS
static void transformToPrevCRS(F2CField &field)
Definition: transformation.cpp:197
f2c::types::Route
Definition: Route.h:23
f2c::types::Point
Definition: Point.h:21
2_objective_functions.field
field
Definition: 2_objective_functions.py:16
f2c
Main namespace of the fields2cover library.
Definition: boustrophedon_decomp.h:14
f2c::Transform
Definition: transformation.h:20
f2c::Transform::transformStrips
static F2CStrips transformStrips(const F2CStrips &s, const std::string &coord_sys_from, const std::string &coord_sys_to)
Definition: transformation.cpp:113
f2c::Transform::transformPath
static F2CPath transformPath(const F2CPath &p, const std::string &coord_sys_from, const std::string &coord_sys_to)
Definition: transformation.cpp:139
f2c::types::Swaths
Definition: Swaths.h:20
f2c::Transform::getRefPointInGPS
static F2CPoint getRefPointInGPS(const F2CField &field)
Definition: transformation.cpp:235
f2c::Transform::transformToUTM
static void transformToUTM(F2CField &field, bool is_etrs89_opt=true)
Definition: transformation.cpp:149


fields2cover
Author(s):
autogenerated on Fri Apr 25 2025 02:18:31