Merge branch 'jmt/geodistance'
This commit is contained in:
@@ -540,7 +540,7 @@ SGGeodesy::courseRad(const SGGeoc& from, const SGGeoc& to)
|
|||||||
}
|
}
|
||||||
|
|
||||||
double
|
double
|
||||||
SGGeodesy::distanceM(const SGGeoc& from, const SGGeoc& to)
|
SGGeodesy::distanceRad(const SGGeoc& from, const SGGeoc& to)
|
||||||
{
|
{
|
||||||
// d = 2*asin(sqrt((sin((lat1-lat2)/2))^2 +
|
// d = 2*asin(sqrt((sin((lat1-lat2)/2))^2 +
|
||||||
// cos(lat1)*cos(lat2)*(sin((lon1-lon2)/2))^2))
|
// cos(lat1)*cos(lat2)*(sin((lon1-lon2)/2))^2))
|
||||||
@@ -550,5 +550,12 @@ SGGeodesy::distanceM(const SGGeoc& from, const SGGeoc& to)
|
|||||||
double tmp2 = sin(0.5*(from.getLongitudeRad() - to.getLongitudeRad()));
|
double tmp2 = sin(0.5*(from.getLongitudeRad() - to.getLongitudeRad()));
|
||||||
double square = tmp1*tmp1 + cosLatFrom*cosLatTo*tmp2*tmp2;
|
double square = tmp1*tmp1 + cosLatFrom*cosLatTo*tmp2*tmp2;
|
||||||
double s = SGMiscd::min(sqrt(SGMiscd::max(square, 0)), 1);
|
double s = SGMiscd::min(sqrt(SGMiscd::max(square, 0)), 1);
|
||||||
return 2 * asin(s) * SG_RAD_TO_NM * SG_NM_TO_METER;
|
return 2 * asin(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
double
|
||||||
|
SGGeodesy::distanceM(const SGGeoc& from, const SGGeoc& to)
|
||||||
|
{
|
||||||
|
return distanceRad(from, to) * SG_RAD_TO_NM * SG_NM_TO_METER;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ public:
|
|||||||
static void advanceRadM(const SGGeoc& geoc, double course, double distance,
|
static void advanceRadM(const SGGeoc& geoc, double course, double distance,
|
||||||
SGGeoc& result);
|
SGGeoc& result);
|
||||||
static double courseRad(const SGGeoc& from, const SGGeoc& to);
|
static double courseRad(const SGGeoc& from, const SGGeoc& to);
|
||||||
|
static double distanceRad(const SGGeoc& from, const SGGeoc& to);
|
||||||
static double distanceM(const SGGeoc& from, const SGGeoc& to);
|
static double distanceM(const SGGeoc& from, const SGGeoc& to);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user