2023-09-13 20:02:24 +02:00
|
|
|
#include "gmifile.h"
|
|
|
|
|
|
|
|
static CalibrationPoint calibrationPoint(const QByteArray line)
|
|
|
|
{
|
|
|
|
bool xOk, yOk, lonOk, latOk;
|
|
|
|
QList<QByteArray> list = line.split(';');
|
|
|
|
if (list.size() != 4)
|
|
|
|
return CalibrationPoint();
|
|
|
|
|
|
|
|
int x = list.at(0).toInt(&xOk);
|
|
|
|
int y = list.at(1).toInt(&yOk);
|
|
|
|
double lon = list.at(2).toDouble(&lonOk);
|
|
|
|
double lat = list.at(3).toDouble(&latOk);
|
|
|
|
|
|
|
|
return (xOk && yOk && latOk && lonOk)
|
|
|
|
? CalibrationPoint(PointD(x, y), Coordinates(lon, lat))
|
|
|
|
: CalibrationPoint();
|
|
|
|
}
|
|
|
|
|
2023-09-14 18:36:03 +02:00
|
|
|
bool GmiFile::parse(QIODevice &device)
|
2023-09-13 20:02:24 +02:00
|
|
|
{
|
|
|
|
int ln = 1;
|
|
|
|
int width, height;
|
|
|
|
bool ok;
|
|
|
|
|
|
|
|
if (!device.open(QIODevice::ReadOnly)) {
|
|
|
|
_errorString = device.errorString();
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
while (!device.atEnd()) {
|
|
|
|
QByteArray line = device.readLine(4096);
|
|
|
|
|
|
|
|
if (ln == 1) {
|
|
|
|
if (!line.startsWith("Map Calibration data file")) {
|
|
|
|
_errorString = "Not a GMI file";
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
} else if (ln == 2)
|
|
|
|
_image = line.trimmed();
|
|
|
|
else if (ln == 3) {
|
|
|
|
width = line.toInt(&ok);
|
|
|
|
if (!ok || ok <= 0) {
|
|
|
|
_errorString = "Invalid image width";
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
} else if (ln == 4) {
|
|
|
|
height = line.toInt(&ok);
|
|
|
|
if (!ok || ok <= 0) {
|
|
|
|
_errorString = "Invalid image height";
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
_size = QSize(width, height);
|
|
|
|
} else {
|
|
|
|
CalibrationPoint cp(calibrationPoint(line));
|
|
|
|
if (cp.isValid())
|
2023-09-14 18:36:03 +02:00
|
|
|
_points.append(cp);
|
2023-09-13 20:02:24 +02:00
|
|
|
else
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
ln++;
|
|
|
|
}
|
|
|
|
|
|
|
|
device.close();
|
|
|
|
|
2023-09-14 18:36:03 +02:00
|
|
|
return (_points.size() >= 2);
|
2023-09-13 20:02:24 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
GmiFile::GmiFile(QIODevice &file)
|
|
|
|
{
|
2023-09-14 18:36:03 +02:00
|
|
|
_valid = parse(file);
|
2023-09-13 20:02:24 +02:00
|
|
|
}
|