How to read motorroad=yes from map data

Hello, i am developing a custom scooter profile for germany. As some may know scooters are not allowed to drive on motorroads like trunk roads and highways in germany. Trunk roads are like highways for vehicles that drives faster than 80kmh. I excluded that already in my profile. But there seems to be a problem with primary roads which are tagged as motorroad. These have the same rules as highways, but according to OSM Wiki there are meant to be tagged as trunk road due to how they are build.

So I need a way to read the tag motorroad=yes but everytime i try to set it in my profile and in my config as encoded value get this error:

❯ ./Graphhopper.sh
2026-04-30 18:05:28.506 [main] INFO i.d.core.server.DefaultServerFactory - Registering jersey handler with root pat
h prefix: /
2026-04-30 18:05:28.507 [main] INFO i.d.core.server.DefaultServerFactory - Registering admin handler with root path
prefix: /
2026-04-30 18:05:28.678 [main] INFO io.dropwizard.assets.AssetsBundle - Registering AssetBundle with name: assets f
or path /maps/*
2026-04-30 18:05:28.679 [main] INFO io.dropwizard.assets.AssetsBundle - Registering AssetBundle with name: webjars
for path /webjars/*
2026-04-30 18:05:28.681 [main] INFO i.d.core.server.ServerFactory - Starting GraphHopperApplication
_ _
__ _ _ __ __ _ _ __ | |__ | |__ ___ _ __ _ __ ___ _ __
/ _` | '__/ _` | '_ \| '_ \| '_ \ / _ \| '_ \| '_ \ / _ \ '__|
| (_| | | | (_| | |_) | | | | | | | (_) | |_) | |_) | __/ |
\__, |_| \__,_| .__/|_| |_|_| |_|\___/| .__/| .__/ \___|_|
|___/ |_| |_| |_|
2026-04-30 18:05:28.724 [main] INFO o.e.jetty.setuid.SetUIDListener - Opened application@3bddc676{HTTP/1.1, (http/1
.1)}{0.0.0.0:8989}
2026-04-30 18:05:28.725 [main] INFO o.e.jetty.setuid.SetUIDListener - Opened admin@29a1505c{HTTP/1.1, (http/1.1)}{l
ocalhost:8990}
2026-04-30 18:05:28.726 [main] INFO org.eclipse.jetty.server.Server - jetty-11.0.26; built: 2025-08-14T18:03:14.457
Z; git: 7559873b6e46eea7c2c6da2b58327ea2ecf941f4; jvm 21.0.10+7
2026-04-30 18:05:28.733 [main] INFO com.graphhopper.GraphHopper - version 11.0|2025-10-14T14:28:00Z (9,24,7,5,2,9)
2026-04-30 18:05:28.763 [main] ERROR i.dropwizard.core.cli.ServerCommand - Unable to start server, shutting down
java.lang.IllegalArgumentException: Unknown encoded value: motorroad
at com.graphhopper.GraphHopper.prepareImport(GraphHopper.java:904)
at com.graphhopper.GraphHopper.process(GraphHopper.java:821)
at com.graphhopper.GraphHopper.importOrLoad(GraphHopper.java:796)
at com.graphhopper.http.GraphHopperManaged.start(GraphHopperManaged.java:44)
at io.dropwizard.lifecycle.JettyManaged.doStart(JettyManaged.java:27)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:171)
at org.eclipse.jetty.server.Server.start(Server.java:470)
at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:121)
at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:89)
at org.eclipse.jetty.server.Server.doStart(Server.java:415)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
at io.dropwizard.core.cli.ServerCommand.run(ServerCommand.java:52)
at io.dropwizard.core.cli.EnvironmentCommand.run(EnvironmentCommand.java:67)
at io.dropwizard.core.cli.ConfiguredCommand.run(ConfiguredCommand.java:98)
at io.dropwizard.core.cli.Cli.run(Cli.java:78)
at io.dropwizard.core.Application.run(Application.java:94)
at com.graphhopper.application.GraphHopperApplication.main(GraphHopperApplication.java:37)
2026-04-30 18:05:28.764 [main] INFO org.eclipse.jetty.server.Server - Stopped Server@26c47874{STOPPING}[11.0.26,sto
=30000]
2026-04-30 18:05:28.764 [main] INFO org.eclipse.jetty.server.Server - Shutdown Server@26c47874{STOPPING}[11.0.26,st
o=30000]
2026-04-30 18:05:28.766 [main] WARN i.dropwizard.core.cli.ServerCommand - Failure during stop server
java.util.concurrent.ExecutionException: java.lang.IllegalStateException: STOPPED
at java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:396)
at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2096)
at org.eclipse.jetty.server.Server.doStop(Server.java:490)
at org.eclipse.jetty.util.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:132)
at io.dropwizard.core.cli.ServerCommand.run(ServerCommand.java:63)
at io.dropwizard.core.cli.EnvironmentCommand.run(EnvironmentCommand.java:67)
at io.dropwizard.core.cli.ConfiguredCommand.run(ConfiguredCommand.java:98)
at io.dropwizard.core.cli.Cli.run(Cli.java:78)
at io.dropwizard.core.Application.run(Application.java:94)
at com.graphhopper.application.GraphHopperApplication.main(GraphHopperApplication.java:37)
Caused by: java.lang.IllegalStateException: STOPPED
at org.eclipse.jetty.server.handler.ContextHandler.shutdown(ContextHandler.java:774)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575)
at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616)
at org.eclipse.jetty.util.component.Graceful.shutdown(Graceful.java:146)
... 8 common frames omitted
java.lang.IllegalArgumentException: Unknown encoded value: motor_road
at com.graphhopper.GraphHopper.prepareImport(GraphHopper.java:904)
at com.graphhopper.GraphHopper.process(GraphHopper.java:821)
at com.graphhopper.GraphHopper.importOrLoad(GraphHopper.java:796)
at com.graphhopper.http.GraphHopperManaged.start(GraphHopperManaged.java:44)
at io.dropwizard.lifecycle.JettyManaged.doStart(JettyManaged.java:27)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:171)
at org.eclipse.jetty.server.Server.start(Server.java:470)
at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:121)
at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:89)
at org.eclipse.jetty.server.Server.doStart(Server.java:415)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
at io.dropwizard.core.cli.ServerCommand.run(ServerCommand.java:52)
at io.dropwizard.core.cli.EnvironmentCommand.run(EnvironmentCommand.java:67)
at io.dropwizard.core.cli.ConfiguredCommand.run(ConfiguredCommand.java:98)
at io.dropwizard.core.cli.Cli.run(Cli.java:78)
at io.dropwizard.core.Application.run(Application.java:94)
at com.graphhopper.application.GraphHopperApplication.main(GraphHopperApplication.java:37)

It would be nice if someone could help me out

I don’t think motor_road is a valid encoded value. I am not sure how graphhopper handles the motor_road tag, or indeed if it handles it at all. You should check the source code on github (I can look it up later today also).

Graphopper does not handle all the different tags that OSM has, and GH also makes its own mapping from the tags to encoded values and how they are handled in routing.

One encoded value that GH makes available is road_class. I would assume, but I am likely incorrect, that the motor_road tag would somehow be represented in the road_class encoded value. But to be sure, one would need to look at the code, the parser classes, to be exact.

I looked into GH source code. As far as I can tell and understand, the “motorroad” OSM tag is considered rather problematic. It is currently only used to set bike and foot access to “no” on those roads. It also seems to affect default speeds. But GH does not provide it as an encoded value and therefore you can not use it to define custom profiles.

There are earlier discussions related to this. See for example Set road_class=motorway when motorroad=yes by easbar · Pull Request #2329 · graphhopper/graphhopper, which is very interesting. There also someone suggested that it should be an encoded value, but apparently that did not raise much interest in the maintainers. They were interested in hearing about real-world applications where it would be beneficial to know whether a road is tagged “motorroad”. It also seems to be a very country-specific thing (like in your case, in Germany, it seems to make a difference). Also similar discussion: Add Motorroad RoadClass by otbutz · Pull Request #1833 · graphhopper/graphhopper.