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:
parent
76d55bb1a0
commit
b90d99f82b
@ -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() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user