mirror of
https://github.com/tumic0/GPXSee.git
synced 2024-11-24 11:45:53 +01:00
Added support for Temperature, Cadence and Heartrate in KML files
This commit is contained in:
parent
ec3f529b0f
commit
72968efeef
@ -225,10 +225,138 @@ void KMLParser::point(Waypoint &waypoint)
|
|||||||
_reader.raiseError("Missing Point coordinates");
|
_reader.raiseError("Missing Point coordinates");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qreal KMLParser::value()
|
||||||
|
{
|
||||||
|
bool res;
|
||||||
|
qreal val = _reader.readElementText().toDouble(&res);
|
||||||
|
|
||||||
|
if (!res)
|
||||||
|
_reader.raiseError("Invalid value");
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMLParser::heartRate(TrackData &track, int start)
|
||||||
|
{
|
||||||
|
int i = start;
|
||||||
|
const char error[] = "Heartrate data count mismatch";
|
||||||
|
|
||||||
|
while (_reader.readNextStartElement()) {
|
||||||
|
if (_reader.name() == "value") {
|
||||||
|
if (i < track.size())
|
||||||
|
track[i++].setCadence(value());
|
||||||
|
else {
|
||||||
|
_reader.raiseError(error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
_reader.skipCurrentElement();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i != track.size())
|
||||||
|
_reader.raiseError(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMLParser::cadence(TrackData &track, int start)
|
||||||
|
{
|
||||||
|
int i = start;
|
||||||
|
const char error[] = "Cadence data count mismatch";
|
||||||
|
|
||||||
|
while (_reader.readNextStartElement()) {
|
||||||
|
if (_reader.name() == "value") {
|
||||||
|
if (i < track.size())
|
||||||
|
track[i++].setCadence(value());
|
||||||
|
else {
|
||||||
|
_reader.raiseError(error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
_reader.skipCurrentElement();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i != track.size())
|
||||||
|
_reader.raiseError(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMLParser::speed(TrackData &track, int start)
|
||||||
|
{
|
||||||
|
int i = start;
|
||||||
|
const char error[] = "Speed data count mismatch";
|
||||||
|
|
||||||
|
while (_reader.readNextStartElement()) {
|
||||||
|
if (_reader.name() == "value") {
|
||||||
|
if (i < track.size())
|
||||||
|
track[i++].setSpeed(value());
|
||||||
|
else {
|
||||||
|
_reader.raiseError(error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
_reader.skipCurrentElement();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i != track.size())
|
||||||
|
_reader.raiseError(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMLParser::temperature(TrackData &track, int start)
|
||||||
|
{
|
||||||
|
int i = start;
|
||||||
|
const char error[] = "Temperature data count mismatch";
|
||||||
|
|
||||||
|
while (_reader.readNextStartElement()) {
|
||||||
|
if (_reader.name() == "value") {
|
||||||
|
if (i < track.size())
|
||||||
|
track[i++].setTemperature(value());
|
||||||
|
else {
|
||||||
|
_reader.raiseError(error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
_reader.skipCurrentElement();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i != track.size())
|
||||||
|
_reader.raiseError(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMLParser::schemaData(TrackData &track, int start)
|
||||||
|
{
|
||||||
|
while (_reader.readNextStartElement()) {
|
||||||
|
if (_reader.name() == "SimpleArrayData") {
|
||||||
|
QXmlStreamAttributes attr = _reader.attributes();
|
||||||
|
QStringRef name = attr.value("name");
|
||||||
|
|
||||||
|
if (name == "Heartrate")
|
||||||
|
heartRate(track, start);
|
||||||
|
else if (name == "Cadence")
|
||||||
|
cadence(track, start);
|
||||||
|
else if (name == "Speed")
|
||||||
|
speed(track, start);
|
||||||
|
else if (name == "Temperature")
|
||||||
|
temperature(track, start);
|
||||||
|
else
|
||||||
|
_reader.skipCurrentElement();
|
||||||
|
} else
|
||||||
|
_reader.skipCurrentElement();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMLParser::extendedData(TrackData &track, int start)
|
||||||
|
{
|
||||||
|
while (_reader.readNextStartElement()) {
|
||||||
|
if (_reader.name() == "SchemaData")
|
||||||
|
schemaData(track, start);
|
||||||
|
else
|
||||||
|
_reader.skipCurrentElement();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void KMLParser::track(TrackData &track)
|
void KMLParser::track(TrackData &track)
|
||||||
{
|
{
|
||||||
const char mismatchError[] = "gx:coord/when element count mismatch";
|
const char error[] = "gx:coord/when element count mismatch";
|
||||||
int i = track.size();
|
int first = track.size();
|
||||||
|
int i = first;
|
||||||
|
|
||||||
while (_reader.readNextStartElement()) {
|
while (_reader.readNextStartElement()) {
|
||||||
if (_reader.name() == "when") {
|
if (_reader.name() == "when") {
|
||||||
@ -236,19 +364,21 @@ void KMLParser::track(TrackData &track)
|
|||||||
track.last().setTimestamp(time());
|
track.last().setTimestamp(time());
|
||||||
} else if (_reader.name() == "coord") {
|
} else if (_reader.name() == "coord") {
|
||||||
if (i == track.size()) {
|
if (i == track.size()) {
|
||||||
_reader.raiseError(mismatchError);
|
_reader.raiseError(error);
|
||||||
return;
|
return;
|
||||||
} else if (!coord(track[i])) {
|
} else if (!coord(track[i])) {
|
||||||
_reader.raiseError("Invalid coordinates");
|
_reader.raiseError("Invalid coordinates");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
} else
|
} else if (_reader.name() == "ExtendedData")
|
||||||
|
extendedData(track, first);
|
||||||
|
else
|
||||||
_reader.skipCurrentElement();
|
_reader.skipCurrentElement();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i != track.size())
|
if (i != track.size())
|
||||||
_reader.raiseError(mismatchError);
|
_reader.raiseError(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
void KMLParser::multiTrack(TrackData &t)
|
void KMLParser::multiTrack(TrackData &t)
|
||||||
|
@ -29,6 +29,13 @@ private:
|
|||||||
bool pointCoordinates(Waypoint &waypoint);
|
bool pointCoordinates(Waypoint &waypoint);
|
||||||
bool lineCoordinates(TrackData &track);
|
bool lineCoordinates(TrackData &track);
|
||||||
bool coord(Trackpoint &trackpoint);
|
bool coord(Trackpoint &trackpoint);
|
||||||
|
void extendedData(TrackData &track, int start);
|
||||||
|
void schemaData(TrackData &track, int start);
|
||||||
|
void heartRate(TrackData &track, int start);
|
||||||
|
void cadence(TrackData &track, int start);
|
||||||
|
void speed(TrackData &track, int start);
|
||||||
|
void temperature(TrackData &track, int start);
|
||||||
|
qreal value();
|
||||||
QDateTime timeStamp();
|
QDateTime timeStamp();
|
||||||
qreal number();
|
qreal number();
|
||||||
QDateTime time();
|
QDateTime time();
|
||||||
|
Loading…
Reference in New Issue
Block a user