¿Cómo calcular dos coordenadas de distancia en el objetivo c?

como titulo como hacerlo? He intentado el código de Google Earth, pero parece que el resultado es diferente con el resultado del cálculo de Google Map. A continuación se proporciona el código que hice

-(double)GetDistance:(double)lat1 long1:(double)lng1 la2:(double)lat2 long2:(double)lng2 {
    //NSLog(@"latitude 1:%.7f,longitude1:%.7f,latitude2:%.7f,longtitude2:%.7f",lat1,lng1,lat2,lng2);
    double radLat1 = [self rad:lat1];
    double radLat2 = [self rad:lat2];
    double a = radLat1 - radLat2;
    double b = [self rad:lng1] -[self rad:lng2];
    double s = 2 * asin(sqrt(pow(sin(a/2),2) + cos(radLat1)*cos(radLat2)*pow(sin(b/2),2)));
    s = s * EARTH_RADIUS;
    s = round(s * 10000) / 10000;
    return s;
}

-(double)rad:(double)d
{
    return d *3.14159265 / 180.0;
}

el valor EARTH_RADIUS es 6378.138

Al usar esta función, siempre que se obtengan dos coordenadas, el resultado es de 4.5 km, pero cuando utilizo el mapa de Google para obtener la dirección entre dos coordenadas, me muestra que la distancia es de aproximadamente 8 km.

¿Alguien puede ayudar a señalar el problema de mi código?

Respuestas a la pregunta(5)

Su respuesta a la pregunta