void way(const osmium::Way& way) { m_length += osmium::geom::haversine::distance(way.nodes()); try { std::unique_ptr<OGRLineString> ogrlinestring = m_factory.create_linestring(way); gdalcpp::Feature feature(m_layer_ways, std::move(ogrlinestring)); feature.set_field("way_id", std::to_string(way.id()).c_str()); feature.set_field("name", way.tags().get_value_by_key("name")); feature.set_field("source", way.tags().get_value_by_key("source")); const bool bogus = way.tags().has_tag("coastline", "bogus"); feature.set_field("bogus", bogus ? "t" : "f"); feature.add_to_layer(); } catch (const osmium::geometry_error&) { std::cerr << "Ignoring illegal geometry for way " << way.id() << ".\n"; } }
void way(const osmium::Way& way) { try { std::unique_ptr<OGRLineString> ogr_linestring = m_ogr_factory.create_linestring(way); OGRFeature* feature = OGRFeature::CreateFeature(m_layer_linestring->GetLayerDefn()); feature->SetGeometry(ogr_linestring.get()); feature->SetField("id", static_cast<double>(way.id())); feature->SetField("type", way.tags().get_value_by_key("type")); if (m_layer_linestring->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 way " << way.id() << ".\n"; } }