From wikipedia and OpenStreetMap wikis, it seems to have 2 widely used
GPS file format non-proprietary:
(orignally google earth format, now international standard)
After investigation, it appears that KML is more used for describing
maps and GPX is more used for describing traces.
GPX seems to be supported by a big bunch of software, including
OpenStreetMaps, GPSbabel (cross-plateform tool) and a lot professional
apps like GRASS GIS (using itself gpsbabel)
So I propose to use GPX as in seems to be a de-facto standard.
GPX - format
GPX is a simple format to put down what our GPS received, or to store
info on routes that could by used by a navigation tool to navigate us.
The format can be extend at almost any XML field, so along co-ordinates
from the GPS we could also store data coming from other sensors (e.g.
GPX consists of two main parts:
a) GPX tracks (where I've been)
<code class="xml"><gpx> <trk> <name>My track #1</name> <trkseg> <trkpt lat="47.644548" lon="-122.326897"> <!-- where I've been --> <ele>400.54</ele> <!-- additional info on elevation --> <time>2014-06-27T18:37:26Z</time> <!-- additional info on time --> </trkpt> <trkpt lat="47.648898" lon="-122.327534"> <!-- where I've been later --> <ele>405.88</ele> <!-- additional info on elevation --> <time>2014-06-27T18:39:26Z</time> <!-- additional info on time --> </trkpt> </trkseg> </trk></gpx></code>
To consider when implementing:
- remove unnecessary (duplicating) points.
b) GPX routes (route me there)
<code class="xml"><gpx> <rte> <name>To visit my grandma</name> <src>Google Maps</src> <type>bike route</type> <rtept lat="47.644548" lon="-122.326897"> <!-- Where to go next --> <name>Crossing of routes X and Y</name> <!-- Some additional info e.g. street name --> </rtept> <rtept lat="47.644548" lon="-122.346897"> <!-- Where to go next --> <name>Crossing of routes X and Z</name> <!-- Some additional info e.g. street name --> </rtept> <rtept lat="47.674548" lon="-122.346897"> <!-- Where to go next --> <name>Destination point</name> <!-- Some additional info e.g. street name --> </rtept> </rte></gpx></code>
To consider when implementing:
- A route should be easily loadable from Google Maps.
- Use the following points to calculate direction where the user should
turn when they are following the route, so we could navigate them (tell
when and where they should turn).
- GPSBabel , a
cross-platform tool (GPL) used to convert from and to GPX file format
and to read/write to gps devices (manage several devices via usb,
including brands garmin and magelan)
- Garmin communicator plugin : an example of GPL soft communicating
with garmin devices and extract/transfer data from/to proprietary
format. It uses: tinyxml, garmintools, libusb, gcrypt, zlib
- GeBabbel : simple GUI for GPSbabel
- GPSman : display one's traces on
maps, create traces, save into gpx/kml format. Big disadvantage : it
doesn't contain any map, they have to be scanned or downloaded manually
- Viking : a GPL app.
Display traces on maps, edit traces, save into gpx/kml, get data from
devices and send traces to devices. The big advantage is integration
with servers (OpenStreetMap or others) and maps are so automatically
- PyTrainer : GPL soft for
sportive activities : manage, order and compare history. Integrated with
google maps. Display graphs on cardio, altitude, etc. Do statistics on
sports and weeks/months.
- GPSBook : GPL soft to display
traces on google maps, seems to be less advanced