Calculate the distance method according to two point longitude and latitude:
-(double) LatitudeAndLongitudeWithLon1: (double) lon1 LAT1: (double) lat1 Lon2: (double) lon2 lat2: (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 = m_pi*lat1/180.0f;
Double radlat2 = m_pi*lat2/180.0f;
Double radlong1 = m_pi*lon1/180.0f;
Double radlong2 = m_pi*lon2/180.0f;
if (RADLAT1 < 0) RADLAT1 = m_pi/2 + fabs (RADLAT1);//South
if (radlat1 > 0) radlat1 = M_PI/2-Fabs (RADLAT1);/North
if (radlong1 < 0) radlong1 = m_pi*2-fabs (radlong1);//west
if (Radlat2 < 0) Radlat2 = m_pi/2 + fabs (RADLAT2);//South
if (Radlat2 > 0) radlat2 = M_PI/2-Fabs (RADLAT2);/North
if (Radlong2 < 0) radlong2 = m_pi*2-fabs (radlong2);//West
Spherical coordinates 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, cosines and Arccos
Double theta = ACOs ((er*er+er*er-d*d)/(2*er*er));
Double dist = theta*er;
return dist;
}
Print:
NSLog (@ "%f m", [self latitudeandlongitudewithlon1:32.000000 lat1:35.000000 lon2:37.000000 lat2:40.000000]);
Note: The unit returned here is M