From e9c19435c3ff4f4002010b55b2619c3f05124ea7 Mon Sep 17 00:00:00 2001 From: cDc Date: Wed, 18 Jul 2018 15:41:35 +0300 Subject: [PATCH] parse GPS accuracy --- TinyEXIF.cpp | 4 ++++ TinyEXIF.h | 2 ++ main.cpp | 8 +++++--- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/TinyEXIF.cpp b/TinyEXIF.cpp index 2add69d..4317023 100644 --- a/TinyEXIF.cpp +++ b/TinyEXIF.cpp @@ -1013,6 +1013,8 @@ int EXIFInfo::parseFromXMPSegment(const uint8_t* buf, unsigned len) { GeoLocation.PitchDegree = Tools::NormD180(GeoLocation.PitchDegree-90.0); } document->QueryDoubleAttribute("Camera:Yaw", &GeoLocation.YawDegree); + document->QueryDoubleAttribute("Camera:GPSXYAccuracy", &GeoLocation.AccuracyXY); + document->QueryDoubleAttribute("Camera:GPSZAccuracy", &GeoLocation.AccuracyZ); } else { // Try parsing the XMP content for DJI info. document->QueryDoubleAttribute("drone-dji:AbsoluteAltitude", &GeoLocation.Altitude); @@ -1147,6 +1149,8 @@ void EXIFInfo::clear() { GeoLocation.SpeedX = DBL_MAX; GeoLocation.SpeedY = DBL_MAX; GeoLocation.SpeedZ = DBL_MAX; + GeoLocation.AccuracyXY = 0; + GeoLocation.AccuracyZ = 0; GeoLocation.GPSDOP = 0; GeoLocation.GPSDifferential = 0; GeoLocation.GPSMapDatum = ""; diff --git a/TinyEXIF.h b/TinyEXIF.h index 6499898..0513452 100644 --- a/TinyEXIF.h +++ b/TinyEXIF.h @@ -275,6 +275,8 @@ public: double SpeedX; // Flight speed on X in meters/second double SpeedY; // Flight speed on Y in meters/second double SpeedZ; // Flight speed on Z in meters/second + double AccuracyXY; // GPS accuracy on XY in meters + double AccuracyZ; // GPS accuracy on Z in meters double GPSDOP; // GPS DOP (data degree of precision) uint16_t GPSDifferential; // Differential correction applied to the GPS receiver (may not exist) // 0: measurement without differential correction diff --git a/main.cpp b/main.cpp index 993891f..8478ee5 100644 --- a/main.cpp +++ b/main.cpp @@ -133,10 +133,12 @@ int main(int argc, const char** argv) std::cout << "GeoLocation.YawDegree " << imageEXIF.GeoLocation.YawDegree << "\n"; } if (imageEXIF.GeoLocation.hasSpeed()) { - std::cout << "GeoLocation.SpeedX " << imageEXIF.GeoLocation.SpeedX << "\n"; - std::cout << "GeoLocation.SpeedY " << imageEXIF.GeoLocation.SpeedY << "\n"; - std::cout << "GeoLocation.SpeedZ " << imageEXIF.GeoLocation.SpeedZ << "\n"; + std::cout << "GeoLocation.SpeedX " << imageEXIF.GeoLocation.SpeedX << " m/s" << "\n"; + std::cout << "GeoLocation.SpeedY " << imageEXIF.GeoLocation.SpeedY << " m/s" << "\n"; + std::cout << "GeoLocation.SpeedZ " << imageEXIF.GeoLocation.SpeedZ << " m/s" << "\n"; } + if (imageEXIF.GeoLocation.AccuracyXY > 0 || imageEXIF.GeoLocation.AccuracyZ > 0) + std::cout << "GeoLocation.GPSAccuracy XY " << imageEXIF.GeoLocation.AccuracyXY << " m" << " Z " << imageEXIF.GeoLocation.AccuracyZ << " m" << "\n"; std::cout << "GeoLocation.GPSDOP " << imageEXIF.GeoLocation.GPSDOP << "\n"; std::cout << "GeoLocation.GPSDifferential " << imageEXIF.GeoLocation.GPSDifferential << "\n"; if (!imageEXIF.GeoLocation.GPSMapDatum.empty())