Действительно, тут обычная длина отрезка не подойдет, ибо Земля не плоская. Обычно для таких целей используют формулу гаверсинусов.
Code
a = sin²(Δlat/2) + cos(lat1)*cos(lat2)*sin²(Δlong/2)
c = 2*atan2(√a, √(1−a))
d = R*c, где R - радиус Земли
На Java код будет такой:
Code
public double distanceTo(GeoPoint gp1, GeoPoint gp2) {
if (gp!=null){
int radius = 6371; // Километры
double dLat = Math.toRadians(gp2.latitude - gp1.latitude);
double dLong = Math.toRadians(gp2.longitude - gp1.longitude);
double lat1 = Math.toRadians(gp1.latitude);
double lat2 = Math.toRadians(gp2.latitude);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(lat1) * Math.cos(lat2) * Math.sin(dLong / 2) * Math.sin(dLong / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
return c * R;