Some tools to render GPX encoded geo tracks to a SVG path.
The sample track (gpx/train-track.gpx) is generated by the iOS app Track (version 2.3) by 7SOLS.
The sample map (svg/italy-map.svg) is free licenced for non commercial use by https://www.amcharts.com/svg-maps/.
Sample SVG rendering from multiple trips in Umbria, Italy.
Reads SVG file as map and transform a new SVG file
The example file ('italy-map.svg') comes from https://www.amcharts.com/svg-maps/
If there is a path element with id="odgps-insert" it will replace this path with a new path generated from a GPX track.
The available tracks are defined in $doc-list as '' multiple files seperate by comma (sample: train-track.gpx)
The map has to be normalized. Set $lat-root to the coordinates of the top coordinates (svg position:y) and $lon-root to the very left coordinates (svg position:x)
Run:
java -jar <xslt2-processor> svg/italy-map.svg xslt/gpx-to-svg.xslt > out/out.svg
Run (with saxon):
java -jar saxon9.jar svg/italy-map.svg xslt/gpx-to-svg.xslt > out/out.svg
Read a track file via XmlHTTPRequest method, get all track points and build a pathString from @lat/@lon.
Run:
open italy-map-js.svg in your fav browser.
Make sure to enable XmlHTTPRequest for file:// protocoll, otherwise run the request from a local http-server.
gpx-to-svg.jl uses LightXML to parse both the GPX track file and the SVG.
Currently not many more track entries than 1k can be parsed. Any number significant higher kills the Julia-kernel with no explanations. The error could be in the browser-backend communication or in the LightXML.
Run:
copy the gpx-to-svg.jl into a jupyter notebook and make sure the gpx/1k.gpx file is available
The C implementation (c/gpx-to-svg.c) use libxml2 to read, parse and write both the SVG and the GPX files. The sample GPX (gpx/train-track.gpx) contains 7000+ track points. With under 0.2 sec on a MacBook (2,4GHz Core 2 Duo) it is of course the fastest solution.
Compile:
gcc -Wall -lxml2 -I /usr/include/libxml2 -o c/xpath c/xpath.c
Run:
c/xpath <SVG file> <GPX file>
The Swift implementation (swift/gpx-to-svg.swift) use Fuzi XML/XPath Framework (https://github.com/cezheng/Fuzi) to read, parse and write both the SVG and the GPX files. Even if this is a first draft it is fast as the C version. Mainly because both make heavily usage of libXML2.
Usage: create a new Project in XCode, replace the main.swift with the content of gpx-to-svg.swift, follow the instructions auf Fuzi and add the 1k.gpx to the project.