LineString.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 
12  data_ = std::shared_ptr<OGRLineString>(
13  static_cast<OGRLineString*>(
14  OGRGeometryFactory::createGeometry(wkbLineString)),
15  [](OGRLineString* f) {OGRGeometryFactory::destroyGeometry(f);});
16 }
17 
19  for (auto&& p : ring) {
20  this->addPoint(p);
21  }
22 }
23 
24 LineString::LineString(const std::vector<Point>& ps) {
25  for (auto&& p : ps) {
26  this->addPoint(p);
27  }
28 }
29 
31  this->addPoint(p1);
32  this->addPoint(p2);
33 }
34 
35 LineString::LineString(const std::initializer_list<Point>& ps) {
36  for (auto&& p : ps) {
37  this->addPoint(p);
38  }
39 }
40 
41 double LineString::X(size_t i) const {return data_->getX(i);}
42 double LineString::Y(size_t i) const {return data_->getY(i);}
43 double LineString::Z(size_t i) const {return data_->getZ(i);}
44 double LineString::getX(size_t i) const {return data_->getX(i);}
45 double LineString::getY(size_t i) const {return data_->getY(i);}
46 double LineString::getZ(size_t i) const {return data_->getZ(i);}
47 double LineString::length() const {return this->data_->get_Length();}
48 void LineString::reversePoints() { this->data_->reversePoints();}
49 size_t LineString::size() const {
50  return isEmpty() ? 0 : this->data_->getNumPoints();
51 }
52 
53 
54 void LineString::getGeometry(size_t i, Point& point) {
55  if (i >= this->size()) {
56  throw std::out_of_range(
57  "Error getGeometry: LinearString does not contain point " +
58  std::to_string(i));
59  }
60  data_->getPoint(i, point.get());
61 }
62 
63 void LineString::getGeometry(size_t i, Point& point) const {
64  if (i >= this->size()) {
65  throw std::out_of_range(
66  "Error getGeometry: LinearString does not contain point " +
67  std::to_string(i));
68  }
69  data_->getPoint(i, point.get());
70 }
71 
73  if (i >= this->size()) {
74  throw std::out_of_range(
75  "Error getGeometry: LinearString does not contain point " +
76  std::to_string(i));
77  }
78  OGRPoint point;
79  data_->getPoint(i, &point);
80  return Point(point);
81 }
82 
83 const Point LineString::getGeometry(size_t i) const {
84  if (i >= this->size()) {
85  throw std::out_of_range(
86  "Error getGeometry: LinearString does not contain point " +
87  std::to_string(i));
88  }
89  return Point(data_->getX(i), data_->getY(i), data_->getZ(i));
90 }
91 
92 void LineString::setGeometry(size_t i, const Point& p) {
93  data_->setPoint(i, p.getX(), p.getY(), p.getZ());
94 }
95 
97  this->addPoint(p);
98 }
99 
100 
101 void LineString::operator*=(double b) {
102  for (auto&& p : *this) {
103  p *= b;
104  }
105 }
106 
107 void LineString::addPoint(double x, double y, double z) {
108  data_->addPoint(x, y, z);
109 }
110 void LineString::addPoint(const Point& p) {
111  data_->addPoint(p.getX(), p.getY(), p.getZ());
112 }
113 
115  return getGeometry(0);
116 }
117 
119  return getGeometry(size()-1);
120 }
121 
122 double LineString::startAngle() const {
123  return (getGeometry(1) - startPoint()).getAngleFromPoint();
124 }
125 
126 double LineString::endAngle() const {
127  return (endPoint() - getGeometry(size() - 2)).getAngleFromPoint();
128 }
129 
131  std::vector<double> dist;
132  std::vector<Point> ps;
133  for (size_t i = 0; i < this->size() - 1; ++i) {
134  ps.emplace_back(p.closestPointInSegment(this->at(i), this->at(i+1)));
135  dist.emplace_back(ps.back().distance(p));
136  }
137  return ps[std::min_element(dist.begin(), dist.end()) - dist.begin()];
138 }
139 
140 
141 } // namespace f2c::types
142 
f2c::types::LineString::getX
double getX(size_t i) const
Definition: LineString.cpp:44
f2c::types::LineString::closestPointTo
Point closestPointTo(const Point &p) const
Definition: LineString.cpp:130
f2c::types::Point::getZ
double getZ() const
Definition: Point.cpp:97
1_basic_types.p1
p1
Definition: 1_basic_types.py:11
f2c::types
Types used by fields2cover library.
Definition: Cell.h:20
f2c::types::LineString::Z
double Z(size_t i) const
Definition: LineString.cpp:43
f2c::types::LineString::getGeometry
void getGeometry(size_t i, Point &point)
Definition: LineString.cpp:54
f2c::types::LineString::X
double X(size_t i) const
Definition: LineString.cpp:41
f2c::types::LineString::startAngle
double startAngle() const
Definition: LineString.cpp:122
f2c::types::LineString::setGeometry
void setGeometry(size_t i, const Point &p)
Definition: LineString.cpp:92
f2c::types::Point::closestPointInSegment
Point closestPointInSegment(const Point &seg_s, const Point &seg_e) const
Definition: Point.cpp:169
f2c::types::LineString::getZ
double getZ(size_t i) const
Definition: LineString.cpp:46
f2c::types::LinearRing
Definition: LinearRing.h:18
f2c::types::LineString::LineString
LineString()
Definition: LineString.cpp:11
f2c::types::LineString::Y
double Y(size_t i) const
Definition: LineString.cpp:42
f2c::types::LineString::operator*=
void operator*=(double b)
Definition: LineString.cpp:101
1_basic_types.p2
p2
Definition: 1_basic_types.py:15
f2c::types::Geometry< OGRLineString, R >::isEmpty
bool isEmpty() const
Definition: Geometry_impl.hpp:222
LineString.h
1_basic_types.ring
ring
Definition: 1_basic_types.py:68
f2c::types::LineString::addGeometry
void addGeometry(const Point &p)
Definition: LineString.cpp:96
f2c::types::Geometry::get
T * get()
Definition: Geometry_impl.hpp:71
f2c::types::LineString::startPoint
const Point startPoint() const
Definition: LineString.cpp:114
8_complete_flow.ps
list ps
Definition: 8_complete_flow.py:43
f2c::types::LineString::addPoint
void addPoint(double x, double y, double z=0)
Definition: LineString.cpp:107
f2c::types::Point
Definition: Point.h:21
f2c::types::LineString::getY
double getY(size_t i) const
Definition: LineString.cpp:45
f2c::types::LineString::endPoint
const Point endPoint() const
Definition: LineString.cpp:118
f2c::types::LineString::size
size_t size() const
Definition: LineString.cpp:49
f2c::types::Geometry< OGRLineString, R >::data_
std::shared_ptr< OGRLineString > data_
Definition: Geometry.h:129
f2c::types::Point::getY
double getY() const
Definition: Point.cpp:96
f2c::types::LineString::reversePoints
void reversePoints()
Definition: LineString.cpp:48
f2c::types::Point::getX
double getX() const
Definition: Point.cpp:95
f2c::types::to_string
std::string to_string(double d, const int precision=6)
Definition: Path.cpp:274
f2c::types::LineString::length
double length() const
Definition: LineString.cpp:47
f2c::types::LineString::endAngle
double endAngle() const
Definition: LineString.cpp:126


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