This plugin has, as input, the GPX file with the track you’ve made and as output it shows the map of the track and an interactive altitude graph (where available).

Fully configurable:

  • Custom colors
  • Custom icons
  • Multiple language support

Supported charts:

  • Altitude
  • Speed
  • Heart rate
  • Temperature
  • Cadence
  • Grade

NextGen Gallery Integration:

Display your NextGen Gallery images inside the map!
Even if you don’t have a GPS camera, this plugin can retrive the image position starting from the image date and your GPX file.

Post Attachments Integration:

This version is extended by: Stephan Klein and supports displaying all images attached to a post without using NGG.

Try this plugin: https://devfarm.it/wp-gpx-maps-demo/


If you need help, please use: www.devfarm.it Support Forum

Would you like to help fix bugs or further develop the plugin? On Github you can contribuite easly with your code.


Translators are welcome to contribute to the plugin. Please use the WordPress translation website.

The language files in the plugin contain 18 translatable texts for 13 languages:

  • Catalan ca
  • Dutch nl_NL
  • English (default)
  • French fr_FR
  • Hungarian hu_HU
  • Italian it_IT
  • Norwegian nb_NO
  • Polish pl_PL
  • Portuguese (Brazilian) pt_BR
  • Russian ru_RU
  • Spanish es_ES
  • Swedish sv_SE
  • Turkish tr_TR
  • Bulgarian bg_BG
  • Slovak cs_CZ
  • Norwegian nb_NO
  • Japanese ja_JP

(Many thanks to all guys who helped me with the translations)

Supported GPX namespaces are:

  1. http://www.topografix.com/GPX/1/0

  2. www.topografix.com/GPX/1/1

  3. http://www.garmin.com/xmlschemas/GpxExtensions/v3

  4. http://www.garmin.com/xmlschemas/TrackPointExtension/v1

Thanks to: www.securcube.net, www.devfarm.it

Icons made by Freepik from www.flaticon.com is licensed by Creative Commons BY 3.0


  • Simple GPX
  • GPX with waypoints
  • Admin area – List of tracks
  • Admin area – Settings
  • Altitude & Speed
  • Altitude & Speed & Heart rate


  1. Use the classic wordpress plugin installer or copy the plugins folder to the /wp-content/plugins/ directory

  2. Activate the plugin through the ‘Plugins’ menu in WordPress

  3. Add the shortcode [sgpx gpx=”>relative path to your gpx<“] or [sgpx gpx=”>http://somesite.com/files/yourfile.gpx<“]


Which map types are available?

You can use the following map types:

  1. OSM1 = Open Street Map (Default setting)
  2. OSM2 = Open Cycle Map / Thunderforest – Open Cycle Map (API Key required)
  3. OSM3 = Thunderforest – Outdoors (API Key required)
  4. OSM4 = Thunderforest – Transport (API Key required)
  5. OSM5 = Thunderforest – Landscape (API Key required)
  6. OSM7 = Open Street Map – Humanitarian map style
  7. OSM9 = Hike & Bike
  8. OSM10 = Open Sea Map

If you use the OpenCycleMap without the API key, a watermark appears on the card: “API Key required”.

The Thunderforest maps Outdoors, Transport and Landscape are only displayed with an API Key.

Which shortcode attributes are available?

You can use the following shortcodes:

  1. gpx: Relative path to the GPX file
  2. width: Map width (Value in percent)
  3. mheight: Map height (Value in pixeln)
  4. gheight: Graph height (Value in pixeln)
  5. skipcache: Do not use cache. If TRUE might be very slow (Default is false)
  6. download: Allow users to download your GPX file (Default is false)
  7. summary: Print summary details of your GPX track (Default is false)
  8. summarytotlen: Print total distance in summary table (Default is false)
  9. summarymaxele: Print max elevation in summary table (Default is false)
  10. summaryminele: Print min Elevation in summary table (Default is false)
  11. summaryeleup: Print total climbing in summary table (Default is false)
  12. summaryeledown: Print total descent in summary table (Default is false)
  13. summaryavgspeed: Print average Speed in summary table (Default is false)
  14. summarytotaltime: Print total time in summary table (Default is false)
  15. mtype: Map types
  16. mlinecolor: Map line color (Default is #3366cc)
  17. zoomonscrollwheel: Zoom on map when mouse scroll wheel (Default is false)
  18. waypoints: Print the gpx waypoints inside the map (Default is false)
  19. startIcon: Start track icon
  20. endIcon: End track icon
  21. currentIcon: Current position icon (when mouse hover)
  22. waypointicon: Custom waypoint icon
  23. showele: Show elevation data inside the chart (Default is true)
  24. uom: Distance/altitude unit of measure
  25. 0 = meters/meters (Default setting)
  26. 1 = feet/miles
  27. 2 = meters/kilometers
  28. 3 = meters/nautical miles
  29. 4 = meters/miles
  30. 5 = feet/nautical miles
  31. glinecolor: Altitude line color (Default is #3366cc)
  32. chartFrom1: Minimun value for altitude chart
  33. chartTo1: Maxumin value for altitude chart
  34. showspeed: Show speed inside the chart (Default is false)
  35. glinecolorspeed: Speed line color (Default is #ff0000)
  36. uomspeed: Unit of measure for speed
  37. 0 = m/s (Default setting)
  38. 1 = km/h
  39. 2 = miles/h
  40. 3 = min/km
  41. 4 = min/miles
  42. 5 = Nautical Miles/Hour (Knots)
  43. 6 = min/100 meters
  44. chartFrom2: Minimun value for speed chart
  45. chartTo2: Maxumin value for speed chart
  46. showhr: Show heart rate inside the chart (Default is false)
  47. glinecolorhr: Heart rate line color (Default is #ff77bd)
  48. showatemp: Show temperature inside the chart (Default is false)
  49. glinecoloratemp: Temperature line color (Default is #ff77bd)
  50. showcad: Show cadence inside the chart (Default is false)
  51. glinecolorcad: Cadence line color (Default is #beecff)
  52. showgrade: Show grade inside the chart (Default is false)
  53. glinecolorgrade: Grade line color (Default is #beecff)
  54. nggalleries: NextGen Gallery id or a list of Galleries id separated by a comma
  55. ngimages: NextGen Image id or a list of Images id separated by a comma
  56. attachments: Show all images that are attached to post (Default is false)
  57. dtoffset: The difference (in seconds) between your gpx tool date and your camera date
  58. pointsoffset: Skip points closer than XX meters (Default is 10)
  59. donotreducegpx: Print all the point without reduce it (Default is false)

What happening if I’ve a very large GPX files?

This plugin will print a small amout of points to speedup javascript and pageload.

Is it free?



April 15, 2024
Great plugin but please – test better – you should test with tracks that do not have time/date/elevation per point. Please update wp-gpx-maps-utils.php (lines 379 – 383): $points->maxEle = (count($_ele) > 0 ? max( $_ele ) : 0); $points->minEle = (count($_ele) > 0 ? min( $_ele ) : 0); $points->totalLength = max( $_dist ); $points->maxTime = (count($_time) > 0 ? max( $_time ) : 0); $points->minTime = (count($_time) > 0 ? min( $_time ) : 0); If tracks do not contains times(speed) or elevation the code breaks


March 28, 2024
Ich nutze Sie auf meinem Alpencross Block und bin total begeistert!
August 3, 2022
This plugin is easy to use. After cycling I download the gpx cycle route from my bike nav device and then upload to my cycle route site Zozibike.com. to display the route. developer keeps up with updates and have always been stable. Update: it now does not work and its been 3 weeks and no updates does not work with PHP8
February 25, 2022
Excellent, c’est ce qui me fallait pour afficher les parcours club du “Quimper Cyclo Club”. Merci
Read all 56 reviews

Contributors & Developers

“WP GPX Maps” is open source software. The following people have contributed to this plugin.


“WP GPX Maps” has been translated into 2 locales. Thank you to the translators for their contributions.

Translate “WP GPX Maps” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.



  • Security fix


  • Update settings variables echo


  • Fix vulnerability


  • Fix NextGen warnings


  • Fix php8+ errors


  • fix download file link
  • fix error with images exif parsing


  • fix admin error


  • General: Removed Maptoolkit (code OSM6) map provider. Requested by H.F. (Maptoolkit Managing director)
  • General: Added new map type “Thunderforest – Outddors” (OSM3)
  • Admin: Added admin notices in the dashboard
  • Settings Tab: In the map selection changed to the correct maps provider from “Open Cycle Map”* Settings Tab: to “Thunderforest”
  • Administration Tab: New Tab with the settings “Editor & Author upload” and “Show update notice”
  • Help Tab: In the map selection changed to the correct maps provider from “Open Cycle Map” to “Thunderforest”
  • Output: In the map selection changed to the correct maps provider from “Open Cycle Map” to “Thunderforest”
  • Output: Fixed in map footer for each map, the corresponding map provider is displayed with URL
  • Code: Added PHP version notices, WordPress 5.3 requires PHP 5.6.20
  • Code: Added Missing entries for add and delete options
  • Code: Style for output moved in a seperate CSS file
  • Code: Adjustments a la WPCS
  • Code: Small CSS design optimizations for the tabs
  • Code: Upgrade bootstrap-table to 1.13.2
  • Code: Removed german language file (now over translate.wordpress.org)


  • Added: Authors can upload GPX tracks in a folder called as your user name, inside [../wp-upload dir/gpx/[your user name] (thanks to wildcomputations)
  • Added: Authors an Admins can see the current values for shortcodes in help tab
  • Added: Button to instant copy the shortcode of the selected GPX file in the tab track
  • Added: different size logos for the plugin store (icon.svg, icon128x128.png and icon256x256.png) [inside ../plugins/wp-gpx-maps/assets]
  • Changed: Settings tab is for non-Admin users is not more visible
  • Tweak: Help tab is easier to read
  • Tweak: Plugin is now complete translatable (Backend + Frontend)
  • Tweak: WordPress coding standards
  • Upgrade: Leaflet to 1.5.1
  • Upgrade: leaflet.fullscreen to 1.4.5
  • Upgrade: Chart.min.js to 2.8.0


  • resolve admin error


  • Added average values under the graph (thanks to cyclinggeorgian)


  • NGG gallery is working
  • Getting HR, Cad and Temp working again (thanks to cyclinggeorgian)
  • Fix javascript errors
  • Fix multiple traks gpx


  • Fix syntax error causing graph not to display (thanks to nickstabler)


  • Resolved errors with start and end icons


  • Removed Gogole maps. Leafletjs instead.
  • — NextGen Gallery is not working, due next gen image format changed — I’ll fix soon


  • renamed javascript functions to avoid collision with other plugins
  • reduced chart line thickness


  • fix uom
  • fix file not found


  • fix random error


  • Security improvements


  • Improved security
  • Included javascript
  • Multiple file upload
  • Implemented sorting in file list
  • Renamed internal function to improve wp compatibility


  • replaced highcharts with chartjs. This is a forced choice due highcharts license issue, view: https://devfarm.it/wordpress-plugin/wordpress-plugin-directory-notice-wp-gpx-maps-temporarily-disabled/


  • Added Norwegian nb_NO translation (thanks to thordivel)
  • Added Japanese ja_JP translation (thanks to dentos)


  • Switched to HTTPS where possible (thanks to delitestudio)


  • Added Thunderforest Api Key on settings: for OpenCycleMap


  • Added google maps api key on settings
  • Removed parameter ‘sensor’ on google maps js
  • Added unit of measure of speed for swimmers: min/100 meters


  • Fix incompatibility with Debian PHP7 (thanks to phbaer) https://github.com/devfarm-it/wp-gpx-maps/pull/5


  • Improved german translations (thanks to Konrad) http://tadesse.de/7882/2015-wanderung-ostrov-tisa-ii/


  • Retrieve waypoints in JSON, possibility to add a custom marker (Changed by Michel Selerin)


  • Improved Google Maps visualization


  • NextGen Gallery’s Attachment support. Thanks to Stephan Klein (https://klein-gedruckt.de/2015/03/wordpress-plugin-wp-gpx-maps/)


  • Fix: remote file download issue
  • Fix: download file link with WPML
  • Improved cache with filetime (thanks to David)


  • Fix: Garmin cadence again
  • Fix: WP Tabs


  • Fix: Garmin cadence
  • Infowindows closing on mouseout


  • Add feet/Nautical Miles units (thanks to elperepat)
  • Update OpenStreetMaps Credits
  • WP Tabs fix


  • fix: left axis not visible (downgrade highcharts to v3.0.10)
  • fix: fullscreen map js error


  • fix: http/https javascript registration
  • fix: full screen map css issue


  • Speed improvement
  • Rewritten js classes
  • Added Temperature chart
  • Added HTML5 Gps position (you can now follow the gpx with your mobile phone/tablet/pc)


  • Speed improvement


  • Added Catalan translation, thanks to Edgar
  • Updated Spanish translation, thanks to Dani
  • Added different types of distance: Normal, Flat (don’t consider altitude) and Climb distance


  • Added Bulgarian translation, thanks to Svilen Savov
  • Added possibility to hide the elevation chart


  • Smaller map type selector
  • Fix: Google maps exception for NextGen Gallery


  • Fix: NextGen Gallery 1.9 compatibility


  • NextGen Gallery 2 support
  • NextGen Gallery Pro support


  • Added meters/miles chart unit of measure
  • Added Russian translation, thanks to G.A.P


  • Added nautical miles as distance (Many thanks to Anders)


  • Added Chart zoom feature
  • Some small bug fixes


  • Added Portuguese (Brazilian) translation, thanks to André Ramos
  • new map: Open Cycle Map – Transport
  • new map: Open Cycle Map – Landscape


  • qTranslate compatible


  • Added Polish translation, thanks to Sebastian
  • Fix: Spanish translation
  • Minor javascript improvement


  • Improved italian translation
  • Added grade chart (beta)


  • Added French translation, thanks to Hervé
  • Added Nautical Miles per Hour (Knots) unit of measure


  • Fix: garmin gpx cadence and heart rate
  • Updated Turkish translation, thanks to Edip
  • Added Hungarian translation, thanks to Tami


  • Even Editor and Author users can upload their own gpx. Administrators can see all the administrators gpx. The other users can see only their uploads


  • Fix: In the post list, sometime, the maps was not displaying correctly ( the php rand() function was not working?? )
  • Various improvements for multi track gpx. Thanks to GPSracks.tv
  • Summary table is now avaiable even without chart. Thanks to David


  • 2 decimals for unit of measure min/km and min/mi
  • translation file updated (a couple of phrases added)
  • File list reverse order (from the newer to the older)
  • nggallery integration: division by zero fixed


  • Decimals reducted to 1 for unit of measure min/km and min/mi
  • map zoom and center position is working with waypoints only files
  • automatic scale works again (thanks to MArkus)


  • You can exclude cache (slower and not recommended)
  • You can decide what show in the summary table
  • German translation (thanks to Ali)


  • Fixed fullscreen map image slideshow


  • Multi track gpx support
  • Next Gen Gallery images positions derived from date. You can adjust the date with the shortcode attribute dtoffset
  • If you set Chart Height (shortcode gheight) = 0 means hide the graph
  • Fix: All images should work, independent from browser cache


  • Decimal separator is working with all the browsers
  • minutes per mile and minutes per kilometer was wrong


  • Decimal and thousand separator derived from browser language
  • Added summary table (see settings): Total distance, Max elevation, Min elevation, Total climbing, Total descent, Average speed
  • Added 2 speed units of measure: minutes per mile and minutes per kilometer


  • Multilanguage implementation (only front-end). I’ve implemented the italian one, I hope somebody will help me with other languages..
  • Map Full screen mode (I’m sure it’s not working in ie6. don’t even ask!)
  • Added waypoint custom icon


  • Added possibility to download your gpx


  • Security fix, please update!


  • enable map zoom on scroll wheel (check settings)
  • test attributes in get params


  • google maps images fixed (templates with bad css)
  • upgrade to google maps 3.9



  • include jQuery if needed


  • Remove zero values from cadence and heart rate charts
  • nextgen gallery improvement


  • Cadence chart (where available)
  • minor bug fixes


  • migration from google chart to highcharts. Highcharts are much better than google chart! This is the base for a new serie of improvements. Stay in touch for the next releases!
  • heart rate chart (where available)


  • added css to avoid map bars display issue


  • added new types of maps: Open Street Map, Open Cycle Map, Hike & Bike.
  • fixed nextgen gallery caching problem


  • nextgen gallery display bug fixes