mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-22 23:05:36 +08:00
Ref T390, Ref T372, check for equal coordinates to avoid NaN
This commit is contained in:
@@ -66,9 +66,18 @@ namespace BlackSample
|
||||
CCoordinateGeodetic geo2(geoVector);
|
||||
deltaLat = geo2.latitude() - lat;
|
||||
deltaLng = geo2.longitude() - lng;
|
||||
|
||||
out << deltaLat.valueRoundedWithUnit(digits) << " " << deltaLng.valueRoundedWithUnit(digits) << endl;
|
||||
|
||||
// Heading/bearing of same values
|
||||
CAngle bearing = geo.calculateBearing(geo);
|
||||
CLength distance = geo.calculateGreatCircleDistance(geo);
|
||||
out << bearing.valueRoundedWithUnit(CAngleUnit::deg(), 2) << " " << distance.valueRoundedWithUnit(CLengthUnit::m(), 2) << endl;
|
||||
|
||||
const CCoordinateGeodetic nullCoordinate;
|
||||
bearing = geo.calculateBearing(nullCoordinate);
|
||||
distance = geo.calculateGreatCircleDistance(nullCoordinate);
|
||||
out << bearing.valueRoundedWithUnit(CAngleUnit::deg(), 2) << " " << distance.valueRoundedWithUnit(CLengthUnit::m(), 2) << endl;
|
||||
|
||||
// bye
|
||||
out << "-----------------------------------------------" << endl;
|
||||
return 0;
|
||||
|
||||
@@ -43,6 +43,7 @@ namespace BlackMisc
|
||||
CLength calculateGreatCircleDistance(const ICoordinateGeodetic &coordinate1, const ICoordinateGeodetic &coordinate2)
|
||||
{
|
||||
if (coordinate1.isNull() || coordinate2.isNull()) { return CLength::null(); }
|
||||
// if (coordinate1.equalNormalVectorDouble(coordinate2)) { return CLength(0, CLengthUnit::defaultUnit()); }
|
||||
static const float earthRadiusMeters = 6371000.8f;
|
||||
const QVector3D v1 = coordinate1.normalVector();
|
||||
const QVector3D v2 = coordinate2.normalVector();
|
||||
@@ -53,6 +54,7 @@ namespace BlackMisc
|
||||
CAngle calculateBearing(const ICoordinateGeodetic &coordinate1, const ICoordinateGeodetic &coordinate2)
|
||||
{
|
||||
if (coordinate1.isNull() || coordinate2.isNull()) { return CAngle::null(); }
|
||||
// if (coordinate1.equalNormalVectorDouble(coordinate2)) { return CAngle(0, CAngleUnit::defaultUnit()); } // null or 0?
|
||||
static const QVector3D northPole { 0, 0, 1 };
|
||||
const QVector3D c1 = QVector3D::crossProduct(coordinate1.normalVector(), coordinate2.normalVector());
|
||||
const QVector3D c2 = QVector3D::crossProduct(coordinate1.normalVector(), northPole);
|
||||
|
||||
Reference in New Issue
Block a user