last point of route (destination) has to be a ShapingPoint
there is a maximum of ViaPoints per route (BMW Navigator: 31) - if there are more ViaPoints, the route will be split in 2 or more routes during import
there is a maximum of consecutive ShapingPoints (Manual BMW Navigator: 50) - I do not know, what happens, if there are more, I did some tests, sometimes it works, sometimes you get an error during import, and I also generated Navigator 5 crashs of using “maximum routes” with 31 Viapoints and 1500 ShapingPoints - but that was just when trying to find the limit, during “real life” it is no problem
in a route with inly 2 ViaPoints (start/destination) it seems to be allowed to have more than 50 ShapingPoints
the kind of route points (Via / Shaping) is defined by extensions
as far as I have seen, all ViaPoints in a route have the same calculation mode (in BMW Nav5 you can set the calculation mode of a route, but not of a single segment / ViaPoint )
there are 4 calculation modes: FasterTime, CurvyRoads, Direct, ShorterDistance
2 years ago I could use the links in the Garmin GPX to see the rules - but now I just get 404-errors
as far as I can see, there is no limitation for number of ShapingPoints, if just 1st and last point are ViaPoints …
at least TomTom Rider 550 just seem to ignore these (Gramin specific) extensions
In the Kurviger APP you can export “Garmin ShapingPoint GPX (*.gpx)” - I think, that alogrithm is a good base. There are only 2 ViaPoints in, the rest are ShapingPoints (goal was to prevent route split during import to Garmin device) - next improvement step might be something like “Make all kurviger waypoints to ViaPoints” …
Handling Garmin specific extensions in GPX import to differ ViaPoints from ShapingPoints might be a benefit also for users who do not use any Garmin device, because a lot of GPX you can download in the web use that format.
Furthermore other applications use those Garmin extensions to differ ViaPoints from ShapingPoints (eg. Motoroute, MyRouteApp ).
On the other hand some applications use a type tag (eg. Kurviger app ), or waypoint symbols to differ Via- from ShapingPoints.
Probably it is not useful to implement several import strategies depending on GPX creator, but from my point of view following priorities (1 = highest, 3 = lowest) could be an generic approach:
Start and destination are ViaPoints (of course)
if Garmin extensions are in GPX, use them
if type definitions are in waypoints (like in Kurviger App export), use them
if symbols are defined for waypoints, use them
I’am not sure, if it is necessary to implement such a detection in both Versions (web + app), at least if a user has both subscriptions it would be possible to do the import in web - but on a mobile phone it might be much more comfortable to use the app directly.