diff --git a/generator/feature_maker.cpp b/generator/feature_maker.cpp index 483cf916e..762ad1c59 100644 --- a/generator/feature_maker.cpp +++ b/generator/feature_maker.cpp @@ -51,7 +51,13 @@ std::optional FeatureMakerSimple::GetOrigin(OsmElement const & e) co } else { - CHECK(!e.m_members.empty(), (e.m_id)); + if (e.m_members.empty()) + { + // Such relations are considered invalid but could be present in OSM data still, + // see https://wiki.openstreetmap.org/wiki/Empty_relations + LOG(LWARNING, ("Invalid relation with no members", e.m_id)); + return {}; + } for (auto const & m : e.m_members) { if (m.m_type == OsmElement::EntityType::Node) diff --git a/generator/osm2type.cpp b/generator/osm2type.cpp index 87eca1dd6..36a0ad820 100644 --- a/generator/osm2type.cpp +++ b/generator/osm2type.cpp @@ -1016,6 +1016,7 @@ void PreprocessElement(OsmElement * p, CalculateOriginFnT const & calcOrg) if (value != "province") return; + ///@todo(pastk) some invalid relations might be empty so this might fail. CHECK(calcOrg, ()); auto const org = calcOrg(p); if (org && s_countriesChecker.IsTransformToState(*org)) @@ -1471,6 +1472,7 @@ void GetNameAndType(OsmElement * p, FeatureBuilderParams & params, static CityBBox s_cityBBox; + ///@todo(pastk) some invalid relations might be empty so this might fail. CHECK(calcOrg, ()); auto const org = calcOrg(p); if (org && s_cityBBox.IsInside(*org))