diff options
Diffstat (limited to 'generator/feature_sorter.cpp')
-rw-r--r-- | generator/feature_sorter.cpp | 46 |
1 files changed, 33 insertions, 13 deletions
diff --git a/generator/feature_sorter.cpp b/generator/feature_sorter.cpp index b5997d1566..aee5ae1e7c 100644 --- a/generator/feature_sorter.cpp +++ b/generator/feature_sorter.cpp @@ -2,6 +2,7 @@ #include "feature_generator.hpp" #include "feature_builder.hpp" #include "tesselator.hpp" +#include "gen_mwm_info.hpp" #include "../defines.hpp" @@ -89,6 +90,8 @@ namespace feature DataHeader m_header; + gen::OsmID2FeatureID m_osm2ft; + public: FeaturesCollector2(string const & fName, DataHeader const & header) : FeaturesCollector(fName + DATA_FILE_TAG), m_writer(fName), m_header(header) @@ -144,6 +147,12 @@ namespace feature } m_writer.Finish(); + + if (m_header.GetType() == DataHeader::country) + { + FileWriter osm2ftWriter(m_writer.GetFileName() + OSM2FEATURE_FILE_EXTENSION); + m_osm2ft.Flush(osm2ftWriter); + } } private: @@ -493,7 +502,11 @@ namespace feature { fb.Serialize(holder.m_buffer, m_header.GetDefCodingParams()); - WriteFeatureBase(holder.m_buffer.m_buffer, fb); + uint32_t const ftID = WriteFeatureBase(holder.m_buffer.m_buffer, fb); + + uint64_t const osmID = fb.GetWayIDForRouting(); + if (osmID != 0) + m_osm2ft.Add(make_pair(osmID, ftID)); } } }; @@ -565,24 +578,31 @@ namespace feature reader.ReadAsString(buffer); strings::Tokenize(buffer, "|", DoStoreLanguages(header)); } - catch (Reader::OpenException const &) + catch (Reader::Exception const &) { - LOG(LWARNING, ("No language file for country ", name)); + LOG(LWARNING, ("No language file for country:", name)); } - // Transform features from row format to optimized format. - FeaturesCollector2 collector(datFilePath, header); - - for (size_t i = 0; i < midPoints.m_vec.size(); ++i) + // Transform features from raw format to optimized format. + try { - ReaderSource<FileReader> src(reader); - src.Skip(midPoints.m_vec[i].second); + FeaturesCollector2 collector(datFilePath, header); + + for (size_t i = 0; i < midPoints.m_vec.size(); ++i) + { + ReaderSource<FileReader> src(reader); + src.Skip(midPoints.m_vec[i].second); - FeatureBuilder1 f; - ReadFromSourceRowFormat(src, f); + FeatureBuilder1 f; + ReadFromSourceRowFormat(src, f); - // emit the feature - collector(GetFeatureBuilder2(f)); + // emit the feature + collector(GetFeatureBuilder2(f)); + } + } + catch (Writer::Exception const & ex) + { + LOG(LCRITICAL, ("MWM writing error:", ex.Msg())); } // at this point files should be closed |