1 #ifndef OSMIUM_AREA_PROBLEM_REPORTER_OGR_HPP
2 #define OSMIUM_AREA_PROBLEM_REPORTER_OGR_HPP
47 #include <gdalcpp.hpp>
77 feature.set_field(
"obj_type", t);
79 feature.set_field(
"nodes", int32_t(
m_nodes));
83 gdalcpp::Feature feature(m_layer_perror, m_ogr_factory.
create_point(location));
85 feature.set_field(
"id1",
double(id1));
86 feature.set_field(
"id2",
double(id2));
87 feature.set_field(
"problem", problem_type);
88 feature.add_to_layer();
92 auto ogr_linestring = std::unique_ptr<OGRLineString>{
new OGRLineString{}};
93 ogr_linestring->addPoint(loc1.
lon(), loc1.
lat());
94 ogr_linestring->addPoint(loc2.
lon(), loc2.
lat());
96 gdalcpp::Feature feature(m_layer_lerror, std::move(ogr_linestring));
98 feature.set_field(
"id1", static_cast<double>(id1));
99 feature.set_field(
"id2", static_cast<double>(id2));
100 feature.set_field(
"problem", problem_type);
101 feature.add_to_layer();
107 m_layer_perror(dataset,
"perrors", wkbPoint),
108 m_layer_lerror(dataset,
"lerrors", wkbLineString),
109 m_layer_ways(dataset,
"ways", wkbLineString) {
115 .add_field(
"obj_type", OFTString, 1)
116 .add_field(
"obj_id", OFTInteger, 10)
117 .add_field(
"nodes", OFTInteger, 8)
118 .add_field(
"id1", OFTReal, 12, 1)
119 .add_field(
"id2", OFTReal, 12, 1)
120 .add_field(
"problem", OFTString, 30)
124 .add_field(
"obj_type", OFTString, 1)
125 .add_field(
"obj_id", OFTInteger, 10)
126 .add_field(
"nodes", OFTInteger, 8)
127 .add_field(
"id1", OFTReal, 12, 1)
128 .add_field(
"id2", OFTReal, 12, 1)
129 .add_field(
"problem", OFTString, 30)
133 .add_field(
"obj_type", OFTString, 1)
134 .add_field(
"obj_id", OFTInteger, 10)
135 .add_field(
"way_id", OFTInteger, 10)
136 .add_field(
"nodes", OFTInteger, 8)
143 write_point(
"duplicate_node", node_id1, node_id2, location);
147 write_point(
"touching_ring", node_id, 0, location);
152 write_point(
"intersection", way1_id, way2_id, intersection);
153 write_line(
"intersection", way1_id, way2_id, way1_seg_start, way1_seg_end);
154 write_line(
"intersection", way2_id, way1_id, way2_seg_start, way2_seg_end);
166 write_line(
"role_should_be_outer", way_id, 0, seg_start, seg_end);
170 write_line(
"role_should_be_inner", way_id, 0, seg_start, seg_end);
180 feature.set_field(
"id1", int32_t(way.
id()));
181 feature.set_field(
"id2", 0);
182 feature.set_field(
"problem",
"way_in_multiple_rings");
183 feature.add_to_layer();
196 feature.set_field(
"id1", int32_t(way.
id()));
197 feature.set_field(
"id2", 0);
198 feature.set_field(
"problem",
"inner_with_same_tags");
199 feature.add_to_layer();
210 const auto& first_nr = way.
nodes()[0];
211 write_point(
"single_node_in_way", way.
id(), first_nr.ref(), first_nr.location());
217 feature.set_field(
"way_id", int32_t(way.
id()));
218 feature.add_to_layer();
230 #endif // OSMIUM_AREA_PROBLEM_REPORTER_OGR_HPP
WayNodeList & nodes()
Definition: way.hpp:78
void report_role_should_be_outer(osmium::object_id_type way_id, osmium::Location seg_start, osmium::Location seg_end) override
Definition: problem_reporter_ogr.hpp:165
void report_touching_ring(osmium::object_id_type node_id, osmium::Location location) override
Definition: problem_reporter_ogr.hpp:146
Definition: factory.hpp:148
void write_point(const char *problem_type, osmium::object_id_type id1, osmium::object_id_type id2, osmium::Location location)
Definition: problem_reporter_ogr.hpp:82
osmium::object_id_type m_object_id
Definition: problem_reporter.hpp:68
void report_way(const osmium::Way &way) override
Definition: problem_reporter_ogr.hpp:205
void report_intersection(osmium::object_id_type way1_id, osmium::Location way1_seg_start, osmium::Location way1_seg_end, osmium::object_id_type way2_id, osmium::Location way2_seg_start, osmium::Location way2_seg_end, osmium::Location intersection) override
Definition: problem_reporter_ogr.hpp:150
Definition: entity_bits.hpp:72
~ProblemReporterOGR() override=default
void set_object(gdalcpp::Feature &feature)
Definition: problem_reporter_ogr.hpp:75
void report_ring_not_closed(const osmium::NodeRef &nr, const osmium::Way *way=nullptr) override
Definition: problem_reporter_ogr.hpp:161
void report_inner_with_same_tags(const osmium::Way &way) override
Definition: problem_reporter_ogr.hpp:189
Definition: factory.hpp:59
double lat() const
Definition: location.hpp:390
constexpr osmium::object_id_type ref() const noexcept
Definition: node_ref.hpp:65
gdalcpp::Layer m_layer_ways
Definition: problem_reporter_ogr.hpp:73
bool empty() const noexcept
Definition: node_ref_list.hpp:73
gdalcpp::Layer m_layer_lerror
Definition: problem_reporter_ogr.hpp:72
ProblemReporterOGR(gdalcpp::Dataset &dataset)
Definition: problem_reporter_ogr.hpp:106
Namespace for everything in the Osmium library.
Definition: assembler.hpp:73
linestring_type create_linestring(const osmium::WayNodeList &wnl, use_nodes un=use_nodes::unique, direction dir=direction::forward)
Definition: factory.hpp:260
void report_duplicate_segment(const osmium::NodeRef &nr1, const osmium::NodeRef &nr2) override
Definition: problem_reporter_ogr.hpp:157
Definition: problem_reporter.hpp:60
point_type create_point(const osmium::Location &location) const
Definition: factory.hpp:205
void report_duplicate_node(osmium::object_id_type node_id1, osmium::object_id_type node_id2, osmium::Location location) override
Definition: problem_reporter_ogr.hpp:142
osmium::item_type m_object_type
Definition: problem_reporter.hpp:65
int64_t object_id_type
Type for OSM object (node, way, or relation) IDs.
Definition: types.hpp:45
void write_line(const char *problem_type, osmium::object_id_type id1, osmium::object_id_type id2, osmium::Location loc1, osmium::Location loc2)
Definition: problem_reporter_ogr.hpp:91
Definition: problem_reporter_ogr.hpp:67
void report_way_in_multiple_rings(const osmium::Way &way) override
Definition: problem_reporter_ogr.hpp:173
Definition: location.hpp:266
osmium::Location & location() noexcept
Definition: node_ref.hpp:79
osmium::geom::OGRFactory m_ogr_factory
Definition: problem_reporter_ogr.hpp:69
gdalcpp::Layer m_layer_perror
Definition: problem_reporter_ogr.hpp:71
object_id_type id() const noexcept
Get ID of this object.
Definition: object.hpp:118
double lon() const
Definition: location.hpp:371
char item_type_to_char(const item_type type) noexcept
Definition: item_type.hpp:124
void report_role_should_be_inner(osmium::object_id_type way_id, osmium::Location seg_start, osmium::Location seg_end) override
Definition: problem_reporter_ogr.hpp:169
size_t m_nodes
Definition: problem_reporter.hpp:71
Definition: node_ref.hpp:50
size_type size() const noexcept
Definition: node_ref_list.hpp:82