void area(const osmium::Area& area) { if (m_first_out) { m_out << "[\n"; m_first_out = false; } else { m_out << ",\n"; } m_out << "{\n \"test_id\": " << (area.orig_id() / 1000) << ",\n \"area_id\": " << area.id() << ",\n \"from_id\": " << area.orig_id() << ",\n \"from_type\": \"" << (area.from_way() ? "way" : "relation") << "\",\n \"wkt\": \""; try { std::string wkt = m_wkt_factory.create_multipolygon(area); m_out << wkt << "\",\n \"tags\": {"; auto tagmap = create_map(area.tags()); bool first = true; for (auto& tag : tagmap) { if (first) { first = false; } else { m_out << ", "; } m_out << '"' << tag.first << "\": \"" << tag.second << '"'; } m_out << "}\n}"; } catch (osmium::geometry_error&) { m_out << "INVALID\"\n}"; } try { std::unique_ptr<OGRMultiPolygon> ogr_polygon = m_ogr_factory.create_multipolygon(area); OGRFeature* feature = OGRFeature::CreateFeature(m_layer_polygon->GetLayerDefn()); feature->SetGeometry(ogr_polygon.get()); feature->SetField("id", static_cast<int>(area.orig_id())); std::string from_type; if (area.from_way()) { from_type = "w"; } else { from_type = "r"; } feature->SetField("from_type", from_type.c_str()); if (m_layer_polygon->CreateFeature(feature) != OGRERR_NONE) { std::cerr << "Failed to create feature.\n"; exit(1); } OGRFeature::DestroyFeature(feature); } catch (osmium::geometry_error&) { std::cerr << "Ignoring illegal geometry for area " << area.id() << " created from " << (area.from_way() ? "way" : "relation") << " with id=" << area.orig_id() << ".\n"; } }
void errormsg(const osmium::Area &area) { cerr << "IndicateFalsePositives: Error at "; if (area.from_way()) cerr << "way: "; else cerr << "relation: "; cerr << area.orig_id() << endl; }
void area(const osmium::Area& area) { try { gdalcpp::Feature feature{m_layer_multipolygon, m_factory.create_multipolygon(area)}; feature.set_field("id", int32_t(area.id())); add_feature(feature, area); } catch (const osmium::geometry_error&) { std::cerr << "Ignoring illegal geometry for area " << area.id() << " created from " << (area.from_way() ? "way" : "relation") << " with id=" << area.orig_id() << ".\n"; } }
void area(const osmium::Area& area) { const char* building = area.tags()["building"]; if (building) { try { std::unique_ptr<OGRMultiPolygon> ogr_polygon = m_factory.create_multipolygon(area); OGRFeature* feature = OGRFeature::CreateFeature(m_layer_polygon->GetLayerDefn()); feature->SetGeometry(ogr_polygon.get()); feature->SetField("id", static_cast<int>(area.id())); feature->SetField("type", building); std::string type = ""; if (area.from_way()) { type += "w"; } else { type += "r"; } feature->SetField("type", type.c_str()); if (m_layer_polygon->CreateFeature(feature) != OGRERR_NONE) { std::cerr << "Failed to create feature.\n"; exit(1); } OGRFeature::DestroyFeature(feature); } catch (osmium::geometry_error&) { std::cerr << "Ignoring illegal geometry for area " << area.id() << " created from " << (area.from_way() ? "way" : "relation") << " with id=" << area.orig_id() << ".\n"; } } }