diff --git a/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.kt b/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.kt index d0138fb95..889e65c37 100644 --- a/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.kt +++ b/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.kt @@ -362,7 +362,7 @@ class OkHttpJsonApiClient @Inject constructor( if (response.body != null && response.isSuccessful) { val json = response.body!!.string() return JsonParser.parseString(json).getAsJsonObject().getAsJsonObject("results") - .getAsJsonArray("bindings").get(0).getAsJsonObject().getAsJsonObject("count") + .getAsJsonArray("bindings").get(0).getAsJsonObject().getAsJsonObject("itemCount") .get("value").asInt } throw Exception(response.message) @@ -370,7 +370,7 @@ class OkHttpJsonApiClient @Inject constructor( @Throws(Exception::class) fun getNearbyItemCount( - center: LatLng, radius: Double + center: LatLng, radius: Float ): Int { val wikidataQuery: String = FileUtils.readFromResource("/queries/radius_query_for_item_count.rq") @@ -393,7 +393,7 @@ class OkHttpJsonApiClient @Inject constructor( if (response.body != null && response.isSuccessful) { val json = response.body!!.string() return JsonParser.parseString(json).getAsJsonObject().getAsJsonObject("results") - .getAsJsonArray("bindings").get(0).getAsJsonObject().getAsJsonObject("count") + .getAsJsonArray("bindings").get(0).getAsJsonObject().getAsJsonObject("itemCount") .get("value").asInt } throw Exception(response.message) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java index 3dd73b672..4af541442 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java @@ -1,5 +1,6 @@ package fr.free.nrw.commons.nearby; +import android.location.Location; import androidx.annotation.Nullable; import java.io.IOException; import java.util.Collections; @@ -122,12 +123,46 @@ public class NearbyPlaces { .getNearbyPlaces(screenTopRight, screenBottomLeft, lang, shouldQueryForMonuments, customQuery); } - final double east = screenTopRight.getLongitude(); - final double west = screenBottomLeft.getLongitude(); - final double north = screenTopRight.getLatitude(); - final double south = screenBottomLeft.getLatitude(); - return new java.util.ArrayList(); // TODO replace with actual method call + final int lowerLimit = 1000, upperLimit=1500; + + final float[] results = new float[1]; + Location.distanceBetween(centerPoint.getLatitude(), screenTopRight.getLongitude(), + centerPoint.getLatitude(), screenBottomLeft.getLongitude(), results); + final float longGap = results[0]/1000f; + Location.distanceBetween(screenTopRight.getLatitude(), centerPoint.getLongitude(), + screenBottomLeft.getLatitude(), centerPoint.getLongitude(), results); + final float latGap = results[0]/1000f; + + if (Math.max(longGap,latGap)<100f){ + final int itemCount = okHttpJsonApiClient.getNearbyItemCount(screenTopRight, + screenBottomLeft); + if(itemCount= lowerLimit && itemCount < upperLimit){ + break; + } + if (targetRadius>maxRadius/2 && itemCount(); // TODO make actual query } /** diff --git a/app/src/main/resources/queries/radius_query_for_nearby.rq b/app/src/main/resources/queries/radius_query_for_nearby.rq new file mode 100644 index 000000000..e69de29bb diff --git a/app/src/main/resources/queries/rectangle_query_for_item_count.rq b/app/src/main/resources/queries/rectangle_query_for_item_count.rq index c7ff15f65..93b9385e7 100644 --- a/app/src/main/resources/queries/rectangle_query_for_item_count.rq +++ b/app/src/main/resources/queries/rectangle_query_for_item_count.rq @@ -1,9 +1,8 @@ -SELECT (COUNT(DISTINCT ?item) AS ?count) +SELECT (COUNT(?item) AS ?itemCount) WHERE { SERVICE wikibase:box { ?item wdt:P625 ?location. bd:serviceParam wikibase:cornerWest "Point(${LONG_WEST} ${LAT_WEST})"^^geo:wktLiteral. bd:serviceParam wikibase:cornerEast "Point(${LONG_EAST} ${LAT_EAST})"^^geo:wktLiteral. } -} -&format=json \ No newline at end of file +} \ No newline at end of file