How I used a MyRouteApp GPX with my Beeline moto II

May 28, 2025

In a hurry? Click here for a TLDR

While testing out my new Beeline Moto II motorbike navigation, I ran into some compatibility issues with my routes created with MyRouteApp. Namely, losing the turn-by-turn navigation while going off track. My short roadside frustration turned into a deep dive into GPX files and how to integrate the MyRouteApp format with my Beeline. Upon inspecting both files, I noticed a difference in the GPX file structure. Since a GPX is defined in XML, I decided to make a tool in vanilla JavaScript and XSL that will transform the file for me. And since there are other users with the same issue, I thought it would be nice to share my solution and make it available to anyone that can benefit from it. You can find the tool here

Intro

Triumph Bonneville T120One of my favourite ways to enjoy the French outdoors is by riding my motorbike. I make it a sport to create a twisty route with nice elevations and new viewpoints that preferably pass a couple of picnic spots along the way. My preferred method was creating a route in MyRouteApp and using my QuadLock mounted phone for navigation. And this worked quite well.

But, I wanted a more minimalistic device in my cockpit and I liked the idea of having my phone in my pocket instead of on my bike in case of an emergency. So after some "very deep research" on YouTube and Google, I naturally found (or was influenced towards...) the Beeline Moto II.

Fast forward to unboxing and using the Beeline. I was super hyped. I exported my GPX file from MyRouteApp and hit the road. And all went surprisingly well.

Problem

Beeline device without navigationUntil.... I hit into a familiar yellow French sign named déviation (a diversion)! As soon as I got off the track, my Beeline showed a white arrow further diving into a black abyss. No roads were visible, no directions, only a white arrow and a dotted line showing how far I was off the track.

What on earth? Why is my newest piece of navigation technology not navigating? So I stopped, grabbed my phone and opened the Beeline app. Skipping a waypoint wasn't an option because I only had 1 waypoint. Hmm... I opened my maps app and after memorizing some villages I got back on track and my turn by turn navigation was restored. Sweet!

On my way home my inner problem solver was already working. Did I export my file wrong? Did I forget to check a box on importing?

Soon I learned that other users had similar issues combining MyRouteApp and Beeline, and that their forum topics hit a dead end. They noted that their route seemed to be converted to a track, and only had a start- and end-point. I also learned that it was impossible to import a Beeline GPX in the MyRouteApp. I tried a couple of things on the MyRouteApp end without success. Then on the Beeline support page I found an article on importing and exporting a GPX with this note:

Please note: you can only edit GPX-imported routes within the Beeline app if you are using the "Waypoints only" import mode. You can learn more about that mode in the article listed above.
— Beeline support

Waypoints only import mode? I didn't see that option at all! But surely my GPX had waypoints? During the creation of my route I added 30 or so...

You might be thinking: Why aren't you using the Beeline app anyway? While the Beeline app comes with a route creation functionality, I find the feature set of MyRouteApp superior. I want to skip dirt roads, maximize twisty roads, maximize elevation, toggle different points of interest along the way like petrol stations etc.

Carrying on with my problem, I created a small test route in the Beeline app and exported a GPX file. Since the GPX file is actually a XML file, I shouldn't have any trouble figuring out what the differences are.

This is a snippet of the Beeline GPX export without the XML declaration and namespaces:

.....
<!-- The route waypoints -->
  <wpt lat="47.765573749816014" lon="4.5727777081385605"/>
  <wpt lat="47.76747611439015" lon="4.570651287011771"/>
  <wpt lat="47.84947693295322" lon="4.568749244689883"/>
  .....
  <!-- The route -->
  <rte>
    <rtept lat="47.76591" lon="4.57288"/>
    <rtept lat="47.76595" lon="4.5726"/>
    <rtept lat="47.76597" lon="4.57253"/>
    <rtept lat="47.766" lon="4.57248"/>
    <rtept lat="47.76614" lon="4.57222"/>
    .....

Alright, now let's have a look at the MyRouteApp GPX that I'm importing:

.....
<rte>
        <name>test</name>
        <rtept lat="47.767945375567" lon="4.5705699920654">
            <name>12 Route de la Jonction, 21400 Nod-sur-Seine, Frankrijk</name>
            <extensions>
                <trp:ViaPoint />
            </extensions>
        </rtept>
        ......
    </rte>
    <trk>
        <name>Track-test</name>
        <trkseg>
            <trkpt lon="4.570600" lat="47.767940" />
            <trkpt lon="4.570710" lat="47.768370" />
            <trkpt lon="4.570720" lat="47.768510" />
            <trkpt lon="4.570710" lat="47.768550" />
            <trkpt lon="4.570710" lat="47.768600" />
.....

A few things are going on here:

  • The Beeline GPX has waypoint <wpt> nodes while the MyRouteApp has not.
  • The MyRouteApp GPX provides more information in the route segment <rte>.
  • The MyRouteApp GPX has a track segment <trk>.
  • The Beeline GPX <rte> segment suspiciously looks a lot like the MyRouteApp <trkseg> because the coordinates are very close to each-other.

Both seem to have a different interpretation of the GPX 1.1 Schema Documentation. Looking at the definitions I note 3 things:

  • wptType wpt represents a waypoint, point of interest, or named feature on a map.
  • rteType rte represents route - an ordered list of waypoints representing a series of turn points leading to a destination.
  • trkType trk represents a track - an ordered list of points describing a path.

Given the definitions and examples above. I find that the Beeline app should be using the rteType instead of individual waypoints for a route. Because that is what it's designed for. Also, the trkType is meant for tracks and it seems Beeline is using rteType for that.

As a good user, I obviously raised a ticket with Beeline, providing as much details as possible. I was then gracefully thanked for my suggestions and informed that my feedback was forwarded up the chain. Great! But knowing that technical feedback like this often gets dismissed as subjective interpretation rather than standards compliance, I knew I had to work on a solution in the meantime.

Solution

Knowing the differences between the formats, the workaround was relatively straightforward: I only had to transform the MyRouteApp GPX to a Beeline GPX. To make my MyRouteApp GPX compatible with the Beeline app I decided to:

  • transform the MyRouteApp <rtept> nodes to <wpt> nodes.
  • transform the MyRouteApp <trkseg> to a <rte>.

My first test file was hacked together using some good old copy, paste search and replaces.

Et voila! Upon importing my newly created GPX I was greeted by another option: "Points de cheminement uniquem...". Which translates to the "Waypoints only import mode" mentioned by Beeline above. Phone screenshot P.S. Pardon my French, I set my phone to French as a part of my language learning process.

Sound great? There's just one caveat

This methods imports the waypoints added in the MyRouteApp but will re-calculate the route in between them. If you want the Beeline to calculate the same or near similar route, I advise you to take an extra 15 min to add waypoints on every main road change. My approach looked like this:

MRA screenshot

Automated solution

Obviously I wasn't planning on manually editing GPX files every time I wanted to use one of my routes. So I decided to make a tool that will transform the file for me. And since there are other users with the same issue, I thought it would be nice to share my solution and make it available to anyone that can benefit from it. The solution is simple:

  • A small webform takes a GPX file as input and let's the user download the transformed result.
  • The transformation is done by a script written in JavaScript that executes a XSLT (eXtensible Stylesheet Language Transformations). For those unfamiliar but curious: Check out this Introduction on XSLT.
  • This all runs within the users browser. Which means I only have to host the static files and don't need worry about running a service.

You can find the result here

Thats it!

My short road side frustration turned into a deep dive into GPX files and how to integrate the MyRouteApp format with my Beeline. While I hope that Beeline will eventually improve their compatibility, in the meantime my tool will provide a practical solution. If you're facing similar issues, give the tool a try and let me know how it works for your routes. Happy riding!