RasterProcessTool/GF3CalibrationAndOrthLib/SatelliteGF3xmlParser.cpp

284 lines
14 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "SatelliteGF3xmlParser.h"
#include <QDateTime>
bool SatelliteGF3xmlParser::loadFile(const QString& filename) {
QFile file(filename);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
qWarning() << u8"Cannot open file:" << filename;
return false;
}
QDomDocument doc;
if (!doc.setContent(&file)) {
file.close();
qWarning() << u8"Failed to parse the file into a DOM tree.";
return false;
}
file.close();
xml = doc;
this->parseAdditionalData();
this->parseImageInfo();
this->parsePlatform();
this->parseGPS();
//´¦Àíʱ¼ä
double tempreftime = start + (end - start) / 2;
for (long i = 0;i < antposs.size();i++)
{
antposs[i].time = antposs[i].time - tempreftime;
}
start = start- tempreftime;
end = end- tempreftime;
return true;
}
void SatelliteGF3xmlParser::parsePlatform() {
QDomElement platform = xml.firstChildElement("product").firstChildElement("platform");
if (!platform.isNull()) {
CenterTime = platform.firstChildElement("CenterTime").text();
Rs = platform.firstChildElement("Rs").text().toDouble();
satVelocity = platform.firstChildElement("satVelocity").text().toDouble();
RollAngle = platform.firstChildElement("RollAngle").text().toDouble();
PitchAngle = platform.firstChildElement("PitchAngle").text().toDouble();
YawAngle = platform.firstChildElement("YawAngle").text().toDouble();
Xs = platform.firstChildElement("Xs").text().toDouble();
Ys = platform.firstChildElement("Ys").text().toDouble();
Zs = platform.firstChildElement("Zs").text().toDouble();
Vxs = platform.firstChildElement("Vxs").text().toDouble();
Vys = platform.firstChildElement("Vys").text().toDouble();
Vzs = platform.firstChildElement("Vzs").text().toDouble();
qDebug() << u8"Platform Data:";
qDebug() << u8"CenterTime:" << CenterTime;
qDebug() << u8"Rs:" << Rs;
qDebug() << u8"satVelocity:" << satVelocity;
qDebug() << u8"RollAngle:" << RollAngle;
qDebug() << u8"PitchAngle:" << PitchAngle;
qDebug() << u8"YawAngle:" << YawAngle;
qDebug() << u8"Xs:" << Xs;
qDebug() << u8"Ys:" << Ys;
qDebug() << u8"Zs:" << Zs;
qDebug() << u8"Vxs:" << Vxs;
qDebug() << u8"Vys:" << Vys;
qDebug() << u8"Vzs:" << Vzs;
}
}
void SatelliteGF3xmlParser::parseGPS() {
QDomElement GPS = xml.firstChildElement("product").firstChildElement("GPS");
if (!GPS.isNull()) {
QDomNodeList GPSParams = GPS.elementsByTagName("GPSParam");
for (int i = 0; i < GPSParams.count(); ++i) {
QDomElement GPSParam = GPSParams.at(i).toElement();
SatellitePos satepos{0.0 ,0.0,0.0,0.0, 0.0,0.0,0.0 };
QString TimeStamp = GPSParam.firstChildElement("TimeStamp").text();
QString xPosition = GPSParam.firstChildElement("xPosition").text();
QString yPosition = GPSParam.firstChildElement("yPosition").text();
QString zPosition = GPSParam.firstChildElement("zPosition").text();
QString xVelocity = GPSParam.firstChildElement("xVelocity").text();
QString yVelocity = GPSParam.firstChildElement("yVelocity").text();
QString zVelocity = GPSParam.firstChildElement("zVelocity").text();
TimestampMicroseconds dateTime = parseAndConvert(TimeStamp.toStdString());
satepos.time = dateTime.msecsSinceEpoch / 1000.0 + dateTime.microseconds / 100000.0;
satepos.Px = xPosition.toDouble();
satepos.Py = yPosition.toDouble();
satepos.Pz = zPosition.toDouble();
satepos.Vx = xVelocity.toDouble();
satepos.Vy = yVelocity.toDouble();
satepos.Vz = zVelocity.toDouble();
this->antposs.append(satepos);
qDebug() << u8"\nGPS Param Data:";
qDebug() << u8"TimeStamp:" << TimeStamp;
qDebug() << u8"xPosition:" << xPosition;
qDebug() << u8"yPosition:" << yPosition;
qDebug() << u8"zPosition:" << zPosition;
qDebug() << u8"xVelocity:" << xVelocity;
qDebug() << u8"yVelocity:" << yVelocity;
qDebug() << u8"zVelocity:" << zVelocity;
}
}
}
void SatelliteGF3xmlParser::parseImageInfo() {
QDomElement imageinfo = xml.firstChildElement("product").firstChildElement("imageinfo");
if (!imageinfo.isNull()) {
QDomElement imagingTime = imageinfo.firstChildElement("imagingTime");
QString starttimestr = imagingTime.firstChildElement("start").text().trimmed();
QString endtimestr = imagingTime.firstChildElement("end").text().trimmed();
TimestampMicroseconds starttime = parseAndConvert(starttimestr.toStdString());
TimestampMicroseconds endtime = parseAndConvert(endtimestr.toStdString());
start = starttime.msecsSinceEpoch / 1000.0 + starttime.microseconds / 100000.0;
end = endtime.msecsSinceEpoch / 1000.0 + endtime.microseconds / 100000.0;
// ´òÓ¡starttime,endtime
qDebug() << u8"³ÉÏñ¿ªÊ¼Ê±¼ä(parse)£º" << starttime.msecsSinceEpoch << "\t" << starttime.microseconds;
qDebug() << u8"³ÉÏñ½áÊøÊ±¼ä(parse)£º" << endtime.msecsSinceEpoch << "\t" << endtime.microseconds;
qDebug() << u8"³ÉÏñ¿ªÊ¼Ê±¼ä£º" << start <<"\t"<< starttimestr;
qDebug() << u8"³ÉÏñ½áÊøÊ±¼ä£º" << end << "\t" << endtimestr;
nearRange = imageinfo.firstChildElement("nearRange").text().toDouble();
refRange = imageinfo.firstChildElement("refRange").text().toDouble();
eqvFs = imageinfo.firstChildElement("eqvFs").text().toDouble();
eqvPRF = imageinfo.firstChildElement("eqvPRF").text().toDouble();
QDomElement center = imageinfo.firstChildElement("center");
latitude_center = center.firstChildElement("latitude").text().toDouble();
longitude_center = center.firstChildElement("longitude").text().toDouble();
QDomElement corner = imageinfo.firstChildElement("corner");
QDomElement topLeft = corner.firstChildElement("topLeft");
latitude_topLeft = topLeft.firstChildElement("latitude").text().toDouble();
longitude_topLeft = topLeft.firstChildElement("longitude").text().toDouble();
QDomElement topRight = corner.firstChildElement("topRight");
latitude_topRight = topRight.firstChildElement("latitude").text().toDouble();
longitude_topRight = topRight.firstChildElement("longitude").text().toDouble();
QDomElement bottomLeft = corner.firstChildElement("bottomLeft");
latitude_bottomLeft = bottomLeft.firstChildElement("latitude").text().toDouble();
longitude_bottomLeft = bottomLeft.firstChildElement("longitude").text().toDouble();
QDomElement bottomRight = corner.firstChildElement("bottomRight");
latitude_bottomRight = bottomRight.firstChildElement("latitude").text().toDouble();
longitude_bottomRight = bottomRight.firstChildElement("longitude").text().toDouble();
width = imageinfo.firstChildElement("width").text().toInt();
height = imageinfo.firstChildElement("height").text().toInt();
widthspace = imageinfo.firstChildElement("widthspace").text().toDouble();
heightspace = imageinfo.firstChildElement("heightspace").text().toDouble();
sceneShift = imageinfo.firstChildElement("sceneShift").text().toDouble();
imagebit = imageinfo.firstChildElement("imagebit").text();
QDomElement qualifyValue = imageinfo.firstChildElement("QualifyValue");
bool HH_QualifyValueISNULL=false;
bool HV_QualifyValueISNULL=false;
bool VH_QualifyValueISNULL=false;
bool VV_QualifyValueISNULL = false;
HH_QualifyValue = qualifyValue.firstChildElement("HH").text().toDouble(&HH_QualifyValueISNULL);
HV_QualifyValue = qualifyValue.firstChildElement("HV").text().toDouble(&HV_QualifyValueISNULL);
VH_QualifyValue = qualifyValue.firstChildElement("HH").text().toDouble(&VH_QualifyValueISNULL);
VV_QualifyValue = qualifyValue.firstChildElement("HV").text().toDouble(&VV_QualifyValueISNULL);
HH_QualifyValue = HH_QualifyValueISNULL ? HH_QualifyValue : -1;
HV_QualifyValue = HV_QualifyValueISNULL ? HV_QualifyValue : -1;
VH_QualifyValue = VH_QualifyValueISNULL ? VH_QualifyValue : -1;
VV_QualifyValue = VV_QualifyValueISNULL ? VV_QualifyValue : -1;
QDomElement echoSaturation = imageinfo.firstChildElement("echoSaturation");
HH_echoSaturation = echoSaturation.firstChildElement("HH").text().toDouble();
HV_echoSaturation = echoSaturation.firstChildElement("HV").text().toDouble();
incidenceAngleNearRange = imageinfo.firstChildElement("incidenceAngleNearRange").text().toDouble();
incidenceAngleFarRange = imageinfo.firstChildElement("incidenceAngleFarRange").text().toDouble();
qDebug() << u8"\nImage Info Data:";
qDebug() << u8"Start:" << start;
qDebug() << u8"End:" << end;
qDebug() << u8"Near Range:" << nearRange;
qDebug() << u8"Ref Range:" << refRange;
qDebug() << u8"Eqv Fs:" << eqvFs;
qDebug() << u8"Eqv PRF:" << eqvPRF;
qDebug() << u8"Center Latitude:" << latitude_center << ", Longitude:" << longitude_center;
qDebug() << u8"Top Left Corner Latitude:" << latitude_topLeft << ", Longitude:" << longitude_topLeft;
qDebug() << u8"Top Right Corner Latitude:" << latitude_topRight << ", Longitude:" << longitude_topRight;
qDebug() << u8"Bottom Left Corner Latitude:" << latitude_bottomLeft << ", Longitude:" << longitude_bottomLeft;
qDebug() << u8"Bottom Right Corner Latitude:" << latitude_bottomRight << ", Longitude:" << longitude_bottomRight;
qDebug() << u8"Width:" << width;
qDebug() << u8"Height:" << height;
qDebug() << u8"Width Space:" << widthspace;
qDebug() << u8"Height Space:" << heightspace;
qDebug() << u8"Scene Shift:" << sceneShift;
qDebug() << u8"Image Bit:" << imagebit;
qDebug() << u8"HH Qualify Value:" << HH_QualifyValue;
qDebug() << u8"HV Qualify Value:" << HV_QualifyValue;
qDebug() << u8"HH Echo Saturation:" << HH_echoSaturation;
qDebug() << u8"HV Echo Saturation:" << HV_echoSaturation;
qDebug() << u8"incidenceAngleNearRange:" << incidenceAngleNearRange;
qDebug() << u8"incidenceAngleFarRange:" << incidenceAngleFarRange;
}
}
void SatelliteGF3xmlParser::parseAdditionalData() {
QDomElement processinfo = xml.firstChildElement("product").firstChildElement("processinfo");
QDomElement calibrationConst = processinfo.firstChildElement("CalibrationConst");
if (!calibrationConst.isNull()) {
bool HH_CalibrationConstISNULL=false;
bool HV_CalibrationConstISNULL=false;
bool VH_CalibrationConstISNULL=false;
bool VV_CalibrationConstISNULL = false;
HH_CalibrationConst = calibrationConst.firstChildElement("HH").text().toDouble(&HH_CalibrationConstISNULL);
HV_CalibrationConst = calibrationConst.firstChildElement("HV").text().toDouble(&HV_CalibrationConstISNULL);
VH_CalibrationConst = calibrationConst.firstChildElement("VH").text().toDouble(&VH_CalibrationConstISNULL);
VV_CalibrationConst = calibrationConst.firstChildElement("VV").text().toDouble(&VV_CalibrationConstISNULL);
HH_CalibrationConst = HH_CalibrationConstISNULL ? HH_CalibrationConst : -1;
HV_CalibrationConst = HV_CalibrationConstISNULL ? HV_CalibrationConst : -1;
VH_CalibrationConst = VH_CalibrationConstISNULL ? VH_CalibrationConst : -1;
VV_CalibrationConst = VV_CalibrationConstISNULL ? VV_CalibrationConst : -1;
qDebug() << u8"\nCalibration Const Data:";
qDebug() << u8"HH Calibration Const:" << HH_CalibrationConst;
qDebug() << u8"HV Calibration Const:" << HV_CalibrationConst;
qDebug() << u8"VH Calibration Const:" << VH_CalibrationConst;
qDebug() << u8"VV Calibration Const:" << VV_CalibrationConst;
}
AzFdc0 = processinfo.firstChildElement("AzFdc0").text().toDouble();
AzFdc1 = processinfo.firstChildElement("AzFdc1").text().toDouble();
QDomElement sensorNode = xml.firstChildElement("product").firstChildElement("sensor");
sensorID = sensorNode.firstChildElement("sensorID").text();
imagingMode = sensorNode.firstChildElement("imagingMode").text();
lamda = sensorNode.firstChildElement("lamda").text().toDouble();
RadarCenterFrequency = sensorNode.firstChildElement("RadarCenterFrequency").text().toDouble();
TotalProcessedAzimuthBandWidth = processinfo.firstChildElement("TotalProcessedAzimuthBandWidth").text().toDouble();
DopplerParametersReferenceTime = processinfo.firstChildElement("DopplerParametersReferenceTime").text().toDouble();
QDomElement dopplerCentroidCoefficients = processinfo.firstChildElement("DopplerCentroidCoefficients");
d0 = dopplerCentroidCoefficients.firstChildElement("d0").text().toDouble();
d1 = dopplerCentroidCoefficients.firstChildElement("d1").text().toDouble();
d2 = dopplerCentroidCoefficients.firstChildElement("d2").text().toDouble();
d3 = dopplerCentroidCoefficients.firstChildElement("d3").text().toDouble();
d4 = dopplerCentroidCoefficients.firstChildElement("d4").text().toDouble();
QDomElement dopplerRateValuesCoefficients = processinfo.firstChildElement("DopplerRateValuesCoefficients");
r0 = dopplerRateValuesCoefficients.firstChildElement("r0").text().toDouble();
r1 = dopplerRateValuesCoefficients.firstChildElement("r1").text().toDouble();
r2 = dopplerRateValuesCoefficients.firstChildElement("r2").text().toDouble();
r3 = dopplerRateValuesCoefficients.firstChildElement("r3").text().toDouble();
r4 = dopplerRateValuesCoefficients.firstChildElement("r4").text().toDouble();
DEM = processinfo.firstChildElement("DEM").text().toDouble();
qDebug() << u8"\nAdditional Data:";
qDebug() << u8"AzFdc0:" << AzFdc0;
qDebug() << u8"AzFdc1:" << AzFdc1;
qDebug() << u8"Sensor ID:" << sensorID;
qDebug() << u8"Imaging Mode:" << imagingMode;
qDebug() << u8"Lambda:" << lamda;
qDebug() << u8"Radar Center Frequency:" << RadarCenterFrequency;
qDebug() << u8"Total Processed Azimuth Band Width:" << TotalProcessedAzimuthBandWidth;
qDebug() << u8"Doppler Parameters Reference Time:" << DopplerParametersReferenceTime;
qDebug() << u8"Doppler Centroid Coefficients: d0=" << d0 << ", d1=" << d1 << ", d2=" << d2 << ", d3=" << d3 << ", d4=" << d4;
qDebug() << u8"Doppler Rate Values Coefficients: r0=" << r0 << ", r1=" << r1 << ", r2=" << r2 << ", r3=" << r3 << ", r4=" << r4;
qDebug() << u8"DEM:" << DEM;
}