Fix coastlines generation.

This commit is contained in:
vng 2012-04-18 13:11:30 +03:00 committed by Alex Zolotarev
parent 5a64fa18b9
commit e1b336bcb9
2 changed files with 13 additions and 7 deletions

View file

@ -373,7 +373,7 @@ public:
}
template <class TNodesHolder, template <class, class> class TParser>
template <class TNodesHolder>
bool GenerateImpl(GenerateInfo & info)
{
try
@ -385,7 +385,8 @@ bool GenerateImpl(GenerateInfo & info)
holder.LoadIndex();
MainFeaturesEmitter bucketer(info);
TParser<MainFeaturesEmitter, holder_t> parser(bucketer, holder);
SecondPassParserUsual<MainFeaturesEmitter, holder_t> 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<points_in_map, SecondPassParserUsual>(info);
return GenerateImpl<points_in_map>(info);
else
return GenerateImpl<points_in_file, SecondPassParserUsual>(info);
return GenerateImpl<points_in_file>(info);
}
}

View file

@ -310,6 +310,8 @@ class SecondPassParserUsual : public SecondPassParserBase<TEmitter, THolder>
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)
{
}
};