Introduced IFDGPSTag enum

This commit is contained in:
Vladyslav Baranovskyi
2024-09-26 19:22:22 +03:00
parent e16ef9cbe1
commit 0ea1c5c7db

View File

@@ -39,6 +39,18 @@ namespace
GPS_INFO_OFFSET = 0x8825, GPS_INFO_OFFSET = 0x8825,
}; };
enum class IFDGPSTag : uint16_t
{
LATITUDE_REF = 1,
LATITUDE,
LONGITUDE_REF,
LONGITUDE,
ALTITUDE_REF,
ALTITUDE,
TRACK_REF = 14,
TRACK,
};
enum class IFDValueType enum class IFDValueType
{ {
BYTE = 1, BYTE = 1,
@@ -437,7 +449,7 @@ namespace OpenVulkano::Image
AppendU16(result, numberOfGPSInfoTags); AppendU16(result, numberOfGPSInfoTags);
// Latitude Ref // Latitude Ref
AppendTagAndValueType(result, 1, (uint16_t) IFDValueType::ASCII); AppendTagAndValueType(result, (uint16_t) IFDGPSTag::LATITUDE_REF, (uint16_t) IFDValueType::ASCII);
AppendU32(result, 2); // 2 for N/S + \0 AppendU32(result, 2); // 2 for N/S + \0
AppendU8(result, latitude.latitudeRef == LatitudeRef::NORTH ? 'N' : 'S'); AppendU8(result, latitude.latitudeRef == LatitudeRef::NORTH ? 'N' : 'S');
AppendU8(result, 0); AppendU8(result, 0);
@@ -445,12 +457,12 @@ namespace OpenVulkano::Image
AppendU8(result, 0); // padding AppendU8(result, 0); // padding
// Latitude // Latitude
AppendTagAndValueType(result, 2, (uint16_t) IFDValueType::RATIONAL); AppendTagAndValueType(result, (uint16_t) IFDGPSTag::LATITUDE, (uint16_t) IFDValueType::RATIONAL);
AppendU32(result, 3); // number of components AppendU32(result, 3); // number of components
int latitudeOffset = AppendU32NES(result, 0); // 0 * sizeof(RationalValue) int latitudeOffset = AppendU32NES(result, 0); // 0 * sizeof(RationalValue)
// Longitude Ref // Longitude Ref
AppendTagAndValueType(result, 3, (uint16_t) IFDValueType::ASCII); AppendTagAndValueType(result, (uint16_t) IFDGPSTag::LONGITUDE_REF, (uint16_t) IFDValueType::ASCII);
AppendU32(result, 2); // 2 for E/W + \0 AppendU32(result, 2); // 2 for E/W + \0
AppendU8(result, longitude.longitudeRef == LongitudeRef::EAST ? 'E' : 'W'); AppendU8(result, longitude.longitudeRef == LongitudeRef::EAST ? 'E' : 'W');
AppendU8(result, 0); AppendU8(result, 0);
@@ -458,12 +470,12 @@ namespace OpenVulkano::Image
AppendU8(result, 0); // padding AppendU8(result, 0); // padding
// Longitude // Longitude
AppendTagAndValueType(result, 4, (uint16_t) IFDValueType::RATIONAL); AppendTagAndValueType(result, (uint16_t) IFDGPSTag::LONGITUDE, (uint16_t) IFDValueType::RATIONAL);
AppendU32(result, 3); // number of components AppendU32(result, 3); // number of components
int longitudeOffset = AppendU32NES(result, 24); // 3 * sizeof(RationalValue) int longitudeOffset = AppendU32NES(result, 24); // 3 * sizeof(RationalValue)
// Altitude Ref // Altitude Ref
AppendTagAndValueType(result, 5, (uint16_t) IFDValueType::BYTE); AppendTagAndValueType(result, (uint16_t) IFDGPSTag::ALTITUDE_REF, (uint16_t) IFDValueType::BYTE);
AppendU32(result, 1); // number of components AppendU32(result, 1); // number of components
AppendU8(result, altitudeIsAboveSeaLevel ? 0 : 1); AppendU8(result, altitudeIsAboveSeaLevel ? 0 : 1);
AppendU8(result, 0); // padding AppendU8(result, 0); // padding
@@ -471,12 +483,12 @@ namespace OpenVulkano::Image
AppendU8(result, 0); // padding AppendU8(result, 0); // padding
// Altitude // Altitude
AppendTagAndValueType(result, 6, (uint16_t) IFDValueType::RATIONAL); AppendTagAndValueType(result, (uint16_t) IFDGPSTag::ALTITUDE, (uint16_t) IFDValueType::RATIONAL);
AppendU32(result, 1); // number of components AppendU32(result, 1); // number of components
int altitudeOffset = AppendU32NES(result, 48); // 6 * sizeof(RationalValue) int altitudeOffset = AppendU32NES(result, 48); // 6 * sizeof(RationalValue)
// Track Ref // Track Ref
AppendTagAndValueType(result, 14, (uint16_t) IFDValueType::ASCII); AppendTagAndValueType(result, (uint16_t) IFDGPSTag::TRACK_REF, (uint16_t) IFDValueType::ASCII);
AppendU32(result, 2); // 2 for T/M + \0 AppendU32(result, 2); // 2 for T/M + \0
AppendU8(result, trackRef == GPSTrackRef::TRUE_NORTH ? 'T' : 'M'); AppendU8(result, trackRef == GPSTrackRef::TRUE_NORTH ? 'T' : 'M');
AppendU8(result, 0); AppendU8(result, 0);
@@ -484,7 +496,7 @@ namespace OpenVulkano::Image
AppendU8(result, 0); // padding AppendU8(result, 0); // padding
// Track // Track
AppendTagAndValueType(result, 15, (uint16_t) IFDValueType::RATIONAL); AppendTagAndValueType(result, (uint16_t) IFDGPSTag::TRACK, (uint16_t) IFDValueType::RATIONAL);
AppendU32(result, 1); // number of components AppendU32(result, 1); // number of components
int trackOffset = AppendU32NES(result, 56); // 7 * sizeof(RationalValue) int trackOffset = AppendU32NES(result, 56); // 7 * sizeof(RationalValue)