Initial version -- added millennium read funcionality
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
package com.google.maps.android.clustering.algo;
|
||||
|
||||
import androidx.collection.LongSparseArray;
|
||||
import com.google.maps.android.clustering.Cluster;
|
||||
import com.google.maps.android.clustering.ClusterItem;
|
||||
import com.google.maps.android.projection.Point;
|
||||
import com.google.maps.android.projection.SphericalMercatorProjection;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
/* JADX INFO: loaded from: classes2.dex */
|
||||
public class GridBasedAlgorithm<T extends ClusterItem> extends AbstractAlgorithm<T> {
|
||||
private static final int DEFAULT_GRID_SIZE = 100;
|
||||
private int mGridSize = 100;
|
||||
private final Set<T> mItems = Collections.synchronizedSet(new HashSet());
|
||||
|
||||
@Override // com.google.maps.android.clustering.algo.Algorithm
|
||||
public boolean addItem(T t) {
|
||||
return this.mItems.add(t);
|
||||
}
|
||||
|
||||
@Override // com.google.maps.android.clustering.algo.Algorithm
|
||||
public boolean addItems(Collection<T> collection) {
|
||||
return this.mItems.addAll(collection);
|
||||
}
|
||||
|
||||
@Override // com.google.maps.android.clustering.algo.Algorithm
|
||||
public void clearItems() {
|
||||
this.mItems.clear();
|
||||
}
|
||||
|
||||
@Override // com.google.maps.android.clustering.algo.Algorithm
|
||||
public boolean removeItem(T t) {
|
||||
return this.mItems.remove(t);
|
||||
}
|
||||
|
||||
@Override // com.google.maps.android.clustering.algo.Algorithm
|
||||
public boolean removeItems(Collection<T> collection) {
|
||||
return this.mItems.removeAll(collection);
|
||||
}
|
||||
|
||||
@Override // com.google.maps.android.clustering.algo.Algorithm
|
||||
public boolean updateItem(T t) {
|
||||
boolean zRemoveItem;
|
||||
synchronized (this.mItems) {
|
||||
zRemoveItem = removeItem(t);
|
||||
if (zRemoveItem) {
|
||||
zRemoveItem = addItem(t);
|
||||
}
|
||||
}
|
||||
return zRemoveItem;
|
||||
}
|
||||
|
||||
@Override // com.google.maps.android.clustering.algo.Algorithm
|
||||
public void setMaxDistanceBetweenClusteredItems(int i) {
|
||||
this.mGridSize = i;
|
||||
}
|
||||
|
||||
@Override // com.google.maps.android.clustering.algo.Algorithm
|
||||
public int getMaxDistanceBetweenClusteredItems() {
|
||||
return this.mGridSize;
|
||||
}
|
||||
|
||||
@Override // com.google.maps.android.clustering.algo.Algorithm
|
||||
public Set<? extends Cluster<T>> getClusters(float f) {
|
||||
long j;
|
||||
long jCeil = (long) Math.ceil((Math.pow(2.0d, f) * 256.0d) / ((double) this.mGridSize));
|
||||
SphericalMercatorProjection sphericalMercatorProjection = new SphericalMercatorProjection(jCeil);
|
||||
HashSet hashSet = new HashSet();
|
||||
LongSparseArray longSparseArray = new LongSparseArray();
|
||||
synchronized (this.mItems) {
|
||||
for (T t : this.mItems) {
|
||||
Point point = sphericalMercatorProjection.toPoint(t.getPosition());
|
||||
long coord = getCoord(jCeil, point.x, point.y);
|
||||
StaticCluster staticCluster = (StaticCluster) longSparseArray.get(coord);
|
||||
if (staticCluster == null) {
|
||||
j = jCeil;
|
||||
staticCluster = new StaticCluster(sphericalMercatorProjection.toLatLng(new com.google.maps.android.geometry.Point(Math.floor(point.x) + 0.5d, Math.floor(point.y) + 0.5d)));
|
||||
longSparseArray.put(coord, staticCluster);
|
||||
hashSet.add(staticCluster);
|
||||
} else {
|
||||
j = jCeil;
|
||||
}
|
||||
staticCluster.add(t);
|
||||
jCeil = j;
|
||||
}
|
||||
}
|
||||
return hashSet;
|
||||
}
|
||||
|
||||
@Override // com.google.maps.android.clustering.algo.Algorithm
|
||||
public Collection<T> getItems() {
|
||||
return this.mItems;
|
||||
}
|
||||
|
||||
private static long getCoord(long j, double d, double d2) {
|
||||
return (long) ((j * Math.floor(d)) + Math.floor(d2));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user