void OGRXPlaneAwyReader::ParseRecord() { const char* pszFirstPointName; const char* pszSecondPointName; const char* pszAirwaySegmentName; double dfLat1, dfLon1; double dfLat2, dfLon2; int bIsHigh; int nBaseFL, nTopFL; pszFirstPointName = papszTokens[0]; RET_IF_FAIL(readLatLon(&dfLat1, &dfLon1, 1)); pszSecondPointName = papszTokens[3]; RET_IF_FAIL(readLatLon(&dfLat2, &dfLon2, 4)); bIsHigh = atoi(papszTokens[6]) == 2; nBaseFL = atoi(papszTokens[7]); nTopFL = atoi(papszTokens[8]); pszAirwaySegmentName = papszTokens[9]; if (poAirwayIntersectionLayer) { poAirwayIntersectionLayer->AddFeature(pszFirstPointName, dfLat1, dfLon1); poAirwayIntersectionLayer->AddFeature(pszSecondPointName, dfLat2, dfLon2); } if (poAirwaySegmentLayer) { /* poAirwaySegmentLayer->AddFeature(pszAirwaySegmentName, pszFirstPointName, pszSecondPointName, dfLat1, dfLon1, dfLat2, dfLon2, bIsHigh, nBaseFL, nTopFL); */ if (strchr(pszAirwaySegmentName, '-')) { char** papszSegmentNames = CSLTokenizeString2( pszAirwaySegmentName, "-", CSLT_HONOURSTRINGS ); int i = 0; while(papszSegmentNames[i]) { poAirwaySegmentLayer->AddFeature(papszSegmentNames[i], pszFirstPointName, pszSecondPointName, dfLat1, dfLon1, dfLat2, dfLon2, bIsHigh, nBaseFL, nTopFL); i++; } CSLDestroy(papszSegmentNames); } else { poAirwaySegmentLayer->AddFeature(pszAirwaySegmentName, pszFirstPointName, pszSecondPointName, dfLat1, dfLon1, dfLat2, dfLon2, bIsHigh, nBaseFL, nTopFL); } } }
void OGRXPlaneFixReader::ParseRecord() { double dfLat, dfLon; CPLString osName; RET_IF_FAIL(readLatLon(&dfLat, &dfLon, 0)); osName = readStringUntilEnd(2); if (poFIXLayer) poFIXLayer->AddFeature(osName, dfLat, dfLon); }
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; }
void OGRXPlaneNavReader::ParseRecord( int nType ) { double dfVal = 0.0; double dfTrueHeading = 0.0; double dfLat = 0.0; double dfLon = 0.0; RET_IF_FAIL(readLatLon(&dfLat, &dfLon, 1)); double dfElevation = 0.0; /* feet to meter */ RET_IF_FAIL(readDoubleWithBoundsAndConversion(&dfElevation, 3, "elevation", FEET_TO_METER, -1000., 10000.)); double dfFrequency = 0.0; RET_IF_FAIL(readDouble(&dfFrequency, 4, "frequency")); /* NDB frequencies are in kHz. Others must be divided by 100 */ /* to get a frequency in MHz */ if (nType != NAVAID_NDB) dfFrequency /= 100.; double dfRange = 0.0; /* nautical miles to kilometer */ RET_IF_FAIL(readDouble(&dfRange, 5, "range")); dfRange *= NM_TO_KM; char* pszNavaidId = papszTokens[7]; if (nType == NAVAID_NDB) { const char* pszSubType = ""; CPLString osNavaidName; if (EQUAL(papszTokens[nTokens-1], "NDB") || EQUAL(papszTokens[nTokens-1], "LOM") || EQUAL(papszTokens[nTokens-1], "NDB-DME")) { pszSubType = papszTokens[nTokens-1]; nTokens--; } else { CPLDebug("XPlane", "Unexpected NDB subtype : %s", papszTokens[nTokens-1]); } osNavaidName = readStringUntilEnd(8); if (poNDBLayer) poNDBLayer->AddFeature(pszNavaidId, osNavaidName, pszSubType, dfLat, dfLon, dfElevation, dfFrequency, dfRange); } else if (nType == NAVAID_VOR) { const char* pszSubType = ""; CPLString osNavaidName; double dfSlavedVariation = 0.0; RET_IF_FAIL(readDoubleWithBounds(&dfSlavedVariation, 6, "slaved variation", -180., 180.)); if (EQUAL(papszTokens[nTokens-1], "VOR") || EQUAL(papszTokens[nTokens-1], "VORTAC") || EQUAL(papszTokens[nTokens-1], "VOR-DME")) { pszSubType = papszTokens[nTokens-1]; nTokens--; } else { CPLDebug("XPlane", "Unexpected VOR subtype : %s", papszTokens[nTokens-1]); } osNavaidName = readStringUntilEnd(8); if (poVORLayer) poVORLayer->AddFeature(pszNavaidId, osNavaidName, pszSubType, dfLat, dfLon, dfElevation, dfFrequency, dfRange, dfSlavedVariation); } else if (nType == NAVAID_LOC_ILS || nType == NAVAID_LOC_STANDALONE) { RET_IF_FAIL(readDoubleWithBounds(&dfTrueHeading, 6, "true heading", 0.0, 360.)); RET_IF_FAIL(assertMinCol(11)); const char *pszAptICAO = papszTokens[8]; const char *pszRwyNum = papszTokens[9]; const char *pszSubType = papszTokens[10]; if (EQUAL(pszSubType, "ILS-cat-I") || EQUAL(pszSubType, "ILS-cat-II") || EQUAL(pszSubType, "ILS-cat-III") || EQUAL(pszSubType, "LOC") || EQUAL(pszSubType, "LDA") || EQUAL(pszSubType, "SDF") || EQUAL(pszSubType, "IGS") || EQUAL(pszSubType, "LDA-GS")) { if (poILSLayer) poILSLayer->AddFeature(pszNavaidId, pszAptICAO, pszRwyNum, pszSubType, dfLat, dfLon, dfElevation, dfFrequency, dfRange, dfTrueHeading); } else { CPLDebug("XPlane", "Line %d : invalid localizer subtype: '%s'", nLineNumber, pszSubType); return; } } else if (nType == NAVAID_GS) { RET_IF_FAIL(readDouble(&dfVal, 6, "slope & heading")); const double dfSlope = (int)(dfVal / 1000) / 100.; dfTrueHeading = dfVal - dfSlope * 100000; if (dfTrueHeading < 0 || dfTrueHeading > 360) { CPLDebug("XPlane", "Line %d : invalid true heading '%f'", nLineNumber, dfTrueHeading); return; } RET_IF_FAIL(assertMinCol(11)); const char *pszAptICAO = papszTokens[8]; const char *pszRwyNum = papszTokens[9]; const char *pszSubType = papszTokens[10]; if (EQUAL(pszSubType, "GS") ) { if (poGSLayer) poGSLayer->AddFeature(pszNavaidId, pszAptICAO, pszRwyNum, dfLat, dfLon, dfElevation, dfFrequency, dfRange, dfTrueHeading, dfSlope); } else { CPLDebug("XPlane", "Line %d : invalid glideslope subtype: '%s'", nLineNumber, pszSubType); return; } } else if (nType == NAVAID_OM || nType == NAVAID_MM || nType == NAVAID_IM) { const char* pszAptICAO, * pszRwyNum, * pszSubType; RET_IF_FAIL(readDoubleWithBounds(&dfTrueHeading, 6, "true heading", 0.0, 360.0)); RET_IF_FAIL(assertMinCol(11)); pszAptICAO = papszTokens[8]; pszRwyNum = papszTokens[9]; pszSubType = papszTokens[10]; if (EQUAL(pszSubType, "OM") || EQUAL(pszSubType, "MM") || EQUAL(pszSubType, "IM") ) { if (poMarkerLayer) poMarkerLayer->AddFeature(pszAptICAO, pszRwyNum, pszSubType, dfLat, dfLon, dfElevation, dfTrueHeading); } else { CPLDebug("XPlane", "Line %d : invalid localizer marker subtype: '%s'", nLineNumber, pszSubType); return; } } else if (nType == NAVAID_DME_COLOC || nType == NAVAID_DME_STANDALONE) { const char* pszSubType = ""; CPLString osNavaidName; double dfDMEBias = 0.0; RET_IF_FAIL(readDouble(&dfDMEBias, 6, "DME bias")); dfDMEBias *= NM_TO_KM; if (EQUAL(papszTokens[nTokens-1], "DME-ILS")) { char* pszAptICAO, * pszRwyNum /* , * pszSubType */; if (nTokens != 11) { CPLDebug("XPlane", "Line %d : not enough columns : %d", nLineNumber, nTokens); return; } pszAptICAO = papszTokens[8]; pszRwyNum = papszTokens[9]; /* pszSubType = papszTokens[10]; */ if (poDMEILSLayer) poDMEILSLayer->AddFeature(pszNavaidId, pszAptICAO, pszRwyNum, dfLat, dfLon, dfElevation, dfFrequency, dfRange, dfDMEBias); } else { if (EQUAL(papszTokens[nTokens-1], "DME")) { nTokens--; if (EQUAL(papszTokens[nTokens-1], "VORTAC") || EQUAL(papszTokens[nTokens-1], "VOR-DME") || EQUAL(papszTokens[nTokens-1], "TACAN") || EQUAL(papszTokens[nTokens-1], "NDB-DME")) { /* pszSubType = papszTokens[nTokens-1]; */ nTokens--; } } else { CPLDebug("XPlane", "Line %d : Unexpected DME subtype : %s", nLineNumber, papszTokens[nTokens-1]); } osNavaidName = readStringUntilEnd(8); if (poDMELayer) poDMELayer->AddFeature(pszNavaidId, osNavaidName, pszSubType, dfLat, dfLon, dfElevation, dfFrequency, dfRange, dfDMEBias); } } else { CPLAssert(0); } }
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; }