mirror of
https://github.com/tumic0/GPXSee.git
synced 2024-11-30 22:51:16 +01:00
Added support for GPX area extensions
This commit is contained in:
parent
4854bff31b
commit
67168b8063
@ -197,8 +197,42 @@ void GPXParser::track(TrackData &track)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GPXParser::area(Area &area)
|
||||||
|
{
|
||||||
|
area.append(Polygon());
|
||||||
|
area.last().append(QVector<Coordinates>());
|
||||||
|
QVector<Coordinates> &points = area.last().last();
|
||||||
|
|
||||||
|
while (_reader.readNextStartElement()) {
|
||||||
|
if (_reader.name() == QLatin1String("point")) {
|
||||||
|
Coordinates c(coordinates());
|
||||||
|
_reader.readElementText();
|
||||||
|
if (c.isValid())
|
||||||
|
points.append(c);
|
||||||
|
else
|
||||||
|
return;
|
||||||
|
} else if (_reader.name() == QLatin1String("name"))
|
||||||
|
area.setName(_reader.readElementText());
|
||||||
|
else if (_reader.name() == QLatin1String("desc"))
|
||||||
|
area.setDescription(_reader.readElementText());
|
||||||
|
else
|
||||||
|
_reader.skipCurrentElement();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GPXParser::gpxExtensions(QList<Area> &areas)
|
||||||
|
{
|
||||||
|
while (_reader.readNextStartElement()) {
|
||||||
|
if (_reader.name() == QLatin1String("area")) {
|
||||||
|
areas.append(Area());
|
||||||
|
area(areas.last());
|
||||||
|
} else
|
||||||
|
_reader.skipCurrentElement();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void GPXParser::gpx(QList<TrackData> &tracks, QList<RouteData> &routes,
|
void GPXParser::gpx(QList<TrackData> &tracks, QList<RouteData> &routes,
|
||||||
QVector<Waypoint> &waypoints)
|
QList<Area> &areas, QVector<Waypoint> &waypoints)
|
||||||
{
|
{
|
||||||
while (_reader.readNextStartElement()) {
|
while (_reader.readNextStartElement()) {
|
||||||
if (_reader.name() == QLatin1String("trk")) {
|
if (_reader.name() == QLatin1String("trk")) {
|
||||||
@ -210,24 +244,23 @@ void GPXParser::gpx(QList<TrackData> &tracks, QList<RouteData> &routes,
|
|||||||
} else if (_reader.name() == QLatin1String("wpt")) {
|
} else if (_reader.name() == QLatin1String("wpt")) {
|
||||||
waypoints.append(Waypoint(coordinates()));
|
waypoints.append(Waypoint(coordinates()));
|
||||||
waypointData(waypoints.last());
|
waypointData(waypoints.last());
|
||||||
} else
|
} else if (_reader.name() == QLatin1String("extensions"))
|
||||||
|
gpxExtensions(areas);
|
||||||
|
else
|
||||||
_reader.skipCurrentElement();
|
_reader.skipCurrentElement();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GPXParser::parse(QFile *file, QList<TrackData> &tracks,
|
bool GPXParser::parse(QFile *file, QList<TrackData> &tracks,
|
||||||
QList<RouteData> &routes, QList<Area> &polygons,
|
QList<RouteData> &routes, QList<Area> &areas, QVector<Waypoint> &waypoints)
|
||||||
QVector<Waypoint> &waypoints)
|
|
||||||
{
|
{
|
||||||
Q_UNUSED(polygons);
|
|
||||||
|
|
||||||
_reader.clear();
|
_reader.clear();
|
||||||
_reader.setDevice(file);
|
_reader.setDevice(file);
|
||||||
_reader.setNamespaceProcessing(false);
|
_reader.setNamespaceProcessing(false);
|
||||||
|
|
||||||
if (_reader.readNextStartElement()) {
|
if (_reader.readNextStartElement()) {
|
||||||
if (_reader.name() == QLatin1String("gpx"))
|
if (_reader.name() == QLatin1String("gpx"))
|
||||||
gpx(tracks, routes, waypoints);
|
gpx(tracks, routes, areas, waypoints);
|
||||||
else
|
else
|
||||||
_reader.raiseError("Not a GPX file");
|
_reader.raiseError("Not a GPX file");
|
||||||
}
|
}
|
||||||
|
@ -9,13 +9,13 @@ class GPXParser : public Parser
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bool parse(QFile *file, QList<TrackData> &tracks, QList<RouteData> &routes,
|
bool parse(QFile *file, QList<TrackData> &tracks, QList<RouteData> &routes,
|
||||||
QList<Area> &polygons, QVector<Waypoint> &waypoints);
|
QList<Area> &areas, QVector<Waypoint> &waypoints);
|
||||||
QString errorString() const {return _reader.errorString();}
|
QString errorString() const {return _reader.errorString();}
|
||||||
int errorLine() const {return _reader.lineNumber();}
|
int errorLine() const {return _reader.lineNumber();}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void gpx(QList<TrackData> &tracks, QList<RouteData> &routes,
|
void gpx(QList<TrackData> &tracks, QList<RouteData> &routes,
|
||||||
QVector<Waypoint> &waypoints);
|
QList<Area> &areas, QVector<Waypoint> &waypoints);
|
||||||
void track(TrackData &track);
|
void track(TrackData &track);
|
||||||
void trackpoints(TrackData &track);
|
void trackpoints(TrackData &track);
|
||||||
void routepoints(RouteData &route, QList<TrackData> &tracks);
|
void routepoints(RouteData &route, QList<TrackData> &tracks);
|
||||||
@ -23,6 +23,8 @@ private:
|
|||||||
void tpExtension(Trackpoint &trackpoint);
|
void tpExtension(Trackpoint &trackpoint);
|
||||||
void trkptExtensions(Trackpoint &trackpoint);
|
void trkptExtensions(Trackpoint &trackpoint);
|
||||||
void rteptExtensions(TrackData *autoRoute);
|
void rteptExtensions(TrackData *autoRoute);
|
||||||
|
void area(Area &area);
|
||||||
|
void gpxExtensions(QList<Area> &areas);
|
||||||
void trackpointData(Trackpoint &trackpoint);
|
void trackpointData(Trackpoint &trackpoint);
|
||||||
void waypointData(Waypoint &waypoint, TrackData *autoRoute = 0);
|
void waypointData(Waypoint &waypoint, TrackData *autoRoute = 0);
|
||||||
qreal number();
|
qreal number();
|
||||||
|
Loading…
Reference in New Issue
Block a user