make clustering more dynamic (fixes #14)

This commit is contained in:
Johan von Forstner
2020-05-23 19:51:44 +02:00
parent c10c59e3b1
commit ec623c9396
3 changed files with 41 additions and 4 deletions

View File

@@ -19,7 +19,7 @@ interface GoingElectricApi {
@Query("ne_lat") ne_lat: Double, @Query("ne_lng") ne_lng: Double,
@Query("clustering") clustering: Boolean,
@Query("zoom") zoom: Float,
@Query("cluster_distance") clusterDistance: Int,
@Query("cluster_distance") clusterDistance: Int?,
@Query("freecharging") freecharging: Boolean,
@Query("freeparking") freeparking: Boolean,
@Query("min_power") minPower: Int,

View File

@@ -21,6 +21,16 @@ import retrofit2.Response
data class MapPosition(val bounds: LatLngBounds, val zoom: Float)
internal fun getClusterDistance(zoom: Float): Int? {
return when (zoom) {
in 0.0..7.0 -> 100
in 7.0..11.5 -> 75
in 11.5..12.5 -> 60
in 12.5..13.0 -> 45
else -> null
}
}
class MapViewModel(application: Application, geApiKey: String) : AndroidViewModel(application) {
private var api = GoingElectricApi.create(geApiKey, context = application)
private var db = AppDatabase.getInstance(application)
@@ -166,13 +176,16 @@ class MapViewModel(application: Application, geApiKey: String) : AndroidViewMode
}
// do not use clustering if filters need to be applied locally.
val useClustering = minConnectors <= 1
val useClustering = minConnectors <= 1 && zoom < 13
val clusterDistance = if (useClustering) getClusterDistance(zoom) else null
println("$zoom, $clusterDistance")
val response = api.getChargepoints(
bounds.southwest.latitude, bounds.southwest.longitude,
bounds.northeast.latitude, bounds.northeast.longitude,
clustering = zoom < 13 && useClustering, zoom = zoom,
clusterDistance = 40, freecharging = freecharging, minPower = minPower,
clustering = useClustering, zoom = zoom,
clusterDistance = clusterDistance, freecharging = freecharging, minPower = minPower,
freeparking = freeparking, plugs = connectors
)