Libosmium
2.15.6
Fast and flexible C++ library for working with OpenStreetMap data
|
Go to the documentation of this file. 1 #ifndef OSMIUM_GEOM_FACTORY_HPP
2 #define OSMIUM_GEOM_FACTORY_HPP
67 std::runtime_error(message),
80 if (
m_id == 0 &&
id != 0) {
94 const char*
what() const noexcept
override {
139 return "+proj=longlat +datum=WGS84 +no_defs";
147 template <
typename TGeomImpl,
typename TProjection = IdentityProjection>
156 if (last_location != node_ref.location()) {
157 last_location = node_ref.location();
176 template <
typename... TArgs>
186 template <
typename... TArgs>
187 explicit GeometryFactory<TGeomImpl, TProjection>(TProjection&& projection, TArgs&&... args) :
218 e.
set_id(
"node", node.id());
235 m_impl.linestring_start();
238 template <
typename TIter>
240 size_t num_points = 0;
241 for (; it !=
end; ++it, ++num_points) {
247 template <
typename TIter>
249 size_t num_points = 0;
251 for (; it !=
end; ++it) {
252 if (last_location != it->location()) {
253 last_location = it->location();
262 return m_impl.linestring_finish(num_points);
267 size_t num_points = 0;
289 if (num_points < 2) {
300 e.
set_id(
"way", way.id());
311 template <
typename TIter>
313 size_t num_points = 0;
314 for (; it !=
end; ++it, ++num_points) {
320 template <
typename TIter>
322 size_t num_points = 0;
324 for (; it !=
end; ++it) {
325 if (last_location != it->location()) {
326 last_location = it->location();
335 return m_impl.polygon_finish(num_points);
340 size_t num_points = 0;
362 if (num_points < 4) {
373 e.
set_id(
"way", way.id());
382 size_t num_polygons = 0;
383 size_t num_rings = 0;
384 m_impl.multipolygon_start();
386 for (
const auto& item : area) {
389 if (num_polygons > 0) {
390 m_impl.multipolygon_polygon_finish();
392 m_impl.multipolygon_polygon_start();
393 m_impl.multipolygon_outer_ring_start();
395 m_impl.multipolygon_outer_ring_finish();
400 m_impl.multipolygon_inner_ring_start();
402 m_impl.multipolygon_inner_ring_finish();
408 if (num_rings == 0) {
412 m_impl.multipolygon_polygon_finish();
413 return m_impl.multipolygon_finish();
415 e.
set_id(
"area", area.id());
426 #endif // OSMIUM_GEOM_FACTORY_HPP
@ forward
Linestring has same direction as way.
Definition: factory.hpp:126
void set_id(const char *object_type, osmium::object_id_type id)
Definition: factory.hpp:79
@ backward
Linestring has reverse direction.
const_reverse_iterator crend() const noexcept
Returns a reverse_iterator to the end.
Definition: node_ref_list.hpp:234
void polygon_start()
Definition: factory.hpp:307
const_reverse_iterator crbegin() const noexcept
Returns a reverse_iterator to the beginning.
Definition: node_ref_list.hpp:229
use_nodes
Definition: factory.hpp:108
typename TGeomImpl::ring_type ring_type
Definition: factory.hpp:198
const char * what() const noexcept override
Definition: factory.hpp:94
const_iterator cend() const noexcept
Returns an iterator to the end.
Definition: node_ref_list.hpp:214
Definition: factory.hpp:59
int64_t object_id_type
Type for OSM object (node, way, or relation) IDs.
Definition: types.hpp:45
osmium::object_id_type m_id
Definition: factory.hpp:62
void linestring_start()
Definition: factory.hpp:234
std::string proj_string() const
Definition: factory.hpp:138
typename TGeomImpl::linestring_type linestring_type
Definition: factory.hpp:195
double lon() const
Definition: location.hpp:396
size_t fill_linestring_unique(TIter it, TIter end)
Definition: factory.hpp:248
typename TGeomImpl::polygon_type polygon_type
Definition: factory.hpp:196
std::string proj_string() const
Definition: factory.hpp:204
linestring_type create_linestring(const osmium::Way &way, use_nodes un=use_nodes::unique, direction dir=direction::forward)
Definition: factory.hpp:296
size_t fill_polygon(TIter it, TIter end)
Definition: factory.hpp:312
@ unique
Remove consecutive nodes with same location.
multipolygon_type create_multipolygon(const osmium::Area &area)
Definition: factory.hpp:380
polygon_type create_polygon(const osmium::WayNodeList &wnl, use_nodes un=use_nodes::unique, direction dir=direction::forward)
Definition: factory.hpp:338
linestring_type create_linestring(const osmium::WayNodeList &wnl, use_nodes un=use_nodes::unique, direction dir=direction::forward)
Definition: factory.hpp:265
Definition: factory.hpp:148
point_type create_point(const osmium::NodeRef &node_ref)
Definition: factory.hpp:223
void add_points(const osmium::NodeRefList &nodes)
Definition: factory.hpp:153
TGeomImpl m_impl
Definition: factory.hpp:164
osmium::Location & location() noexcept
Definition: node_ref.hpp:85
direction
Definition: factory.hpp:117
double lat() const
Definition: location.hpp:415
Definition: node_ref_list.hpp:52
Namespace for everything in the Osmium library.
Definition: assembler.hpp:53
osmium::object_id_type id() const noexcept
Definition: factory.hpp:90
Definition: coordinates.hpp:48
point_type create_point(const osmium::Location &location) const
Definition: factory.hpp:210
const_iterator cbegin() const noexcept
Returns an iterator to the beginning.
Definition: node_ref_list.hpp:209
point_type create_point(const osmium::Node &node)
Definition: factory.hpp:214
size_t fill_polygon_unique(TIter it, TIter end)
Definition: factory.hpp:321
Definition: location.hpp:271
TProjection projection_type
Definition: factory.hpp:192
Definition: location.hpp:551
typename TGeomImpl::point_type point_type
Definition: factory.hpp:194
polygon_type create_polygon(const osmium::Way &way, use_nodes un=use_nodes::unique, direction dir=direction::forward)
Definition: factory.hpp:369
polygon_type polygon_finish(size_t num_points)
Definition: factory.hpp:334
linestring_type linestring_finish(size_t num_points)
Definition: factory.hpp:261
typename TGeomImpl::multipolygon_type multipolygon_type
Definition: factory.hpp:197
InputIterator< Reader > end(Reader &)
Definition: reader_iterator.hpp:47
constexpr osmium::object_id_type ref() const noexcept
Definition: node_ref.hpp:71
size_t fill_linestring(TIter it, TIter end)
Definition: factory.hpp:239
geometry_error(const std::string &message, const char *object_type="", osmium::object_id_type id=0)
Definition: factory.hpp:66
int epsg() const noexcept
Definition: factory.hpp:134
Definition: node_ref.hpp:50
Coordinates operator()(osmium::Location location) const
Definition: factory.hpp:130
TProjection m_projection
Definition: factory.hpp:163
int epsg() const noexcept
Definition: factory.hpp:200
std::string m_message
Definition: factory.hpp:61