1 #ifndef OSMIUM_GEOM_FACTORY_HPP
2 #define OSMIUM_GEOM_FACTORY_HPP
65 std::runtime_error(message),
70 m_message += object_type;
72 m_message += std::to_string(m_id);
78 if (m_id == 0 &&
id != 0) {
80 m_message += object_type;
82 m_message += std::to_string(
id);
92 const char*
what() const noexcept
override {
93 return m_message.c_str();
137 return "+proj=longlat +datum=WGS84 +no_defs";
145 template <
typename TGeomImpl,
typename TProjection = IdentityProjection>
154 if (last_location != node_ref.location()) {
155 last_location = node_ref.location();
169 template <
typename... TArgs>
172 m_impl(std::forward<TArgs>(args)...) {
179 template <
typename... TArgs>
182 m_impl(std::forward<TArgs>(args)...) {
193 return m_projection.epsg();
197 return m_projection.proj_string();
227 m_impl.linestring_start();
230 template <
typename TIter>
232 size_t num_points = 0;
233 for (; it !=
end; ++it, ++num_points) {
234 m_impl.linestring_add_location(
m_projection(it->location()));
239 template <
typename TIter>
241 size_t num_points = 0;
243 for (; it !=
end; ++it) {
244 if (last_location != it->location()) {
245 last_location = it->location();
246 m_impl.linestring_add_location(
m_projection(last_location));
254 return m_impl.linestring_finish(num_points);
259 size_t num_points = 0;
282 if (num_points < 2) {
301 m_impl.polygon_start();
304 template <
typename TIter>
306 size_t num_points = 0;
307 for (; it !=
end; ++it, ++num_points) {
308 m_impl.polygon_add_location(
m_projection(it->location()));
313 template <
typename TIter>
315 size_t num_points = 0;
317 for (; it !=
end; ++it) {
318 if (last_location != it->location()) {
319 last_location = it->location();
320 m_impl.polygon_add_location(
m_projection(last_location));
328 return m_impl.polygon_finish(num_points);
333 size_t num_points = 0;
356 if (num_points < 4) {
376 size_t num_polygons = 0;
377 size_t num_rings = 0;
378 m_impl.multipolygon_start();
380 for (
auto it = area.
cbegin(); it != area.
cend(); ++it) {
383 if (num_polygons > 0) {
384 m_impl.multipolygon_polygon_finish();
386 m_impl.multipolygon_polygon_start();
387 m_impl.multipolygon_outer_ring_start();
389 m_impl.multipolygon_outer_ring_finish();
393 m_impl.multipolygon_inner_ring_start();
395 m_impl.multipolygon_inner_ring_finish();
401 if (num_rings == 0) {
405 m_impl.multipolygon_polygon_finish();
406 return m_impl.multipolygon_finish();
419 #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:154
point_type create_point(const osmium::NodeRef &node_ref)
Definition: factory.hpp:215
linestring_type linestring_finish(size_t num_points)
Definition: factory.hpp:253
Definition: factory.hpp:146
const char * what() const noexceptoverride
Definition: factory.hpp:92
const_reverse_iterator crbegin() const noexcept
Returns a reverse_iterator to the beginning.
Definition: node_ref_list.hpp:174
size_t fill_polygon_unique(TIter it, TIter end)
Definition: factory.hpp:314
Linestring has reverse direction.
const_iterator cend() const
Definition: object.hpp:346
Definition: reader_iterator.hpp:39
const_iterator cbegin() const
Definition: object.hpp:342
TGeomImpl::ring_type ring_type
Definition: factory.hpp:190
const_iterator cend() const noexcept
Returns an iterator to the end.
Definition: node_ref_list.hpp:159
int epsg() const noexcept
Definition: factory.hpp:132
Linestring has same direction as way.
Definition: factory.hpp:57
double lat() const
Definition: location.hpp:205
void add_points(const osmium::OuterRing &nodes)
Definition: factory.hpp:151
TGeomImpl::point_type point_type
Definition: factory.hpp:186
constexpr osmium::object_id_type ref() const noexcept
Definition: node_ref.hpp:65
polygon_type create_polygon(const osmium::Way &way, use_nodes un=use_nodes::unique, direction dir=direction::forward)
Definition: factory.hpp:363
int64_t object_id_type
Type for OSM object (node, way, or relation) IDs.
Definition: types.hpp:45
Namespace for everything in the Osmium library.
Definition: assembler.hpp:59
TGeomImpl m_impl
Definition: factory.hpp:162
linestring_type create_linestring(const osmium::WayNodeList &wnl, use_nodes un=use_nodes::unique, direction dir=direction::forward)
Definition: factory.hpp:257
TProjection m_projection
Definition: factory.hpp:161
void polygon_start()
Definition: factory.hpp:300
Definition: coordinates.hpp:46
point_type create_point(const osmium::Location &location) const
Definition: factory.hpp:202
size_t fill_linestring_unique(TIter it, TIter end)
Definition: factory.hpp:240
int epsg() const
Definition: factory.hpp:192
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:136
void linestring_start()
Definition: factory.hpp:226
std::string proj_string() const
Definition: factory.hpp:196
osmium::object_id_type m_id
Definition: factory.hpp:60
TGeomImpl::multipolygon_type multipolygon_type
Definition: factory.hpp:189
Definition: location.hpp:79
osmium::Location & location() noexcept
Definition: node_ref.hpp:79
multipolygon_type create_multipolygon(const osmium::Area &area)
Definition: factory.hpp:374
size_t fill_linestring(TIter it, TIter end)
Definition: factory.hpp:231
polygon_type polygon_finish(size_t num_points)
Definition: factory.hpp:327
direction
Definition: factory.hpp:115
object_id_type id() const noexcept
Get ID of this object.
Definition: object.hpp:110
TGeomImpl::polygon_type polygon_type
Definition: factory.hpp:188
double lon() const
Definition: location.hpp:186
TGeomImpl::linestring_type linestring_type
Definition: factory.hpp:187
size_t fill_polygon(TIter it, TIter end)
Definition: factory.hpp:305
osmium::Location location() const noexcept
Definition: node.hpp:61
TProjection projection_type
Definition: factory.hpp:185
osmium::object_id_type id() const noexcept
Definition: factory.hpp:88
point_type create_point(const osmium::Node &node)
Definition: factory.hpp:206
use_nodes
Definition: factory.hpp:106
geometry_error(const std::string &message, const char *object_type="", osmium::object_id_type id=0)
Definition: factory.hpp:64
std::string m_message
Definition: factory.hpp:59
Definition: node_ref.hpp:50
const_reverse_iterator crend() const noexcept
Returns a reverse_iterator to the end.
Definition: node_ref_list.hpp:179
linestring_type create_linestring(const osmium::Way &way, use_nodes un=use_nodes::unique, direction dir=direction::forward)
Definition: factory.hpp:289
Coordinates operator()(osmium::Location location) const
Definition: factory.hpp:128
void set_id(const char *object_type, osmium::object_id_type id)
Definition: factory.hpp:77
polygon_type create_polygon(const osmium::WayNodeList &wnl, use_nodes un=use_nodes::unique, direction dir=direction::forward)
Definition: factory.hpp:331
Definition: factory.hpp:124