bool IGCParser::readBRecord(const char *line, int len) { qreal lat, lon, ele; QTime time; if (len < 35) return false; if (!readTimestamp(line + 1, time)) { _errorString = "Invalid timestamp"; return false; } if (!readLat(line + 7, lat)) { _errorString = "Invalid latitude"; return false; } if (!readLon(line + 15, lon)) { _errorString = "Invalid longitude"; return false; } if (!readAltitude(line + 24, ele)) { _errorString = "Invalid altitude"; return false; } if (time < _time) _date = _date.addDays(1); _time = time; Trackpoint t(Coordinates(lon, lat)); t.setTimestamp(QDateTime(_date, _time, Qt::UTC)); t.setElevation(ele); _tracks.last().append(t); return true; }
void ExifReaderWriter::readExif(QString pictureName) { Exiv2::Image::AutoPtr image = openExif(pictureName); if(image.get() == 0) return; Exiv2::ExifData &exifData = image->exifData(); if (exifData.empty()) { //qDebug() << "nejsou exif data"; emit(finished()); return; } //cteniGPS souradnic double lat = readLatLon("Exif.GPSInfo.GPSLatitude", exifData); double lon = readLatLon("Exif.GPSInfo.GPSLongitude", exifData); double alt = readAltitude("Exif.GPSInfo.GPSAltitude", exifData); if(lat < 1000 && lon<1000) { emit(setGps(lat, lon, alt)); } //////////////////////////// QDateTime *dateTime = NULL; //cteni data if((dateTime = readExifDate(exifData,"Exif.Photo.DateTimeOriginal")) == NULL) if((dateTime = readExifDate(exifData,"Exif.Image.DateTimeOriginal")) == NULL) if((dateTime = readExifDate(exifData,"Exif.Photo.DateTimeDigitized")) == NULL) dateTime = readExifDate(exifData,"Exif.Image.DateTime"); if(dateTime != NULL) emit(setDateTime(*dateTime)); emit(finished()); return; }
QStringList *ExifReaderWriter::readExifInfo(QString pictureName, FormatHandler *formatH) { QStringList *exifList = new QStringList; Exiv2::Image::AutoPtr image = openExif(pictureName); if(image.get() == 0) return exifList; Exiv2::ExifData &exifData = image->exifData(); if (exifData.empty()) { //nejsou exif data return exifList; } //cteniGPS souradnic double lat = readLatLon("Exif.GPSInfo.GPSLatitude", exifData); double lon = readLatLon("Exif.GPSInfo.GPSLongitude", exifData); double alt = readAltitude("Exif.GPSInfo.GPSAltitude", exifData); //////////////////////////// //cteni data QDateTime *dateTime = NULL; if((dateTime = readExifDate(exifData,"Exif.Photo.DateTimeOriginal")) == NULL) if((dateTime = readExifDate(exifData,"Exif.Image.DateTimeOriginal")) == NULL) if((dateTime = readExifDate(exifData,"Exif.Photo.DateTimeDigitized")) == NULL) dateTime = readExifDate(exifData,"Exif.Image.DateTime"); //////////////////// QString cameraMake = readExifItem(exifData, "Exif.Image.Make"); QString cameraModel = readExifItem(exifData, "Exif.Image.Model"); QString imageSize = readExifItem(exifData, "Exif.Photo.PixelXDimension") +" x " + readExifItem(exifData, "Exif.Photo.PixelYDimension"); QString exposureTime = getExposureTime(exifData); QString flash = getFlash(exifData); //'5' flash fired but strobe return light not detected, '7' flash fired and strobe return light detected. QString meteringMode = getMeteringMode(exifData); QString fNumber = getFNumber(exifData); QString isoSpeed = readExifItem(exifData, "Exif.Photo.ISOSpeedRatings"); QString focalLength = getFocalLength(exifData); QString comment = readExifItem(exifData, "Exif.Photo.UserComment"); QString exposureBias = getExposureBias(exifData); QString exposureProgram = getExposureProgram(exifData); ////////////////// (*exifList) << ((dateTime != NULL) ? dateTime->toString(formatH->formatDateTime) : "") << (lat < 1000 ?(formatH->gpsInFormat(lat) + (lat>=0 ? tr("N") : tr("S"))) : "") << (lon < 1000 ?(formatH->gpsInFormat(lon) + (lon>=0 ? tr("E") : tr("W"))) : "") << (alt > -999 ?(QString::number(alt) + tr(" m")) : "") << cameraMake << cameraModel << exposureTime << exposureBias << exposureProgram << imageSize << flash << fNumber << meteringMode << isoSpeed << focalLength << comment ; return exifList; }
//Returns the number of feet above sea level float MPL3115A2::readAltitudeFt() { return(readAltitude() * 3.28084); }