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 Longri
|
||||||
* Copyright 2017 devemux86
|
* Copyright 2017 devemux86
|
||||||
* Copyright 2017 nebular
|
* Copyright 2017 nebular
|
||||||
|
* Copyright 2017 Wolfgang Schramm
|
||||||
*
|
*
|
||||||
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
|
* 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
|
* 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
|
* 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
|
@Override
|
||||||
protected void populate(int size) {
|
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) 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) {
|
if (scalePow != mScalePow) {
|
||||||
mScaleSaved = scalepow;
|
mScalePow = scalePow;
|
||||||
|
mClusterScale = scale;
|
||||||
|
|
||||||
// post repopulation to the main thread
|
// post repopulation to the main thread
|
||||||
mMarkerLayer.map().post(new Runnable() {
|
mMarkerLayer.map().post(new Runnable() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user