ClusterMarkerRenderer: repopulateCluster() is called with different scales (#381)

mScaleSaved is log2 smaller than scale.
This fixes the bug that subsequent calls to populate() will display the markers correctly and will not be clustered to one single cluster.
This commit is contained in:
Wolfgang Schramm 2017-07-22 14:49:44 +02:00 committed by Emux
parent 76d55bb1a0
commit b90d99f82b

View File

@ -4,6 +4,7 @@
* Copyright 2017 Longri
* Copyright 2017 devemux86
* Copyright 2017 nebular
* Copyright 2017 Wolfgang Schramm
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
@ -72,7 +73,12 @@ public class ClusterMarkerRenderer extends MarkerRenderer {
/**
* Discrete scale step, used to trigger reclustering on significant scale change
*/
private int mScaleSaved = 0;
private int mScalePow = 0;
/**
* Map scale to cluster the marker
*/
private double mClusterScale = 0;
/**
* We use a flat Sparse array to calculate the clusters. The sparse array models a 2D map where every (x,y) denotes
@ -121,7 +127,7 @@ public class ClusterMarkerRenderer extends MarkerRenderer {
@Override
protected void populate(int size) {
repopulateCluster(size, mScaleSaved);
repopulateCluster(size, mClusterScale);
}
/**
@ -206,10 +212,11 @@ public class ClusterMarkerRenderer extends MarkerRenderer {
*/
// (int) log of scale gives us adequate steps to trigger clustering
int scalepow = FastMath.log2((int) scale);
int scalePow = FastMath.log2((int) scale);
if (scalepow != mScaleSaved) {
mScaleSaved = scalepow;
if (scalePow != mScalePow) {
mScalePow = scalePow;
mClusterScale = scale;
// post repopulation to the main thread
mMarkerLayer.map().post(new Runnable() {