1 #ifndef OSMIUM_GEOM_FACTORY_HPP
2 #define OSMIUM_GEOM_FACTORY_HPP
60 std::runtime_error(what) {
64 std::runtime_error(what) {
108 return "+proj=longlat +datum=WGS84 +no_defs";
116 template <
class TGeomImpl,
class TProjection = IdentityProjection>
125 if (last_location != node_ref.location()) {
126 last_location = node_ref.location();
140 template <
class... TArgs>
143 m_impl(std::forward<TArgs>(args)...) {
150 template <
class... TArgs>
153 m_impl(std::forward<TArgs>(args)...) {
163 return m_projection.epsg();
167 return m_projection.proj_string();
187 m_impl.linestring_start();
190 template <
class TIter>
192 size_t num_points = 0;
193 for (; it !=
end; ++it, ++num_points) {
194 m_impl.linestring_add_location(
m_projection(it->location()));
199 template <
class TIter>
201 size_t num_points = 0;
203 for (; it !=
end; ++it) {
204 if (last_location != it->location()) {
205 last_location = it->location();
206 m_impl.linestring_add_location(
m_projection(last_location));
214 return m_impl.linestring_finish(num_points);
219 size_t num_points = 0;
242 if (num_points < 2) {
256 m_impl.polygon_start();
259 template <
class TIter>
261 size_t num_points = 0;
262 for (; it !=
end; ++it, ++num_points) {
263 m_impl.polygon_add_location(
m_projection(it->location()));
268 template <
class TIter>
270 size_t num_points = 0;
272 for (; it !=
end; ++it) {
273 if (last_location != it->location()) {
274 last_location = it->location();
275 m_impl.polygon_add_location(
m_projection(last_location));
283 return m_impl.polygon_finish(num_points);
289 size_t num_polygons = 0;
290 size_t num_rings = 0;
291 m_impl.multipolygon_start();
293 for (
auto it = area.
cbegin(); it != area.
cend(); ++it) {
296 if (num_polygons > 0) {
297 m_impl.multipolygon_polygon_finish();
299 m_impl.multipolygon_polygon_start();
300 m_impl.multipolygon_outer_ring_start();
302 m_impl.multipolygon_outer_ring_finish();
306 m_impl.multipolygon_inner_ring_start();
308 m_impl.multipolygon_inner_ring_finish();
314 if (num_rings == 0) {
318 m_impl.multipolygon_polygon_finish();
319 return m_impl.multipolygon_finish();
328 #endif // OSMIUM_GEOM_FACTORY_HPP
WayNodeList & nodes()
Definition: way.hpp:75
const_iterator cbegin() const noexcept
Returns an iterator to the beginning.
Definition: node_ref_list.hpp:151
point_type create_point(const osmium::NodeRef &node_ref)
Definition: factory.hpp:180
linestring_type linestring_finish(size_t num_points)
Definition: factory.hpp:213
Definition: factory.hpp:117
const_reverse_iterator crbegin() const noexcept
Returns a reverse_iterator to the beginning.
Definition: node_ref_list.hpp:171
size_t fill_polygon_unique(TIter it, TIter end)
Definition: factory.hpp:269
Linestring has reverse direction.
point_type create_point(const osmium::Location location) const
Definition: factory.hpp:172
const_iterator cend() const
Definition: object.hpp:345
Definition: reader_iterator.hpp:39
geometry_error(const std::string &what)
Definition: factory.hpp:59
const_iterator cbegin() const
Definition: object.hpp:341
TGeomImpl::ring_type ring_type
Definition: factory.hpp:160
const_iterator cend() const noexcept
Returns an iterator to the end.
Definition: node_ref_list.hpp:156
geometry_error(const char *what)
Definition: factory.hpp:63
int epsg() const noexcept
Definition: factory.hpp:103
Linestring has same direction as way.
double lat() const
Definition: location.hpp:205
void add_points(const osmium::OuterRing &nodes)
Definition: factory.hpp:122
TGeomImpl::point_type point_type
Definition: factory.hpp:156
Namespace for everything in the Osmium library.
Definition: assembler.hpp:55
TGeomImpl m_impl
Definition: factory.hpp:133
linestring_type create_linestring(const osmium::WayNodeList &wnl, use_nodes un=use_nodes::unique, direction dir=direction::forward)
Definition: factory.hpp:217
TProjection m_projection
Definition: factory.hpp:132
void polygon_start()
Definition: factory.hpp:255
Definition: coordinates.hpp:47
size_t fill_linestring_unique(TIter it, TIter end)
Definition: factory.hpp:200
int epsg() const
Definition: factory.hpp:162
osmium::io::InputIterator< osmium::io::Reader > end(osmium::io::Reader &)
Definition: reader_iterator.hpp:45
Remove consecutive nodes with same location.
std::string proj_string() const
Definition: factory.hpp:107
void linestring_start()
Definition: factory.hpp:186
std::string proj_string() const
Definition: factory.hpp:166
TGeomImpl::multipolygon_type multipolygon_type
Definition: factory.hpp:159
Definition: location.hpp:79
osmium::Location & location() noexcept
Definition: node_ref.hpp:73
multipolygon_type create_multipolygon(const osmium::Area &area)
Definition: factory.hpp:288
size_t fill_linestring(TIter it, TIter end)
Definition: factory.hpp:191
polygon_type polygon_finish(size_t num_points)
Definition: factory.hpp:282
direction
Definition: factory.hpp:86
Definition: factory.hpp:57
TGeomImpl::polygon_type polygon_type
Definition: factory.hpp:158
double lon() const
Definition: location.hpp:186
TGeomImpl::linestring_type linestring_type
Definition: factory.hpp:157
size_t fill_polygon(TIter it, TIter end)
Definition: factory.hpp:260
osmium::Location location() const noexcept
Definition: node.hpp:61
point_type create_point(const osmium::Node &node)
Definition: factory.hpp:176
use_nodes
Definition: factory.hpp:77
Definition: node_ref.hpp:50
const_reverse_iterator crend() const noexcept
Returns a reverse_iterator to the end.
Definition: node_ref_list.hpp:176
linestring_type create_linestring(const osmium::Way &way, use_nodes un=use_nodes::unique, direction dir=direction::forward)
Definition: factory.hpp:249
Coordinates operator()(osmium::Location location) const
Definition: factory.hpp:99
Definition: factory.hpp:95