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:
authorLev Dragunov <l.dragunov@corp.mail.ru>2016-03-18 13:19:55 +0300
committerSergey Yershov <yershov@corp.mail.ru>2016-03-23 16:56:54 +0300
commit834d876a9c2b104c25bdf1e47d2578bebd228224 (patch)
treed3c04539f32190dd09daba5c76913a7c1e734b9f /indexer/displacement_manager.hpp
parent80da9b8e1fcfe3985b9f40b1f80f1077e63712cf (diff)
POI displacement fixes.
Diffstat (limited to 'indexer/displacement_manager.hpp')
-rw-r--r--indexer/displacement_manager.hpp27
1 files changed, 11 insertions, 16 deletions
diff --git a/indexer/displacement_manager.hpp b/indexer/displacement_manager.hpp
index 5dd1e5c3ce..55d8ef25c6 100644
--- a/indexer/displacement_manager.hpp
+++ b/indexer/displacement_manager.hpp
@@ -18,12 +18,11 @@
namespace
{
-double constexpr kPOIDisplacementRadiusPixels = 16.;
+double constexpr kPOIDisplacementRadiusPixels = 60.;
-// Rendering dramatically affected by a screen resolution. So I will use high resolution to cover
-// case when we have a lot of free space on the screen.
-size_t constexpr kMaxScreenSizeXPixels = 2560;
-size_t constexpr kMaxScreenSizeYPixels = 1440;
+// Displacement radius in pixels * half of the world in degrees / meaned graphics tile size.
+// So average displacement radius will be: this / tiles in row count.
+double constexpr kPOIDisplacementRadiusMultiplier = kPOIDisplacementRadiusPixels * 180. / 512.;
} // namespace
namespace covering
@@ -117,7 +116,9 @@ public:
{
m4::Tree<DisplaceableNode> acceptedNodes;
- sort(m_storage.begin(), m_storage.end());
+ // Sort in priority descend mode.
+ sort(m_storage.begin(), m_storage.end(), greater<DisplaceableNode>());
+
for (auto const & node : m_storage)
{
uint32_t scale = node.m_minScale;
@@ -194,7 +195,7 @@ private:
m_priority = (static_cast<uint32_t>(d) << 8) | rank;
}
- bool operator<(DisplaceableNode const & rhs) const { return m_priority < rhs.m_priority; }
+ bool operator>(DisplaceableNode const & rhs) const { return m_priority > rhs.m_priority; }
m2::RectD const GetLimitRect() const { return m2::RectD(m_center, m_center); }
};
@@ -207,15 +208,9 @@ private:
float CalculateDeltaForZoom(int32_t zoom) const
{
- double const worldSizeDivisor = 1 << zoom;
- // Mercator SizeX and SizeY is equal
- double const rectSize = (MercatorBounds::maxX - MercatorBounds::minX) / worldSizeDivisor;
-
- ScreenBase geometryConvertor;
- geometryConvertor.OnSize(0, 0, kMaxScreenSizeXPixels, kMaxScreenSizeYPixels);
- geometryConvertor.SetFromRect(m2::AnyRectD(m2::RectD(0, 0, rectSize, rectSize)));
-
- return kPOIDisplacementRadiusPixels * geometryConvertor.GetScale();
+ // zoom - 1 is similar to drape.
+ double const worldSizeDivisor = 1 << (zoom - 1);
+ return kPOIDisplacementRadiusMultiplier / worldSizeDivisor;
}
void AddNodeToSorter(DisplaceableNode const & node, uint32_t scale)