From 8befec18217d4c17437a296d2a9b4688e9b4ad46 Mon Sep 17 00:00:00 2001 From: vng Date: Thu, 14 Nov 2013 13:31:06 +0300 Subject: [PATCH] [generator] Treat place-island, place-islet as coastlines. --- generator/feature_generator.cpp | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/generator/feature_generator.cpp b/generator/feature_generator.cpp index 2f7fb54a8d..9f627eed20 100644 --- a/generator/feature_generator.cpp +++ b/generator/feature_generator.cpp @@ -264,6 +264,20 @@ class MainFeaturesEmitter string m_srcCoastsFile; uint32_t m_coastType; + vector m_islandTypes; + + // Treat islands as coastlines, because they don't have fill area draw style. + bool IsIsland(FeatureBuilder1 const & fb) const + { + if (!fb.IsGeometryClosed()) + return false; + + for (size_t i = 0; i < m_islandTypes.size(); ++i) + if (fb.HasType(m_islandTypes[i])) + return true; + + return false; + } template class CombinedEmitter { @@ -281,7 +295,8 @@ class MainFeaturesEmitter public: MainFeaturesEmitter(GenerateInfo const & info) { - m_coastType = classif().GetCoastType(); + Classificator const & c = classif(); + m_coastType = c.GetCoastType(); m_srcCoastsFile = info.m_tmpDir + WORLD_COASTS_FILE_NAME + info.m_datFileSuffix; @@ -297,6 +312,14 @@ public: } else { + char const * arr[][2] = { + { "place", "island" }, + { "place", "islet" } + }; + + for (size_t i = 0; i < ARRAY_SIZE(arr); ++i) + m_islandTypes.push_back(c.GetTypeByPath(vector(arr[i], arr[i] + 2))); + // 4-10 - level range for cells // 20000 - max points count per feature m_coasts.reset(new CoastlineFeaturesGenerator(m_coastType, 4, 10, 20000)); @@ -314,7 +337,7 @@ public: { if (m_coasts) { - if (fb.HasType(m_coastType)) + if (fb.HasType(m_coastType) || IsIsland(fb)) { CHECK ( fb.GetGeomType() != feature::GEOM_POINT, () );