1 #ifndef OSMIUM_AREA_PROBLEM_REPORTER_OGR_HPP
2 #define OSMIUM_AREA_PROBLEM_REPORTER_OGR_HPP
46 # pragma warning(push)
47 # pragma warning(disable : 4458)
49 # pragma GCC diagnostic push
51 # pragma GCC diagnostic ignored "-Wdocumentation-unknown-command"
53 # pragma GCC diagnostic ignored "-Wfloat-equal"
54 # pragma GCC diagnostic ignored "-Wold-style-cast"
55 # pragma GCC diagnostic ignored "-Wpadded"
56 # pragma GCC diagnostic ignored "-Wredundant-decls"
57 # pragma GCC diagnostic ignored "-Wshadow"
61 #include <ogrsf_frmts.h>
66 # pragma GCC diagnostic pop
95 OGRFeature* feature = OGRFeature::CreateFeature(m_layer_perror->GetLayerDefn());
96 std::unique_ptr<OGRPoint> ogr_point = m_ogr_factory.
create_point(location);
97 feature->SetGeometry(ogr_point.get());
98 feature->SetField(
"id1", static_cast<double>(id1));
99 feature->SetField(
"id2", static_cast<double>(id2));
100 feature->SetField(
"problem_type", problem_type);
102 if (m_layer_perror->CreateFeature(feature) != OGRERR_NONE) {
103 std::runtime_error(
"Failed to create feature on layer 'perrors'");
106 OGRFeature::DestroyFeature(feature);
110 std::unique_ptr<OGRPoint> ogr_point1 = m_ogr_factory.
create_point(loc1);
111 std::unique_ptr<OGRPoint> ogr_point2 = m_ogr_factory.
create_point(loc2);
112 std::unique_ptr<OGRLineString> ogr_linestring = std::unique_ptr<OGRLineString>(
new OGRLineString());
113 ogr_linestring->addPoint(ogr_point1.get());
114 ogr_linestring->addPoint(ogr_point2.get());
115 OGRFeature* feature = OGRFeature::CreateFeature(m_layer_lerror->GetLayerDefn());
116 feature->SetGeometry(ogr_linestring.get());
117 feature->SetField(
"id1", static_cast<double>(id1));
118 feature->SetField(
"id2", static_cast<double>(id2));
119 feature->SetField(
"problem_type", problem_type);
121 if (m_layer_lerror->CreateFeature(feature) != OGRERR_NONE) {
122 std::runtime_error(
"Failed to create feature on layer 'lerrors'");
125 OGRFeature::DestroyFeature(feature);
131 m_data_source(data_source) {
133 OGRSpatialReference sparef;
134 sparef.SetWellKnownGeogCS(
"WGS84");
136 m_layer_perror = m_data_source->CreateLayer(
"perrors", &sparef, wkbPoint,
nullptr);
137 if (!m_layer_perror) {
138 std::runtime_error(
"Layer creation failed for layer 'perrors'");
141 OGRFieldDefn layer_perror_field_id1(
"id1", OFTReal);
142 layer_perror_field_id1.SetWidth(10);
144 if (m_layer_perror->CreateField(&layer_perror_field_id1) != OGRERR_NONE) {
145 std::runtime_error(
"Creating field 'id1' failed for layer 'perrors'");
148 OGRFieldDefn layer_perror_field_id2(
"id2", OFTReal);
149 layer_perror_field_id2.SetWidth(10);
151 if (m_layer_perror->CreateField(&layer_perror_field_id2) != OGRERR_NONE) {
152 std::runtime_error(
"Creating field 'id2' failed for layer 'perrors'");
155 OGRFieldDefn layer_perror_field_problem_type(
"problem_type", OFTString);
156 layer_perror_field_problem_type.SetWidth(30);
158 if (m_layer_perror->CreateField(&layer_perror_field_problem_type) != OGRERR_NONE) {
159 std::runtime_error(
"Creating field 'problem_type' failed for layer 'perrors'");
164 m_layer_lerror = m_data_source->CreateLayer(
"lerrors", &sparef, wkbLineString,
nullptr);
165 if (!m_layer_lerror) {
166 std::runtime_error(
"Layer creation failed for layer 'lerrors'");
169 OGRFieldDefn layer_lerror_field_id1(
"id1", OFTReal);
170 layer_lerror_field_id1.SetWidth(10);
172 if (m_layer_lerror->CreateField(&layer_lerror_field_id1) != OGRERR_NONE) {
173 std::runtime_error(
"Creating field 'id1' failed for layer 'lerrors'");
176 OGRFieldDefn layer_lerror_field_id2(
"id2", OFTReal);
177 layer_lerror_field_id2.SetWidth(10);
179 if (m_layer_lerror->CreateField(&layer_lerror_field_id2) != OGRERR_NONE) {
180 std::runtime_error(
"Creating field 'id2' failed for layer 'lerrors'");
183 OGRFieldDefn layer_lerror_field_problem_type(
"problem_type", OFTString);
184 layer_lerror_field_problem_type.SetWidth(30);
186 if (m_layer_lerror->CreateField(&layer_lerror_field_problem_type) != OGRERR_NONE) {
187 std::runtime_error(
"Creating field 'problem_type' failed for layer 'lerrors'");
194 write_point(
"duplicate_node", node_id1, node_id2, location);
223 #endif // OSMIUM_AREA_PROBLEM_REPORTER_OGR_HPP
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:209
Definition: factory.hpp:146
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:94
ProblemReporterOGR(OGRDataSource *data_source)
Definition: problem_reporter_ogr.hpp:130
osmium::object_id_type m_object_id
Definition: problem_reporter.hpp:63
point_type create_point(const osmium::Location location) const
Definition: factory.hpp:201
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:197
Definition: entity_bits.hpp:67
OGRLayer * m_layer_perror
Definition: problem_reporter_ogr.hpp:91
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:55
Definition: problem_reporter.hpp:55
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:193
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:109
Definition: problem_reporter_ogr.hpp:85
OGRLayer * m_layer_lerror
Definition: problem_reporter_ogr.hpp:92
Definition: location.hpp:79
osmium::geom::OGRFactory m_ogr_factory
Definition: problem_reporter_ogr.hpp:87
virtual ~ProblemReporterOGR()=default
OGRDataSource * m_data_source
Definition: problem_reporter_ogr.hpp:89
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:213
void report_ring_not_closed(osmium::Location end1, osmium::Location end2) override
Definition: problem_reporter_ogr.hpp:204