From 7ec21303ae36fb14bedd9ecd36c64a0dbf5eea6b Mon Sep 17 00:00:00 2001 From: Anatoly Serdtcev Date: Thu, 20 Jun 2019 12:46:25 +0300 Subject: [PATCH] [generator:regions] Fix for capital node --- generator/regions/collector_region_info.cpp | 2 +- generator/regions/country_specifier.cpp | 8 ++++++-- generator/regions/regions_builder.cpp | 7 ++++++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/generator/regions/collector_region_info.cpp b/generator/regions/collector_region_info.cpp index 94361bd5f2..11b920ed4a 100644 --- a/generator/regions/collector_region_info.cpp +++ b/generator/regions/collector_region_info.cpp @@ -76,7 +76,7 @@ void CollectorRegionInfo::CollectFeature(const FeatureBuilder &, OsmElement cons FillRegionData(osmId, el, regionData); m_mapRegionData.emplace(osmId, regionData); // If the region is a country. - if (regionData.m_adminLevel == AdminLevel::Two) + if (regionData.m_place == PlaceType::Country || regionData.m_adminLevel == AdminLevel::Two) { IsoCode isoCode; FillIsoCode(osmId, el, isoCode); diff --git a/generator/regions/country_specifier.cpp b/generator/regions/country_specifier.cpp index 9dff18c843..fb673961ab 100644 --- a/generator/regions/country_specifier.cpp +++ b/generator/regions/country_specifier.cpp @@ -6,12 +6,16 @@ namespace regions { PlaceLevel CountrySpecifier::GetLevel(Region const & region) const { - auto const placeLevel = GetLevel(region.GetPlaceType()); + auto const placeType = region.GetPlaceType(); + auto const placeLevel = GetLevel(placeType); if (placeLevel != PlaceLevel::Unknown) return placeLevel; - if (region.GetAdminLevel() == AdminLevel::Two) + if (region.GetAdminLevel() == AdminLevel::Two && + (placeType == PlaceType::Country || placeType == PlaceType::Unknown)) + { return PlaceLevel::Country; + } return PlaceLevel::Unknown; } diff --git a/generator/regions/regions_builder.cpp b/generator/regions/regions_builder.cpp index 154c13480a..d9245a570b 100644 --- a/generator/regions/regions_builder.cpp +++ b/generator/regions/regions_builder.cpp @@ -39,7 +39,12 @@ RegionsBuilder::Regions RegionsBuilder::ExtractCountriesOuters(Regions & regions Regions countriesOuters; auto const isCountry = [](Region const & region) { - return AdminLevel::Two == region.GetAdminLevel(); + auto const placeType = region.GetPlaceType(); + if (placeType == PlaceType::Country) + return true; + + auto const adminLevel = region.GetAdminLevel(); + return adminLevel == AdminLevel::Two && placeType == PlaceType::Unknown; }; std::copy_if(std::begin(regions), std::end(regions), std::back_inserter(countriesOuters), isCountry);