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 extends AbstractAlgorithm { private static final int DEFAULT_GRID_SIZE = 100; private int mGridSize = 100; private final Set 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 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 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> 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 getItems() { return this.mItems; } private static long getCoord(long j, double d, double d2) { return (long) ((j * Math.floor(d)) + Math.floor(d2)); } }