먼저 모든 LatLng 포인트가 목록에 있다고 가정합니다. (정렬되지 않거나 어떻게 든 데이터베이스에 의해 수신 됨)
이 함수를 사용하여 LatLng의 점 사이를 계산합니다.
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는 사용자의 LatLng를해야한다.
는 ENDP 당신은 그 종류 그 목록 후, 사용자의 LatLng를과의 다른 LatLng를 사이의 모든 거리를 삽입 목록을 만들 수있는 모든 다른 LatLng를
해야한다. 이제는 사용자의 LatLng과 나머지 LatLng 사이의 거리가있는 정렬 된 목록이 있으므로 for 루프를 사용하면 원하는 모든 작업을 수행 할 수 있습니다. 시간이 걸리는 경우 사용자에게 무언가가 진행 중임을 알리는 진행 표시 줄을 추가 할 수 있습니다.
2 개의 위치 점에 대해 ** distancebetween **를 사용해 보았습니다. 그러나 거대한 데이터의 경우 이는 실현 가능한 해결책이 아닙니다. 그래서 거리를 계산하기 전에 위치 지점을 필터링하려고했습니다. – SudP