.. _gpx:

*****************************************************************************
 GPS Exchange Format (GPX)
*****************************************************************************

GPX (the GPS Exchange Format) is a light-weight XML data format containing 
GPS data (waypoints, routes, and tracks).  For more information see the 
official `GPX site`_.

.. _`GPX site`: http://www.topografix.com/gpx.asp 

File listing
------------

All waypoints, routes, and tracks are stored in a single .gpx file.

Data Access / Connection Method
-------------------------------

* GPX access is available through OGR. See the OGR `driver page`_
  for specific driver information.  
* A relative path to the .gpx file can be used in the mapfile LAYER's 
  CONNECTION string.  
* The feature type is specified in the DATA parameter
    * the "tracks" feature type will usually be the track line
    * the "track_points" feature type will usually be the points that make up
      the track line
    
.. _`driver page`: http://www.gdal.org/ogr/drv_gpx.html 


OGRINFO Examples
----------------

First you should make sure that your GDAL/OGR build contains the 
"GPX" driver, by using the '--formats' command:

::

  >ogrinfo --formats
     Loaded OGR Format Drivers:
     ...
     -> "CSV" (read/write)
     -> "GML" (read/write)
     -> "GPX" (read/write)
     -> "KML" (read/write)
     ...

If you don't have the driver, you might want to try the `FWTools`_ or `MS4W`_
packages, which include the driver.

.. _`FWTools`: http://fwtools.maptools.org/
.. _`MS4W`: http://www.ms4w.com

Once you have the GPX driver you are ready to try an ogrinfo command on your
file to get a list of feature types:

::

  >ogrinfo test.gpx
     INFO: Open of `test.gpx'
           using driver `GPX' successful.
     1: waypoints (Point)
     2: routes (Line String)
     3: tracks (Multi Line String)
     4: route_points (Point)
     5: track_points (Point)

Now use ogrinfo to get information on one of the feature types:

::

  >ogrinfo test.gpx track_points -summary
     INFO: Open of `test.gpx'
           using driver `GPX' successful.
     
     Layer name: track_points
     Geometry: Point
     Feature Count: 661
     Extent: (-66.694270, 47.985570) - (-66.675222, 47.990791)
     Layer SRS WKT:
     GEOGCS["WGS 84",
         DATUM["WGS_1984",
             SPHEROID["WGS 84",6378137,298.257223563,
                 AUTHORITY["EPSG","7030"]],
             AUTHORITY["EPSG","6326"]],
         PRIMEM["Greenwich",0,
             AUTHORITY["EPSG","8901"]],
         UNIT["degree",0.01745329251994328,
             AUTHORITY["EPSG","9122"]],
         AUTHORITY["EPSG","4326"]]
     track_fid: Integer (0.0)
     track_seg_id: Integer (0.0)
     track_seg_point_id: Integer (0.0)
     ele: Real (0.0)
     time: DateTime (0.0)
     magvar: Real (0.0)
     geoidheight: Real (0.0)
     name: String (0.0)
     cmt: String (0.0)
     desc: String (0.0)
     src: String (0.0)
     ...

Mapfile Example
---------------

Since you have confirmed that OGR can read your GPX file, now you can
create a MapServer layer:

::

     LAYER
       NAME gpx
       TYPE POINT
       STATUS ON
       CONNECTIONTYPE OGR
       CONNECTION test.gpx
       DATA "track_points"
       CLASS
         NAME "gpx"
         STYLE
           SYMBOL 'circle'  
           COLOR 0 119 255  
           SIZE 2
         END
       END
     END # layer