diff --git a/samples/blackmiscquantities/samplesgeo.cpp b/samples/blackmiscquantities/samplesgeo.cpp index 96494c978..4a00cc6d0 100644 --- a/samples/blackmiscquantities/samplesgeo.cpp +++ b/samples/blackmiscquantities/samplesgeo.cpp @@ -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; diff --git a/src/blackmisc/geo/coordinategeodetic.cpp b/src/blackmisc/geo/coordinategeodetic.cpp index c8a90ffba..98ee0520c 100644 --- a/src/blackmisc/geo/coordinategeodetic.cpp +++ b/src/blackmisc/geo/coordinategeodetic.cpp @@ -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);