Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvng <viktor.govako@gmail.com>2011-08-31 16:37:00 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 01:22:48 +0300
commit8d9b7c1589115d414e9fda74a944bad4d5a6fedc (patch)
tree561744601b89df7faad6dfbba2c3da9fa2686bfd
parent718fd2960ee25ff545a3e7c638583a7e3e17af68 (diff)
- Remove old code (mapped ways routine).
- Some minor code fixes.
-rw-r--r--generator/data_cache_file.hpp36
-rw-r--r--generator/data_generator.cpp13
-rw-r--r--generator/feature_builder.cpp8
-rw-r--r--generator/feature_builder.hpp3
-rw-r--r--generator/feature_generator.cpp26
-rw-r--r--generator/feature_generator.hpp12
-rw-r--r--generator/first_pass_parser.hpp17
-rw-r--r--generator/generator_tool/generator_tool.cpp6
-rw-r--r--generator/osm_decl.cpp38
-rw-r--r--generator/osm_decl.hpp11
-rw-r--r--generator/polygonizer.hpp19
-rw-r--r--generator/world_map_generator.hpp32
12 files changed, 49 insertions, 172 deletions
diff --git a/generator/data_cache_file.hpp b/generator/data_cache_file.hpp
index b8ef6ac5ba..c19c709534 100644
--- a/generator/data_cache_file.hpp
+++ b/generator/data_cache_file.hpp
@@ -194,36 +194,6 @@ namespace cache
}
};
- class MappedWay
- {
- public:
-
- enum WayType
- {
- coast_direct = 0,
- empty_direct = 1,
- coast_opposite = 2,
- empty_opposite = 3
- };
-
- MappedWay() : m_id(0) {}
- MappedWay(uint64_t id, WayType type) : m_id((id << 2) | type)
- {
- CHECK_EQUAL(0, id & 0xC000000000000000ULL, ("Highest 2 bits should be 0.", id));
- }
-
- bool operator<(MappedWay const & r) const
- {
- return m_id < r.m_id;
- }
-
- uint64_t GetId() const { return m_id >> 2; }
- WayType GetType() const { return static_cast<WayType>(m_id & 3); }
-
- private:
- uint64_t m_id;
- };
- STATIC_ASSERT(sizeof(MappedWay) == 8);
template <class TNodesHolder, class TData, class TFile>
class BaseFileHolder
@@ -238,17 +208,13 @@ namespace cache
typedef detail::file_map_t<TFile, uint64_t> offset_map_t;
offset_map_t m_nodes2rel, m_ways2rel;
- typedef detail::file_map_t<TFile, MappedWay> ways_map_t;
- ways_map_t m_mappedWays;
-
public:
BaseFileHolder(TNodesHolder & nodes, string const & dir)
: m_nodes(nodes),
m_ways(dir + WAYS_FILE),
m_relations(dir + RELATIONS_FILE),
m_nodes2rel(dir + NODES_FILE + ID2REL_EXT),
- m_ways2rel(dir + WAYS_FILE + ID2REL_EXT),
- m_mappedWays(dir + MAPPED_WAYS)
+ m_ways2rel(dir + WAYS_FILE + ID2REL_EXT)
{
}
};
diff --git a/generator/data_generator.cpp b/generator/data_generator.cpp
index 14cbdfb8f8..3100708201 100644
--- a/generator/data_generator.cpp
+++ b/generator/data_generator.cpp
@@ -8,6 +8,7 @@
#include "../std/bind.hpp"
+
namespace data
{
@@ -46,17 +47,6 @@ public:
add_id2rel_vector(this->m_ways2rel, id, e.ways);
}
- void AddMappedWay(user_id_t id, WayElement const & e, bool emptyTags)
- {
- typedef cache::MappedWay way_t;
-
- way_t::WayType const directType = (emptyTags ? way_t::empty_direct : way_t::coast_direct);
- way_t::WayType const oppositeType = (emptyTags ? way_t::empty_opposite : way_t::coast_opposite);
-
- this->m_mappedWays.write(e.nodes.front(), way_t(id, directType)); // direct
- this->m_mappedWays.write(e.nodes.back(), way_t(id, oppositeType)); // opposite
- }
-
void SaveIndex()
{
this->m_ways.SaveOffsets();
@@ -64,7 +54,6 @@ public:
this->m_nodes2rel.flush_to_file();
this->m_ways2rel.flush_to_file();
- this->m_mappedWays.flush_to_file();
}
};
diff --git a/generator/feature_builder.cpp b/generator/feature_builder.cpp
index 50f6f57c22..a383f1ba39 100644
--- a/generator/feature_builder.cpp
+++ b/generator/feature_builder.cpp
@@ -273,6 +273,14 @@ void FeatureBuilder1::AddOsmId(string const & type, uint64_t osmId)
m_osmIds.push_back(osm::OsmId(type, osmId));
}
+int FeatureBuilder1::GetMinFeatureDrawScale() const
+{
+ int const minScale = feature::MinDrawableScaleForFeature(GetFeatureBase());
+
+ // some features become invisible after merge processing, so -1 is possible
+ return (minScale == -1 ? 1000 : minScale);
+}
+
string debug_print(FeatureBuilder1 const & f)
{
ostringstream out;
diff --git a/generator/feature_builder.hpp b/generator/feature_builder.hpp
index 6f8563c4bb..5df9b6b82d 100644
--- a/generator/feature_builder.hpp
+++ b/generator/feature_builder.hpp
@@ -8,6 +8,7 @@
#include "../std/bind.hpp"
+
namespace serial { class CodingParams; }
/// Used for serialization\deserialization of features during --generate_features.
@@ -86,6 +87,8 @@ public:
/// For OSM debugging, store original OSM id
void AddOsmId(string const & type, uint64_t osmId);
+ int GetMinFeatureDrawScale() const;
+
protected:
/// Used for feature debugging
vector<osm::OsmId> m_osmIds;
diff --git a/generator/feature_generator.cpp b/generator/feature_generator.cpp
index 5e8dbdd292..863d302d86 100644
--- a/generator/feature_generator.cpp
+++ b/generator/feature_generator.cpp
@@ -3,6 +3,7 @@
#include "osm_element.hpp"
#include "polygonizer.hpp"
#include "osm_decl.hpp"
+#include "generate_info.hpp"
#include "../defines.hpp"
@@ -31,7 +32,6 @@ class FileHolder : public cache::BaseFileHolder<TNodesHolder, cache::DataFileRea
typedef cache::BaseFileHolder<TNodesHolder, reader_t, FileReader> base_type;
typedef typename base_type::offset_map_t offset_map_t;
- typedef typename base_type::ways_map_t ways_map_t;
typedef typename base_type::user_id_t user_id_t;
@@ -91,23 +91,6 @@ public:
return this->m_ways.Read(id, e);
}
- bool GetNextWay(user_id_t & prevWay, user_id_t node, WayElement & e)
- {
- typedef typename ways_map_t::iter_t iter_t;
- pair<iter_t, iter_t> range = this->m_mappedWays.GetRange(node);
- for (; range.first != range.second; ++range.first)
- {
- cache::MappedWay const & w = range.first->second;
- if (w.GetType() != cache::MappedWay::coast_opposite && w.GetId() != prevWay)
- {
- this->m_ways.Read(w.GetId(), e);
- prevWay = w.GetId();
- return true;
- }
- }
- return false;
- }
-
template <class ToDo> void ForEachRelationByWay(user_id_t id, ToDo & toDo)
{
process_relation<ToDo> processor(this->m_relations, toDo);
@@ -133,7 +116,6 @@ public:
this->m_nodes2rel.read_to_memory();
this->m_ways2rel.read_to_memory();
- this->m_mappedWays.read_to_memory();
}
};
@@ -146,12 +128,6 @@ FeaturesCollector::FeaturesCollector(string const & fName)
{
}
-FeaturesCollector::FeaturesCollector(string const & bucket,
- FeaturesCollector::InitDataType const & prefix)
-: m_datFile(prefix.first + bucket + prefix.second)
-{
-}
-
uint32_t FeaturesCollector::GetFileSize(FileWriter const & f)
{
// .dat file should be less than 4Gb
diff --git a/generator/feature_generator.hpp b/generator/feature_generator.hpp
index f775c3c45d..40f94f1a64 100644
--- a/generator/feature_generator.hpp
+++ b/generator/feature_generator.hpp
@@ -1,19 +1,19 @@
#pragma once
-#include "generate_info.hpp"
-#include "osm_decl.hpp"
-
#include "../geometry/rect2d.hpp"
-#include "../coding/file_container.hpp"
+#include "../coding/file_writer.hpp"
#include "../std/vector.hpp"
#include "../std/string.hpp"
+
class FeatureBuilder1;
namespace feature
{
+ class GenerateInfo;
+
bool GenerateFeatures(GenerateInfo & info, bool lightNodes);
// Writes features to dat file.
@@ -30,11 +30,7 @@ namespace feature
void WriteFeatureBase(vector<char> const & bytes, FeatureBuilder1 const & fb);
public:
- // Stores prefix and suffix of a dat file name.
- typedef pair<string, string> InitDataType;
-
FeaturesCollector(string const & fName);
- FeaturesCollector(string const & bucket, InitDataType const & prefix);
void operator() (FeatureBuilder1 const & f);
};
diff --git a/generator/first_pass_parser.hpp b/generator/first_pass_parser.hpp
index 96e4c12a2e..db3c8b5174 100644
--- a/generator/first_pass_parser.hpp
+++ b/generator/first_pass_parser.hpp
@@ -7,6 +7,7 @@
#include "../base/string_utils.hpp"
+
template <class THolder>
class FirstPassParser : public BaseOSMParser
{
@@ -42,10 +43,7 @@ protected:
else if (p->name == "way")
{
// store way
-
WayElement e(id);
- bool bUnite = false;
- bool bEmptyTags = true;
for (size_t i = 0; i < p->childs.size(); ++i)
{
@@ -55,23 +53,10 @@ protected:
VERIFY ( strings::to_uint64(p->childs[i].attrs["ref"], ref), ("Bad node ref in way : ", p->childs[i].attrs["ref"]) );
e.nodes.push_back(ref);
}
- else if (!bUnite && (p->childs[i].name == "tag"))
- {
- bEmptyTags = false;
-
- // process way's tags to define - if we need to join ways
- string const & k = p->childs[i].attrs["k"];
- string const & v = p->childs[i].attrs["v"];
- bUnite = feature::NeedUnite(k, v);
- }
}
if (e.IsValid())
- {
m_holder.AddWay(id, e);
- if (bUnite || bEmptyTags)
- m_holder.AddMappedWay(id, e, bEmptyTags);
- }
}
else if (p->name == "relation")
{
diff --git a/generator/generator_tool/generator_tool.cpp b/generator/generator_tool/generator_tool.cpp
index 2c1e7046b2..c6b185e603 100644
--- a/generator/generator_tool/generator_tool.cpp
+++ b/generator/generator_tool/generator_tool.cpp
@@ -8,6 +8,7 @@
#include "../mwm_rect_updater.hpp"
#include "../statistics.hpp"
#include "../unpack_mwm.hpp"
+#include "../generate_info.hpp"
#include "../../indexer/classificator_loader.hpp"
#include "../../indexer/data_header.hpp"
@@ -146,6 +147,8 @@ int main(int argc, char ** argv)
// Enumerate over all dat files that were created.
size_t const count = genInfo.m_bucketNames.size();
+ string const worldPath = path + WORLD_FILE_NAME + DATA_FILE_EXTENSION;
+
for (size_t i = 0; i < count; ++i)
{
string const & datFile = genInfo.m_bucketNames[i];
@@ -153,8 +156,7 @@ int main(int argc, char ** argv)
if (FLAGS_generate_geometry)
{
LOG(LINFO, ("Generating result features for ", datFile));
- if (!feature::GenerateFinalFeatures(datFile,
- datFile == path + WORLD_FILE_NAME + DATA_FILE_EXTENSION))
+ if (!feature::GenerateFinalFeatures(datFile, datFile == worldPath))
{
// If error - move to next bucket without index generation
continue;
diff --git a/generator/osm_decl.cpp b/generator/osm_decl.cpp
index 9a39f6cbfd..c0d345d400 100644
--- a/generator/osm_decl.cpp
+++ b/generator/osm_decl.cpp
@@ -6,44 +6,6 @@
#include "../std/target_os.hpp"
-namespace feature
-{
- char const * arrUnite[1][2] = { { "natural", "coastline" } };
-
- bool NeedUnite(string const & k, string const & v)
- {
- for (size_t i = 0; i < ARRAY_SIZE(arrUnite); ++i)
- if (k == arrUnite[i][0] && v == arrUnite[i][1])
- return true;
-
- return false;
- }
-
- bool NeedUnite(uint32_t type)
- {
- static uint32_t arrTypes[1] = { 0 };
-
- if (arrTypes[0] == 0)
- {
- // initialize static array
- for (size_t i = 0; i < ARRAY_SIZE(arrUnite); ++i)
- {
- size_t const count = ARRAY_SIZE(arrUnite[i]);
- vector<string> path(count);
- for (size_t j = 0; j < count; ++j)
- path[j] = arrUnite[i][j];
-
- arrTypes[i] = classif().GetTypeByPath(path);
- }
- }
-
- for (size_t i = 0; i < ARRAY_SIZE(arrTypes); ++i)
- if (arrTypes[i] == type)
- return true;
-
- return false;
- }
-}
void progress_policy::Begin(string const & /*name*/, size_t factor)
{
diff --git a/generator/osm_decl.hpp b/generator/osm_decl.hpp
index f438ccfa90..bbb4e137e9 100644
--- a/generator/osm_decl.hpp
+++ b/generator/osm_decl.hpp
@@ -36,17 +36,6 @@ STATIC_ASSERT(sizeof(LatLonPos) == 24);
#define MAPPED_WAYS "mapped_ways.n2w"
-namespace feature
-{
- /// @name Need to unite features.
- //@{
- /// @param[in] k, v Key and Value from relation tags.
- bool NeedUnite(string const & k, string const & v);
- /// @param[in] type Type from feature.
- bool NeedUnite(uint32_t type);
- //@}
-}
-
class progress_policy
{
size_t m_count;
diff --git a/generator/polygonizer.hpp b/generator/polygonizer.hpp
index cfdc73957b..ff150433be 100644
--- a/generator/polygonizer.hpp
+++ b/generator/polygonizer.hpp
@@ -6,8 +6,11 @@
#include "../indexer/feature.hpp"
#include "../indexer/feature_visibility.hpp"
#include "../indexer/cell_id.hpp"
+
#include "../geometry/rect2d.hpp"
+
#include "../coding/file_writer.hpp"
+
#include "../base/base.hpp"
#include "../base/buffer_vector.hpp"
#include "../base/macros.hpp"
@@ -15,6 +18,7 @@
#include "../std/scoped_ptr.hpp"
#include "../std/string.hpp"
+
#ifndef PARALLEL_POLYGONIZER
#define PARALLEL_POLYGONIZER 1
#endif
@@ -26,13 +30,16 @@
#include <QMutexLocker>
#endif
+
namespace feature
{
// Groups features according to country polygons
template <class FeatureOutT>
class Polygonizer
{
- typename FeatureOutT::InitDataType m_filePrefixAndSuffix;
+ string m_prefix;
+ string m_suffix;
+
vector<FeatureOutT*> m_Buckets;
vector<string> m_Names;
borders::CountriesContainerT m_countries;
@@ -45,8 +52,9 @@ namespace feature
#endif
public:
- template <class T>
- Polygonizer(T const & info) : m_filePrefixAndSuffix(info.m_datFilePrefix, info.m_datFileSuffix)
+ template <class TInfo>
+ explicit Polygonizer(TInfo const & info)
+ : m_prefix(info.m_datFilePrefix), m_suffix(info.m_datFileSuffix)
#if PARALLEL_POLYGONIZER
, m_ThreadPoolSemaphore(m_ThreadPool.maxThreadCount() * 8)
#endif
@@ -64,7 +72,8 @@ namespace feature
("Error loading country polygons files"));
}
else
- { // Insert fake country polygon equal to whole world to
+ {
+ // Insert fake country polygon equal to whole world to
// create only one output file which contains all features
m_countries.Add(borders::CountryPolygons(),
m2::RectD(MercatorBounds::minX, MercatorBounds::minY,
@@ -155,7 +164,7 @@ namespace feature
if (country->m_index == -1)
{
m_Names.push_back(country->m_name);
- m_Buckets.push_back(new FeatureOutT(country->m_name, m_filePrefixAndSuffix));
+ m_Buckets.push_back(new FeatureOutT(m_prefix + country->m_name + m_suffix));
country->m_index = m_Buckets.size()-1;
}
diff --git a/generator/world_map_generator.hpp b/generator/world_map_generator.hpp
index e766ca4d01..63d4fcc3b5 100644
--- a/generator/world_map_generator.hpp
+++ b/generator/world_map_generator.hpp
@@ -1,33 +1,26 @@
#pragma once
#include "feature_merger.hpp"
-#include "generate_info.hpp"
-#include "../indexer/feature_visibility.hpp"
#include "../indexer/scales.hpp"
#include "../defines.hpp"
-inline int GetMinFeatureDrawScale(FeatureBuilder1 const & fb)
-{
- FeatureBase const fBase = fb.GetFeatureBase();
- int const minScale = feature::MinDrawableScaleForFeature(fBase);
-
- // some features become invisible after merge processing, so -1 is possible
- return (minScale == -1 ? 1000 : minScale);
-}
-
+/// Process FeatureBuilder1 for world map. Main functions:
+/// - check for visibility in world map
+/// - merge linear features
template <class FeatureOutT>
class WorldMapGenerator
{
- class WorldEmitter : public FeatureEmitterIFace
+ class EmitterImpl : public FeatureEmitterIFace
{
FeatureOutT m_output;
public:
- template <class TInit>
- WorldEmitter(TInit const & initData) : m_output(WORLD_FILE_NAME, initData)
+ template <class TInfo>
+ explicit EmitterImpl(TInfo const & info)
+ : m_output(info.m_datFilePrefix + WORLD_FILE_NAME + info.m_datFileSuffix)
{
}
@@ -39,20 +32,20 @@ class WorldMapGenerator
bool NeedPushToWorld(FeatureBuilder1 const & fb) const
{
- return (scales::GetUpperWorldScale() >= GetMinFeatureDrawScale(fb));
+ return (scales::GetUpperWorldScale() >= fb.GetMinFeatureDrawScale());
}
void PushSure(FeatureBuilder1 const & fb) { m_output(fb); }
};
- WorldEmitter m_worldBucket;
+ EmitterImpl m_worldBucket;
FeatureTypesProcessor m_typesCorrector;
FeatureMergeProcessor m_merger;
public:
- template <class T>
- WorldMapGenerator(T const & info) : m_worldBucket(typename FeatureOutT::InitDataType(
- info.m_datFilePrefix, info.m_datFileSuffix)), m_merger(30)
+ template <class TInfo>
+ explicit WorldMapGenerator(TInfo const & info)
+ : m_worldBucket(info), m_merger(POINT_COORD_BITS)
{
// Do not strip last types for given tags,
// for example, do not cut "-2" in "boundary-administrative-2"
@@ -73,7 +66,6 @@ public:
{
if (m_worldBucket.NeedPushToWorld(fb))
{
- // Always try to merge coastlines
if (fb.GetGeomType() == feature::GEOM_LINE)
m_merger(m_typesCorrector(fb));
else