#pragma mark - calculate distance calculate distance #define based on 2 latitude and longitude pi 3.1415926 + (Double) lantitudelongitudedist: (Double) Lon1 other_lat: (Double) Lat1 self_lon: (Double) Lon2 self_lat: (double) lat2{ double er = 6378137; // 6378700.0f; //ave. radius = 6371.315 (someone said more accurate is 6366.707) //equatorial radius = 6378.388 //nautical mile = 1.15078 double radlat1 = pi*lat1/180.0f; double radlat2 = PI*lat2/180.0f; //now long. double radlong1 = pi*lon1/ 180.0f; double radlong2 = pi*lon2/180.0f; if ( radlat1 < 0 ) radlat1 = pi/2 + fabs (RADLAT1);// south if ( radlat1 > 0 ) radlat1 = pi/2 - fabs (RADLAT1);// north if ( radlong1 < 0 ) radlong1 = pi*2 - fabs (radlong1);//west if ( radlat2 < 0 ) radlat2 = pi/2 + fabs (RADLAT2);// south if ( radlat2 > 0 ) radlat2 = pi/2 - fabs (RADLAT2);// north if ( radlong2 < 0 ) radlong2 = pi*2 - fabs (radlong2);// west // Spherical coordinates&nBsp;x=r*cos (AG) sin (at), y=r*sin (AG) *sin (in), z=r*cos (at) //zero ag is up so reverse lat double x1 = er * cos (radlong1) * sin (RADLAT1); double Y1 = er * sin (radlong1) * sin (RADLAT1); Double z1 = er * cos (RADLAT1); double x2 = er * cos (radlong2) * sin (RADLAT2); double y2 = er * sin (radlong2) * sin (RADLAT2); double z2 = er * cos (RADLAT2); double d = sqrt ((x1-x2) * (X1-X2) + (y1-y2) * (y1-y2) + (Z1-Z2) * (Z1-Z2)); //side, side, side, law of cosines and arccos double theta = ACOs ((er*er+er*er-d*d)/(2*er*er)); double dist = theta *er; return dist; }
Egg ache, the backstage bother let me mobile end calculate distance, really wonderful. No way to find the algorithm online.
iOS latitude and longitude calculation distance