Pożyczyłem następującą metodę z dowolnego miejsca w Internecie (nie pamiętam gdzie). Ale robi to prosty proces, znajdując odległość między dwoma punktami GPS. Działa dobrze, z tym wyjątkiem, że może być trochę powolny, ponieważ używam go przez miliony punktów. Zastanawiam się, czy ktoś zna podejście, które byłoby obliczeniowo tańsze.Szybszy sposób obliczania odległości geograficznej między dwoma punktami
Dokładność musi być w obszarze ogólnym "poprawne", ale nie musi być w 100% dokładna.
private double distFrom(double lat1, double lng1, double lat2, double lng2) {
double earthRadius = 3958.75;
double dLat = Math.toRadians(lat2-lat1);
double dLng = Math.toRadians(lng2-lng1);
double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
Math.sin(dLng/2) * Math.sin(dLng/2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
return earthRadius * c;
}
}
P.s Rzeczywiście znalazłem wiele innych istotnych pytań, ale one tak naprawdę nie koncentrują się na moich obawach dotyczących prędkości.
Do czego używasz odległości? Typowym zastosowaniem tego jest znalezienie wszystkich X w pobliżu Y. Jeśli to dotyczy ciebie, powinieneś rozważyć zastosowanie podejścia ograniczającego, które może ograniczyć twoje obliczenia z milionów do kilkudziesięciu. Na przykład znajdź mi najbliższy sklep spożywczy w promieniu 5 mil. Nie musisz obliczać odległości z mojego domu do sklepu w Kalifornii lub na Alasce. –