diff --git a/generator/feature_sorter.cpp b/generator/feature_sorter.cpp index d721c23f11..7c9c54ca50 100644 --- a/generator/feature_sorter.cpp +++ b/generator/feature_sorter.cpp @@ -444,7 +444,7 @@ namespace feature return static_cast(fb); } - bool GenerateFinalFeatures(string const & datFilePath, bool bWorld) + bool GenerateFinalFeatures(string const & datFilePath, int mapType) { // rename input file Platform & platform = GetPlatform(); @@ -471,12 +471,16 @@ namespace feature { FileReader reader(tempDatFilePath); + bool const isWorld = (mapType != feature::DataHeader::country); + feature::DataHeader header; uint32_t coordBits = 27; - if (bWorld) + if (isWorld) coordBits -= (scales::GetUpperScale() - scales::GetUpperWorldScale()); + header.SetCodingParams(serial::CodingParams(coordBits, midPoints.GetCenter())); - header.SetScales(bWorld ? g_arrWorldScales : g_arrCountryScales); + header.SetScales(isWorld ? g_arrWorldScales : g_arrCountryScales); + header.SetType(static_cast(mapType)); FeaturesCollector2 collector(datFilePath, header); diff --git a/generator/feature_sorter.hpp b/generator/feature_sorter.hpp index 02e5279dcc..b10384314c 100644 --- a/generator/feature_sorter.hpp +++ b/generator/feature_sorter.hpp @@ -11,7 +11,7 @@ namespace feature { /// Final generation of data from input feature-dat-file - bool GenerateFinalFeatures(string const & datFile, bool bWorld); + bool GenerateFinalFeatures(string const & datFile, int mapType); template inline bool are_points_equal(PointT const & p1, PointT const & p2) diff --git a/generator/generator_tool/generator_tool.cpp b/generator/generator_tool/generator_tool.cpp index 5b2692a9cb..a76cef4551 100644 --- a/generator/generator_tool/generator_tool.cpp +++ b/generator/generator_tool/generator_tool.cpp @@ -160,8 +160,14 @@ int main(int argc, char ** argv) if (FLAGS_generate_geometry) { LOG(LINFO, ("Generating result features for ", datFile)); - if (!feature::GenerateFinalFeatures(datFile, - datFile == worldPath || datFile == worldCoastsPath)) + + int mapType = feature::DataHeader::country; + if (datFile == worldPath) + mapType = feature::DataHeader::world; + if (datFile == worldCoastsPath) + mapType = feature::DataHeader::worldcoasts; + + if (!feature::GenerateFinalFeatures(datFile, mapType)) { // If error - move to next bucket without index generation continue; diff --git a/indexer/data_header.cpp b/indexer/data_header.cpp index 0c193981d2..5b1c822e32 100644 --- a/indexer/data_header.cpp +++ b/indexer/data_header.cpp @@ -46,13 +46,12 @@ namespace feature { m_codingParams.Save(w); - //int64_t const base = m_codingParams.GetBasePointInt64(); - //WriteVarInt(w, m_bounds.first - base); - //WriteVarInt(w, m_bounds.second - base); - WriteToSink(w, m_bounds.first); - WriteToSink(w, m_bounds.second); + WriteVarInt(w, m_bounds.first); + WriteVarInt(w, m_bounds.second); w.Write(m_scales.data(), m_scales.size()); + + WriteVarInt(w, static_cast(m_type)); } void DataHeader::Load(ModelReaderPtr const & r) @@ -60,14 +59,13 @@ namespace feature ReaderSource src(r); m_codingParams.Load(src); - //int64_t const base = m_codingParams.GetBasePointInt64(); - //m_bounds.first = ReadVarInt(src) + base; - //m_bounds.second = ReadVarInt(src) + base; - m_bounds.first = ReadPrimitiveFromSource(src); - m_bounds.second = ReadPrimitiveFromSource(src); + m_bounds.first = ReadVarInt(src); + m_bounds.second = ReadVarInt(src); src.Read(m_scales.data(), m_scales.size()); + m_type = static_cast(ReadVarInt(src)); + m_ver = v2; } diff --git a/indexer/data_header.hpp b/indexer/data_header.hpp index 20680864f2..afca6ce7e8 100644 --- a/indexer/data_header.hpp +++ b/indexer/data_header.hpp @@ -50,7 +50,17 @@ namespace feature }; inline Version GetVersion() const { return m_ver; } + enum MapType { + world, + worldcoasts, + country + }; + + inline void SetType(MapType t) { m_type = t; } + inline MapType GetType() const { return m_type; } + private: Version m_ver; + MapType m_type; }; }