Route.cpp
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 
8 
9 namespace f2c::types {
10 
11 const std::vector<Swaths>& Route::getVectorSwaths() const {
12  return this->v_swaths_;
13 }
14 
16  return this->v_swaths_[i];
17 }
18 
19 const Swaths& Route::getSwaths(size_t i) const {
20  return this->v_swaths_[i];
21 }
22 
23 void Route::setSwaths(size_t i, const Swaths& s) {
24  this->v_swaths_[i] = s;
25 }
26 
27 void Route::addSwaths(const Swaths& s) {
28  if (this->sizeConnections() == 0) {
29  this->connections_.emplace_back();
30  }
31  if (this->sizeConnections() > this->sizeVectorSwaths()) {
32  this->v_swaths_.emplace_back(s);
33  } else {
34  this->v_swaths_.back().append(s);
35  }
36 }
37 
38 void Route::addConnectedSwaths(const MultiPoint& mp, const Swaths& s) {
39  this->addConnection(mp);
40  this->addSwaths(s);
41 }
42 
43 void Route::addSwath(const Swath& s) {
44  size_t nc = this->sizeConnections();
45  const size_t ns = this->sizeVectorSwaths();
46  if (nc == 0) {
47  this->connections_.emplace_back();
48  ++nc;
49  }
50  if (nc > ns || ns == 0) {
51  this->v_swaths_.emplace_back();
52  }
53  this->v_swaths_.back().emplace_back(s);
54 }
55 
56 void Route::addSwath(const Swath& s, Graph2D& g) {
57  if (!this->isEmpty()) {
58  this->addConnection(g.shortestPath(this->endPoint(), s.startPoint()));
59  }
60  this->addSwath(s);
61 }
62 
64  if (this->sizeConnections() <= this->sizeVectorSwaths()) {
65  this->connections_.emplace_back();
66  }
67 }
68 
69 void Route::addConnection(const Point& p) {
70  this->addConnection();
71  this->connections_.back().addPoint(p);
72 }
73 
75  if (mp.size() < 1) {
76  this->addConnection();
77  }
78  for (auto&& p : mp) {
79  this->addConnection(p);
80  }
81 }
82 void Route::addConnection(const std::vector<Point>& vp) {
83  if (vp.size() < 1) {
84  this->addConnection();
85  }
86  for (auto&& p : vp) {
87  this->addConnection(p);
88  }
89 }
90 
92  return this->connections_.back();
93 }
94 
95 const MultiPoint& Route::getLastConnection() const {
96  return this->connections_.back();
97 }
98 
100  return this->v_swaths_.back();
101 }
102 
103 const Swaths& Route::getLastSwaths() const {
104  return this->v_swaths_.back();
105 }
106 
107 const std::vector<MultiPoint>& Route::getConnections() const {
108  return this->connections_;
109 }
110 
112  return this->connections_[i];
113 }
114 
115 const MultiPoint& Route::getConnection(size_t i) const {
116  return this->connections_[i];
117 }
118 
119 void Route::setConnection(size_t i, const MultiPoint& mp) {
120  this->connections_[i] = mp;
121 }
122 
124  if (sizeConnections() > 0 && connections_[0].size() > 0) {
125  return connections_[0].getFirstPoint();
126  } else if (sizeVectorSwaths() > 0 && v_swaths_[0].size() > 0) {
127  return v_swaths_[0][0].startPoint();
128  }
129  return {};
130 }
131 
133  if (sizeConnections() > sizeVectorSwaths() &&
134  connections_.back().size() > 0) {
135  return connections_.back().getLastPoint();
136  } else if (sizeVectorSwaths() > 0 && v_swaths_.back().size() > 0) {
137  return v_swaths_.back().back().endPoint();
138  }
139  return {};
140 }
141 
142 size_t Route::sizeVectorSwaths() const {
143  return this->v_swaths_.size();
144 }
145 
146 size_t Route::sizeConnections() const {
147  return this->connections_.size();
148 }
149 
150 double Route::length() const {
151  return asLineString().length();
152 }
153 
155  if (isEmpty()) {
156  return LineString();
157  }
158  LineString line;
159  if (connections_.size() > 0) {
160  for (auto&& point : connections_[0]) {
161  line.addPoint(point);
162  }
163  }
164  for (size_t i = 0; i < v_swaths_.size(); ++i) {
165  for (auto&& swath : v_swaths_[i]) {
166  for (const auto& point : swath.getPath()) {
167  line.addPoint(point);
168  }
169  }
170  if ((connections_.size() > i + 1)) {
171  for (auto&& point : connections_[i+1]) {
172  line.addPoint(point);
173  }
174  }
175  }
176  return line;
177 }
178 
179 bool Route::isEmpty() const {
180  return v_swaths_.empty() && connections_.empty();
181 }
182 
184  Route new_r;
185  for (auto&& s : this->v_swaths_) {
186  new_r.v_swaths_.emplace_back(s.clone());
187  }
188  for (auto&& c : this->connections_) {
189  new_r.connections_.emplace_back(c.clone());
190  }
191  return new_r;
192 }
193 
194 
195 } // namespace f2c::types
196 
f2c::types::Graph2D
Definition: Graph2D.h:18
f2c::types::Route::v_swaths_
std::vector< Swaths > v_swaths_
Definition: Route.h:65
f2c::types::Route::getLastConnection
MultiPoint & getLastConnection()
Definition: Route.cpp:91
f2c::types
Types used by fields2cover library.
Definition: Cell.h:20
f2c::types::Route::getConnections
const std::vector< MultiPoint > & getConnections() const
Definition: Route.cpp:107
f2c::types::Route::isEmpty
bool isEmpty() const
Definition: Route.cpp:179
f2c::types::Route::addSwath
void addSwath(const Swath &s)
Definition: Route.cpp:43
f2c::types::Route::startPoint
Point startPoint() const
Definition: Route.cpp:123
f2c::types::Route::getSwaths
Swaths & getSwaths(size_t i)
Definition: Route.cpp:15
f2c::types::Swath
Definition: Swath.h:23
f2c::types::Route::asLineString
LineString asLineString() const
Definition: Route.cpp:154
f2c::types::Route::sizeVectorSwaths
size_t sizeVectorSwaths() const
Definition: Route.cpp:142
Route.h
f2c::types::Route::getVectorSwaths
const std::vector< Swaths > & getVectorSwaths() const
Definition: Route.cpp:11
f2c::types::Route::getLastSwaths
Swaths & getLastSwaths()
Definition: Route.cpp:99
f2c::types::Route::addSwaths
void addSwaths(const Swaths &s={})
Definition: Route.cpp:27
f2c::types::MultiPoint
Definition: MultiPoint.h:18
f2c::types::LineString
Definition: LineString.h:19
f2c::types::Route::addConnection
void addConnection()
Definition: Route.cpp:63
f2c::types::Route::connections_
std::vector< MultiPoint > connections_
Definition: Route.h:66
f2c::types::Swath::startPoint
Point startPoint() const
Definition: Swath.cpp:92
f2c::types::Route::sizeConnections
size_t sizeConnections() const
Definition: Route.cpp:146
f2c::types::Route
Definition: Route.h:23
f2c::types::Route::length
double length() const
Definition: Route.cpp:150
f2c::types::LineString::addPoint
void addPoint(double x, double y, double z=0)
Definition: LineString.cpp:107
f2c::types::Graph2D::shortestPath
std::vector< Point > shortestPath(const Point &from, const Point &to, int64_t INF=1<< 30)
Definition: Graph2D.cpp:91
f2c::types::Point
Definition: Point.h:21
f2c::types::Route::addConnectedSwaths
void addConnectedSwaths(const MultiPoint &mp={}, const Swaths &s={})
Definition: Route.cpp:38
f2c::types::Route::getConnection
MultiPoint & getConnection(size_t i)
Definition: Route.cpp:111
f2c::types::Route::setConnection
void setConnection(size_t i, const MultiPoint &mp)
Definition: Route.cpp:119
f2c::types::MultiPoint::size
size_t size() const
Definition: MultiPoint.cpp:30
f2c::types::Route::setSwaths
void setSwaths(size_t i, const Swaths &s)
Definition: Route.cpp:23
f2c::types::Route::clone
Route clone() const
Definition: Route.cpp:183
f2c::types::Swaths
Definition: Swaths.h:20
f2c::types::LineString::length
double length() const
Definition: LineString.cpp:47
f2c::types::Route::endPoint
Point endPoint() const
Definition: Route.cpp:132


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