mirror of
https://github.com/tumic0/GPXSee.git
synced 2025-03-14 02:57:45 +01:00
Added support for 70mai dashcams GPS log files
This commit is contained in:
parent
c5f51e935e
commit
044770bc84
@ -117,6 +117,7 @@ HEADERS += src/common/config.h \
|
|||||||
src/data/gpsdumpparser.h \
|
src/data/gpsdumpparser.h \
|
||||||
src/data/style.h \
|
src/data/style.h \
|
||||||
src/data/twonavparser.h \
|
src/data/twonavparser.h \
|
||||||
|
src/data/txtparser.h \
|
||||||
src/map/IMG/light.h \
|
src/map/IMG/light.h \
|
||||||
src/map/downloader.h \
|
src/map/downloader.h \
|
||||||
src/map/demloader.h \
|
src/map/demloader.h \
|
||||||
@ -343,6 +344,7 @@ SOURCES += src/main.cpp \
|
|||||||
src/GUI/pngexportdialog.cpp \
|
src/GUI/pngexportdialog.cpp \
|
||||||
src/GUI/projectioncombobox.cpp \
|
src/GUI/projectioncombobox.cpp \
|
||||||
src/GUI/passwordedit.cpp \
|
src/GUI/passwordedit.cpp \
|
||||||
|
src/data/txtparser.cpp \
|
||||||
src/map/downloader.cpp \
|
src/map/downloader.cpp \
|
||||||
src/map/demloader.cpp \
|
src/map/demloader.cpp \
|
||||||
src/map/ENC/atlasdata.cpp \
|
src/map/ENC/atlasdata.cpp \
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include "onmoveparsers.h"
|
#include "onmoveparsers.h"
|
||||||
#include "twonavparser.h"
|
#include "twonavparser.h"
|
||||||
#include "gpsdumpparser.h"
|
#include "gpsdumpparser.h"
|
||||||
|
#include "txtparser.h"
|
||||||
#include "data.h"
|
#include "data.h"
|
||||||
|
|
||||||
|
|
||||||
@ -49,6 +50,7 @@ static OMDParser omd;
|
|||||||
static GHPParser ghp;
|
static GHPParser ghp;
|
||||||
static TwoNavParser twonav;
|
static TwoNavParser twonav;
|
||||||
static GPSDumpParser gpsdump;
|
static GPSDumpParser gpsdump;
|
||||||
|
static TXTParser txt;
|
||||||
|
|
||||||
static QMultiMap<QString, Parser*> parsers()
|
static QMultiMap<QString, Parser*> parsers()
|
||||||
{
|
{
|
||||||
@ -82,6 +84,7 @@ static QMultiMap<QString, Parser*> parsers()
|
|||||||
map.insert("rte", &twonav);
|
map.insert("rte", &twonav);
|
||||||
map.insert("wpt", &twonav);
|
map.insert("wpt", &twonav);
|
||||||
map.insert("wpt", &gpsdump);
|
map.insert("wpt", &gpsdump);
|
||||||
|
map.insert("txt", &txt);
|
||||||
|
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
@ -241,6 +244,7 @@ QString Data::formats()
|
|||||||
+ qApp->translate("Data", "SLF files") + " (*.slf);;"
|
+ qApp->translate("Data", "SLF files") + " (*.slf);;"
|
||||||
+ qApp->translate("Data", "SML files") + " (*.sml);;"
|
+ qApp->translate("Data", "SML files") + " (*.sml);;"
|
||||||
+ qApp->translate("Data", "TCX files") + " (*.tcx);;"
|
+ qApp->translate("Data", "TCX files") + " (*.tcx);;"
|
||||||
|
+ qApp->translate("Data", "70mai GPS log files") + " (*.txt);;"
|
||||||
+ qApp->translate("Data", "TwoNav files") + " (*.rte *.trk *.wpt);;"
|
+ qApp->translate("Data", "TwoNav files") + " (*.rte *.trk *.wpt);;"
|
||||||
+ qApp->translate("Data", "GPSDump files") + " (*.wpt);;"
|
+ qApp->translate("Data", "GPSDump files") + " (*.wpt);;"
|
||||||
+ qApp->translate("Data", "All files") + " (*)";
|
+ qApp->translate("Data", "All files") + " (*)";
|
||||||
|
80
src/data/txtparser.cpp
Normal file
80
src/data/txtparser.cpp
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
#include <QTimeZone>
|
||||||
|
#include "common/csv.h"
|
||||||
|
#include "txtparser.h"
|
||||||
|
|
||||||
|
static Coordinates coordinates(const QByteArrayList &entry)
|
||||||
|
{
|
||||||
|
bool lonOk, latOk;
|
||||||
|
double lon = entry.at(3).toDouble(&lonOk);
|
||||||
|
double lat = entry.at(2).toDouble(&latOk);
|
||||||
|
|
||||||
|
return (lonOk && latOk) ? Coordinates(lon, lat) : Coordinates();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TXTParser::parse(QFile *file, QList<TrackData> &tracks,
|
||||||
|
QList<RouteData> &routes, QList<Area> &polygons, QVector<Waypoint> &waypoints)
|
||||||
|
{
|
||||||
|
Q_UNUSED(routes);
|
||||||
|
Q_UNUSED(polygons);
|
||||||
|
Q_UNUSED(waypoints);
|
||||||
|
CSV csv(file);
|
||||||
|
QByteArrayList entry;
|
||||||
|
SegmentData *sg = 0;
|
||||||
|
|
||||||
|
_errorLine = 1;
|
||||||
|
_errorString.clear();
|
||||||
|
|
||||||
|
while (!csv.atEnd()) {
|
||||||
|
if (!csv.readEntry(entry)) {
|
||||||
|
_errorString = "CSV parse error";
|
||||||
|
_errorLine = csv.line() - 1;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (entry.size() == 1) {
|
||||||
|
if (entry.at(0) == "$V02") {
|
||||||
|
tracks.append(TrackData(SegmentData()));
|
||||||
|
sg = &tracks.last().last();
|
||||||
|
} else {
|
||||||
|
_errorString = "Invalid track start marker";
|
||||||
|
_errorLine = csv.line() - 1;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (entry.size() == 13) {
|
||||||
|
if (!sg) {
|
||||||
|
_errorString = "Missing start marker";
|
||||||
|
_errorLine = csv.line() - 1;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (entry.at(1) == "A") {
|
||||||
|
Coordinates c(coordinates(entry));
|
||||||
|
if (!c.isValid()) {
|
||||||
|
_errorString = "Invalid coordinates";
|
||||||
|
_errorLine = csv.line() - 1;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Trackpoint tp(c);
|
||||||
|
|
||||||
|
bool ok;
|
||||||
|
qulonglong ts = entry.at(0).toULongLong(&ok);
|
||||||
|
if (!ok) {
|
||||||
|
_errorString = "Invalid timestamp";
|
||||||
|
_errorLine = csv.line() - 1;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
tp.setTimestamp(QDateTime::fromSecsSinceEpoch(ts,
|
||||||
|
QTimeZone::utc()));
|
||||||
|
|
||||||
|
uint speed = entry.at(5).toULong(&ok);
|
||||||
|
if (ok)
|
||||||
|
tp.setSpeed(speed * 0.01);
|
||||||
|
|
||||||
|
if (c != Coordinates(0, 0))
|
||||||
|
sg->append(tp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
18
src/data/txtparser.h
Normal file
18
src/data/txtparser.h
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#ifndef TXTPARSER_H
|
||||||
|
#define TXTPARSER_H
|
||||||
|
|
||||||
|
#include "parser.h"
|
||||||
|
|
||||||
|
class TXTParser : public Parser
|
||||||
|
{
|
||||||
|
bool parse(QFile *file, QList<TrackData> &tracks, QList<RouteData> &routes,
|
||||||
|
QList<Area> &polygons, QVector<Waypoint> &waypoints);
|
||||||
|
QString errorString() const {return _errorString;}
|
||||||
|
int errorLine() const {return _errorLine;}
|
||||||
|
|
||||||
|
private:
|
||||||
|
QString _errorString;
|
||||||
|
int _errorLine;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // TXTPARSER_H
|
Loading…
x
Reference in New Issue
Block a user