From e1b336bcb90239ef63898ddaa12587b595414f62 Mon Sep 17 00:00:00 2001 From: vng Date: Wed, 18 Apr 2012 13:11:30 +0300 Subject: [PATCH] Fix coastlines generation. --- generator/feature_generator.cpp | 9 +++++---- generator/osm_element.hpp | 11 ++++++++--- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/generator/feature_generator.cpp b/generator/feature_generator.cpp index f02924bfaa..e1d8678594 100644 --- a/generator/feature_generator.cpp +++ b/generator/feature_generator.cpp @@ -373,7 +373,7 @@ public: } -template class TParser> +template bool GenerateImpl(GenerateInfo & info) { try @@ -385,7 +385,8 @@ bool GenerateImpl(GenerateInfo & info) holder.LoadIndex(); MainFeaturesEmitter bucketer(info); - TParser parser(bucketer, holder); + SecondPassParserUsual parser( + bucketer, holder, info.m_makeCoasts ? classif().GetCoastType() : 0); ParseXMLFromStdIn(parser); bucketer.Finish(); @@ -403,9 +404,9 @@ bool GenerateImpl(GenerateInfo & info) bool GenerateFeatures(GenerateInfo & info, bool lightNodes) { if (lightNodes) - return GenerateImpl(info); + return GenerateImpl(info); else - return GenerateImpl(info); + return GenerateImpl(info); } } diff --git a/generator/osm_element.hpp b/generator/osm_element.hpp index c6f9e4fefd..d8ae9de9e9 100644 --- a/generator/osm_element.hpp +++ b/generator/osm_element.hpp @@ -310,6 +310,8 @@ class SecondPassParserUsual : public SecondPassParserBase ft.SetParams(fValue); } + uint32_t m_coastType; + protected: virtual void EmitElement(XMLElement * p) { @@ -334,7 +336,10 @@ protected: } else if (p->name == "way") { - bool const isLine = feature::IsDrawableLike(fValue.m_Types, feature::FEATURE_TYPE_LINE); + bool const isLine = feature::IsDrawableLike(fValue.m_Types, feature::FEATURE_TYPE_LINE) || + // this is important fix: we need to process all coastlines even without linear drawing rules + (m_coastType != 0 && fValue.IsTypeExist(m_coastType)); + bool const isArea = feature::IsDrawableLike(fValue.m_Types, feature::FEATURE_TYPE_AREA); if (!isLine && !isArea) @@ -448,8 +453,8 @@ protected: } public: - SecondPassParserUsual(TEmitter & emitter, THolder & holder) - : base_type(emitter, holder) + SecondPassParserUsual(TEmitter & emitter, THolder & holder, uint32_t coastType) + : base_type(emitter, holder), m_coastType(coastType) { } };