Zuerst nehmen wir an, Sie haben alle LatLng Punkte in einer Liste. (von der Datenbank empfangen, auch wenn sie nicht sortiert sind oder nicht)
Verwenden Sie diese Funktion, um zwischen LatLng-Punkten zu berechnen.
public double CalculationByDistance(LatLng StartP, LatLng EndP) {
int Radius = 6371;// radius of earth in Km
double lat1 = StartP.latitude;
double lat2 = EndP.latitude;
double lon1 = StartP.longitude;
double lon2 = EndP.longitude;
double dLat = Math.toRadians(lat2 - lat1);
double dLon = Math.toRadians(lon2 - lon1);
double a = Math.sin(dLat/2) * Math.sin(dLat/2)
+ Math.cos(Math.toRadians(lat1))
* Math.cos(Math.toRadians(lat2)) * Math.sin(dLon/2)
* Math.sin(dLon/2);
double c = 2 * Math.asin(Math.sqrt(a));
double valueResult = Radius * c;
double km = valueResult/1;
DecimalFormat newFormat = new DecimalFormat("####");
int kmInDec = Integer.valueOf(newFormat.format(km));
double meter = valueResult % 1000;
int meterInDec = Integer.valueOf(newFormat.format(meter));
return Radius * c;
}
StartP sollte die LatLng des Benutzers sein.
EndP sollten alle anderen LatLngs
sein Sie können eine Liste erstellen, die alle Abstände zwischen den LatLng des Benutzers Einsetzen und anderen LatLng, danach Art dieser Liste. Jetzt haben Sie eine sortierte Liste mit den Distanzen zwischen dem LatLng des Benutzers und den restlichen LatLngs, also können Sie mit einer for-Schleife tun, was immer Sie wollen. Wenn es Zeit braucht, können Sie einen Fortschrittsbalken hinzufügen, der den Benutzer darüber informiert, dass etwas passiert/lädt usw.
Ich habe versucht ** distanzbetween ** für 2 Standortpunkte zu verwenden, aber für riesige Daten ist dies keine machbare Lösung. Also habe ich versucht, Positionspunkte zu filtern, bevor ich die Entfernung berechne – SudP