8000 replace car4wd with roads and a custom_model by karussell · Pull Request #2651 · graphhopper/graphhopper · GitHub
[go: up one dir, main page]

Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

replace car4wd with roads and a custom_model #2651

Merged
merged 1 commit into from
Aug 30, 2022
Merged

Conversation

karussell
Copy link
Member
@karussell karussell commented Aug 23, 2022

The car4wd vehicle is no longer necessary and we can recreate it using the roads vehicle and the custom_model shown in
web/src/test/resources/com/graphhopper/application/resources/car4wd.yml

If we replace a different vehicle (like bike2, wheelchair or hike) we should include the custom_model used for the replacement in a test, but IMO this is not necessary here.

It's a bit sad that my nicely drawn icon image is disappearing ;)

@karussell karussell added this to the 6.0 milestone Aug 23, 2022
Comment on lines +1 to +10
# use this custom model with vehicle: roads
distance_influence: 1
speed:
- if: "track_type == GRADE4 || track_type == GRADE5"
limit_to: 5
- else: ""
limit_to: "car_average_speed"
priority:
- if: "track_type != GRADE4 && track_type != GRADE5 && car_access == false"
multiply_by: "0"
Copy link
Member Author
@karussell karussell Aug 23, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Exclude all edges like car does, but do not exclude certain track types. And for these track types a speed of 5km/h should be used otherwise the same speed as car.

@karussell karussell merged commit 3b22d49 into master Aug 30, 2022
@karussell karussell deleted the replace_car4wd branch August 30, 2022 07:57
@easbar
Copy link
Member
easbar commented Aug 30, 2022

nice!

@otbutz
Copy link
Contributor
otbutz commented Nov 4, 2022

I just stumbled across this change and am a little confused about how we would handle multiple transportation modes? I can only configure a single vehicle named "roads" and specify its "transportation_mode". So I can not have a car4wd(CAR) and a truck(HGV) in the same installation?

@karussell
Copy link
Member Author

This is indeed not possible yet. We could allow to create different instances using different name properties like we allow for car. But not sure if this is the way forward.

@otbutz
Copy link
Contributor
otbutz commented Nov 4, 2022

Our current approach feels a bit off to be honest. The configuration calls it graph.vehicles and the code is dealing with VehicleTagParsers but in fact we're handling the concerns of different transportation modes. The actual vehicle has a transportation mode and configuration knobs and/or a custom model.

This would better fit to the OSM model which uses this distinction for access, max_speed, toll and others.

https://wiki.openstreetmap.org/wiki/Key:access#Transport_mode_restrictions
https://wiki.openstreetmap.org/wiki/Key:maxspeed#Vehicles

@karussell
Copy link
Member Author

Yes, sure, it is not yet where we want it to be. It would be nice to get rid of VehicleTagParsers completely and configure the transportation mode directly in the profile.

@easbar
Copy link
Member
easbar commented Nov 6, 2022

We could allow to create different instances using different name properties like we allow for car.

Yes, that might help in the short term. Maybe even something like graph.vehicles=hgv|all_roads=true,car|all_roads=true. So all 'flag encoders' with all_roads=true would be "roads vehicles" and the first string (hgv/car) would be the 'name' of the encoder.

Then again, I think what we should actually do is split the vehicle tag parsers into access and speed tag parsers. In this case the "roads" vehicle would just be split into (configurable) access and speed parsers that fill associated encoded values. For example the transportation_mode parameter would be a parameter of the access tag parser and of course there could be multiple such tag parsers and the corresponding encoded values could be used by the different custom profiles.

Yes, sure, it is not yet where we want it to be. It would be nice to get rid of VehicleTagParsers completely and configure the transportation mode directly in the profile.

I think the VehicleTagParsers should just be normal tag parsers. They are tag parsers already, but they still have some special meaning that we should get rid of. But I don't think there should be some special configuration options for the transportation mode in the profile. As I said above, the transportation mode would just be some parameter of the vehicle tag parser (or better the access tag parser we split out of the vehicle tag parser) and in the profiles we can make use of it by using the corresponding access encoded value in a custom model.

The main question for me are:

  • How are we going to configure tag parsers and encoded values (with parameters) in config.yml? So far we have graph.encoded_values and graph.vehicles, but these do not really correspond directly to the idea of tag parsers + encoded values and graph.vehicles is some kind of mixture of both. For example we could use graph.encoded_values to configure all encoded values (with number of bits and so on) and graph.tag_parsers to configure all the parsers (with parameters like transportation mode etc.).

  • How are we going to setup the 'base' speed and access in custom profiles. So far we have the vehicle key which defines the base speed and access for a custom model. But I think this vehicle thing should be replaced by something more explicit like:

{
 "priority": [
   {
     "if": "car_access == false",
     "multiply_by": 0 
  },
],
"speed": [
  {
    "if": "true",
    "limit_to": "car_average_speed"     
  }   
]
}

And maybe we should allow specifying a 'base' profile (which prepends the custom model rules of a base model) so this becomes a bit more concise.

Related: #2463 (comment),

jp-lopez added a commit to StuartApp/graphhopper-matrix that referenced this pull request Dec 1, 2022
* fix travis release for tagged commits; use jdk 17 instead of 11 for github releases

* allow skipping the LM constraint check for A* (graphhopper#2544)

* LM constraint should be ignored for A*

* make it possible to skip checkLMConstraints call

* move checkLMConstraints call to LMSolver. Fix createSolver for mixed preparations

* avoid fundamental default change but throw proper exception when lm.disable parameter missing

* Add names for travis build jobs (to be shown under 'Jobs and Stages on GitHub)'

* Disable doclint explicitly

* travis: only keep release build, related to graphhopper#2552

* Clean up javadoc comments (graphhopper#2569)

* fix javadoc errors

* remove javadoc plugin

* make comment more readable

* include javadoc again, revert unreadable comments

* disable doclint for javadoc

* Add flex alternatives to measurement

* Do not remove SPT elements from the priority queue, speeds up flexible algorithms (graphhopper#2571)

* Split flag encoders into encoded values and tag parsers (graphhopper#2561)

* Remove final from VehicleEncodedValues

* Log available country rules (graphhopper#2579)

Co-authored-by: Thomas Butz <thomas.butz@optitool.de>

* Give access to vehicle tag parsers

* Update bestFwd/BwdEntry for flexible algorithms when deleting SPT entries, fix graphhopper#2581

* Travis: Fix warnings in build config validation

It said:

Build config validation
root: deprecated key sudo (The key `sudo` has no effect anymore.)
root: missing os, using the default linux
root: key matrix is an alias for jobs, using jobs

* Add VehicleEncodedValues#isHGV

* Use more recent node/npm versions to fix the build (graphhopper#2583)

* Update readme for 5.3

* update deployment guide (graphhopper#2576)

* update deployment guide

* Update deploy.md

* review comments

* mention max_visited_nodes

* Replace deprecated dropwizard parameter types (graphhopper#2574)

Co-authored-by: Thomas Butz <thomas.butz@optitool.de>

* Use epsilon=0.9 for LM map-matching

* Update changelog

* Use edge keys consistently, store keys in CH shortcuts (graphhopper#2567)

* Add comment about slow non-CH alternatives

* Remove outdated/wrong comments

* Add a mapmatching test

* Remove 'shared' encoded values with $ sign in name (graphhopper#2585)

* remove OSMAccessParser

* removed $ from encoded values

* no if clause necessary

* fix changelog

* downgrade todonow

* Matrix client improvements (graphhopper#2587)

* tmp

* fix tests

* update okhttp to 4.9.3

* fixes regarding code review

Co-authored-by: easbar <easbar.mail@posteo.net>

* European toll fallback rules (graphhopper#2450)

Co-authored-by: Thomas Butz <thomas.butz@optitool.de>

* use for loop in PathDetailsBuilderFactory as discussed in graphhopper#2585 (graphhopper#2589)

* Fix: Put back block_private and block_fords for racingbike, this got lost in graphhopper#2561

* Make motor vehicle and hgv properties configurable for roads encoder (graphhopper#2594)

* Disable edge+alt measurements, they take too long

* Use separate deleted flag for SPTEntry, prevent exception when calculating routes with non-feasible approximator (graphhopper#2600)

Also revert epsilon=0.9 'fix' in map matching now that we know what is going on

* LMApproximator: Align variable names with equation numbers

* Log map-matching took value in ms instead of seconds (graphhopper#2591)


Co-authored-by: Andi <easbar.mail@posteo.net>

* rename StringIndex to EdgeKVStorage in preparation for graphhopper#2597

* windows does not need a separate documentation due to WSL (graphhopper#2599)

* windows does not need a separate documentation due to WSL

* link to install steps directly

* EdgeKVStorage: store more than Strings (graphhopper#2597)

* copied code and tests from byteindex branch

* a bit more docu and tests

* behaviour change: throw exception if string is too long and so cut string before storing way_name

* renamed StringIndex -> EdgeKVStorage

* more consistent: reject null values for all cases

* include lost changes again

* ensure same version of storage is used

* changes from review

* fix variable names for key handling

* comments to javadoc

* better 'compression' in case of identical map with byte[] array

* throw exception earlier

* Fix bug in non-CH AlternativeRoute (graphhopper#2603)

* fix plateau-end check

* Revert "Disable edge+alt measurements, they take too long"

This reverts commit fb39266.

* increase count to 10 for Measurement

* AlternativeRoute: follow up refactoring, graphhopper#2603

* MiniGraphUI fixes to make it work again

* move quickstart info into more prominent installation of README (graphhopper#2605)

* Measurement: reduce routingCH_alt after it was accidentally raised in graphhopper#2603

* Remove GraphHopperStorage (graphhopper#2606)

* Rename: GraphHopper#getGraphHopperStorage -> GraphHopper#getBaseGraph
* Remove GraphHopperStorage

* reduce benchmark load e.g. exclude too slow LM16 case

* AlternativeRoute: closer to CH version; default is now a better compromise of speed vs. alternatives found (alternative rate is 1.8 for DE and 1.9 for bavaria)

* Move/Rename: EncodingManager.Access -> WayAccess

* AlternativeRoute: fix test

* Clean up EncodingManager Builder

* minor: Use Bike/FootNetwork.KEY

* Rename freshFlags -> refreshFlags

* BaseGraph: remove copying flags on write, see graphhopper#2593

* added elevation data to reduce internet-dependence while running test

* Add comment about GraphHopper#init

* Merged graphhopper#2593, i.e. revert b8d9b55

Co-authored-by: Andi <contactammmagamma@gmail.com>
Co-authored-by: Thomas Butz <thomas.butz@optitool.de>

* Add another elevation file used in tests

* Use access and speed EVs rather than flag encoder for GHUtility#setSpeed

* Fix broken imports

* More use access and speed EVs instead of encoder for GHUtility#setSpeed

* Replace flag encoder with turn cost encoded value in turn cost provider

* Remove FlagEncoder from ShortestWeighting and CustomWeighting

* Find strongly-connected components of station (stop) graph (graphhopper#2608)

* Load EncodingManager from properties instead of config (graphhopper#2607)

* Helper.cutString should be only for KVStorage and reduce length to 250 to fix graphhopper#2609

* CHPreparationGraph bug fix: unsigned shift required (and increase limit for getKeyWithFlags graphhopper#2567)

* make error message more clear

* CHPreparationGraph: revert to previously correct signed shift

* Increase maximum edge-based CH key for preparation to 2^30 again (graphhopper#2612)

* Add test for large edge ID, graphhopper#2612

* custom_model: introduce value expression (graphhopper#2568)

* value expression: findMax needs to be evaluated

* less strict if * or + operator

* refactored to findMinMax

* made core tests pass

* fix some more tests

* fix more tests

* add encoded values to initialization plus tests

* check minimum for custom_model of query

* improve on check of minimum and negative factors

* less overhead for constant values

* use Double.parse instead of ExpressionEvaluator if number to significantly improve speed

* minor cosmetics

* clarify LATER and removed TODO NOW

* adapted docs

* minor optimization and cleanup

* fix FindMinMax.checkLMConstraints call

* do not allow / as operation

* reduce power and complexity of right hand side a bit more and allow only a single EncodedValue for now

* better readable via extra MinMax class instead of double[]

* exclude changes from master

* a bit more comments

* Create weighting after graph in two tests

* Update custom model editor: operator values are strings now

* Update custom model editor: validation + auto-complete for rhs expressions (graphhopper#2615)

* Allow graph.encoded_values for which there is no tag parser

* Use actual speed maximum rather than flagEncoder#getMaxSpeed() for weighting.getMinWeight() (graphhopper#2614)

* Rename getMin/MaxInt -> getMin/MaxStorableInt, getMaxSetValueOrMax -> getMaxOrMaxStorable (graphhopper#2616)

* Remove FlagEncoder#getMaxSpeed() (graphhopper#2619)

* Remove car/bike_access evs from DefaultEncodedValueFactory, was added only for graphhopper#2523

* CustomModelParser: no need for max speed

* EdgeKVStorage: store name and ref tags separately (graphhopper#2598)

* copied code and tests from byteindex branch

* a bit more docu and tests

* behaviour change: throw exception if string is too long and so cut string before storing way_name

* renamed StringIndex -> EdgeKVStorage

* store name and ref tags separately; create separate path detail for ref; use ref as fallback in instruction text

* added text to changelog

* minor comment changes

* review: fix comments

* review comments and add getValue method to avoid creating HashMaps

* try if speed up was really from the change getKeyValues->edge.getValue

* Revert "try if speed up was really from the change getKeyValues->edge.getValue"

This reverts commit 58a34d6.

Co-authored-by: easbar <easbar.mail@posteo.net>

* update i18n

* Remove FlagEncoder (graphhopper#2611)

* EdgeKVStorage: remove smallCache as too much complexity. we accept disk usage increases by 12% and more uniq keys later possible

* Move outdoor vehicles list

* Relax speed EV requirement for EncodingManager#getVehicles

* Check vehicle instead of access/speed in checkProfilesConsistency

* reduce distance when average_speed path details can be missing, fixes graphhopper#2620

* Valid if PathDetail is null (graphhopper#2618)

* Valid if object is null

* Adding my name in contributors

* Adjusting indentation

* Update CONTRIBUTORS.md

Co-authored-by: Rafael Telles <rafael@bzion.com.br>
Co-authored-by: Peter <graphhopper@gmx.de>

* Support for forward & backward key value pairs (graphhopper#2622)

* fix test

* minor update to docs for map matching

* Update README.md

* add more info to exception

* profiles.md: updated rhs to strings

* minor test change to avoid downloading elevation tile

* CustomModelParser: minor cleanup

* EncodedValue: bug fix for negateReverseDirection

* ConditionalExpressionVisitor: allow '-' as unary operation

* fixed link to CGIAR attribution

* make global time&distance values consistent with path details and instructions (graphhopper#2626)

* make global time&distance values consistent with time&distance path details and also the sum of time&distance of the instructions

* minor simplification

* mention change in changelog

* minor comment fix for graphhopper#2626

* Update github actions v2->v3

* Include destination in instructions (graphhopper#2624)

* support for destination and add test for non repetitive instructions when destination is included

* include destination:ref

* add missing osm file

* try getKeyValues instead getValue

* try speed of getKeyValues (fetching REVERSE_STATE necessary as getKeyValues is align with 'internal' storage direction)

* use simpler edge.getValue call again

* Make profile resolving more flexible for web API (graphhopper#2629)

* ProfileResolver only resolves name of the profile (graphhopper#2629)

* car: do not pass jersey_barrier

https://www.openstreetmap.org/node/8857224952

* move cut string method to EdgeKVStorage

* EdgeKVStorage: no need for cacheSize parameter anymore

* Examples: remove incorrect comment

* fix PathDetails e.g. -1 as default for DecimalDetails doesn't work as a value of the EV could be negative too

* renamed DouglasPeucker to RamerDouglasPeucker

* client-hc: add examples to get translated ("raw") turn instructions

* HeightTile: minor correction, DecimalEncodedValueImpl: minor clarification

* EdgeKVStorage: allow 32 bits (graphhopper#2632)

* allow 32 bits instead of just 31 for EdgeKVStorage

* remove incorrect exception

* minor change to wayGeo limit check

* Maps: Hide gpx export button when custom model box is open, fix graphhopper#2635

* Add hint about custom_model_file vs. custom_model to exception error message (graphhopper#2638)

* Add comma in routing logs

* Move code that creates EncodingManager from properties to EncodingManager

* Return boolean result from BaseGraph#loadExisting

* Move code that puts EncodingManager into properties to EncodingManager

* add hgt provider

* AbstractTiffElevationProvider: use correct long cast

* pt: hint on how to use multiple files

* Add BaseGraph#debugPrint

* new edge smoothing: "ramer" (graphhopper#2634)

* initial version of new edge smoothing

* improve comments

* let's switch the order: first do sampling, then smoothing

* use moving_average as name and a few more comments

* use same max_elevation like in example config

* fix moving_average

* again moving_average rename

* New average_slope EV (graphhopper#2645)

* initial version of new edge smoothing

* improve comments

* let's switch the order: first do sampling, then smoothing

* encoded values for elevation-aware routing: average_slope and max_slope

* for tunnels and bridges ignore elevation changes for pillar nodes

* SlopeSetter -> SlopeCalculator

* fix link for GTFS demo file for graphhopper#2639

* removed defaultIsInfinity and fix bug in DecimalEncodedValueImpl (graphhopper#2646)

* removed defaultIsInfinity and fix bug in DecimalEncodedValueImpl

* changelog: fix issue number

* for useMaximumAsInfinity: also throw an exception if value is too big, but not for infinity

* fix merge of master

* Revert "for useMaximumAsInfinity: also throw an exception if value is too big, but not for infinity"

This reverts commit e3d8826.

* print warning if max_width, max_weight etc values are too large

* fix link for GTFS demo file for graphhopper#2639

* Revert "fix link for GTFS demo file for graphhopper#2639"

This reverts commit d9bb4b9.

* NOTICE: updated dependencies and copyright

* make ramer edge smoothing more robust, graphhopper#2634

* TurnCostParser: no need for method createTurnCostEncodedValues

* improvements for bike (graphhopper#2631)

* lower speed for bad smoothness and steps; avoid hazmat; faster if paving_stones

* clean up of smoothness handling

* revert to 4kmh pushing section speed and tweak speed for certain surfaces

* mtb+racing: do not overwrite highway and surface speed if identical in subclass

* consider multiple from members for no_entry (graphhopper#2648)

* allow configuring turn costs and TransportationMode for RoadsTagParser, related to graphhopper#2460

* add hgv enum to make truck access configurable

* add test for hgv encoded value

* for now do not log as too many warnings, graphhopper#2646

* SlopeCalculator: skip calculation if PointList is empty or 2D only

* Do not get elevations for nodes we don't need while parsing OSM

* Custom weighting calcEdgeMillis truncate instead of round

* just for consistency and easier migration with/from FastestWeighting

* CustomWeighting: handle special case for barrier edges with distance==0 and average_speed>0

* Maps: Add slope detail to elevation diagram (graphhopper#2654)

* Custom and fastest weighting calcEdgeMillis round instead of truncate

* otherwise they are not always the same, because one multiplies by 3600 and the other by 3.6*1000 ...

* Fix pt tests

* Disable flaky test

* custom and fastest calcEdgeMillis again: make them actually the same

* Validate that osm ids are not negative (graphhopper#2652)

* Add comment about negative osm ids, code formatting

* OSMParsers: don't accept null TagParser

* replace car4wd with roads and a custom_model (graphhopper#2651)

* Revert "OSMParsers: don't accept null TagParser"

This reverts commit 8f5c7b2.

* Add urban density encoded value to identify built-up areas (graphhopper#2637)

* Rename Development -> UrbanDensity (graphhopper#2637)

* Support ";" access delimiter for car access. (graphhopper#2655)

* Support ";" access delimiter for car access.
One example is motor_vehicle = agricultural;forestry

* Add support for ";" access delimiter for MotorcycleTagParser and road_access EV.

* Move logic for access delimiter handling for ";" from RoadAccess into OSMRoadAccessParser

* Fix for OSMRoadAccessParserTest

* map match without graphhopper class (graphhopper#2657)

* Solve Viterbi problem with Dijkstra to calculate fewer routes

* Solve Viterbi problem with Dijkstra to calculate fewer routes

* use 6.x/6.0 in readme

* announcement

* fix critical bug in client-hc for Matrix API

* SBI Algo

Co-authored-by: Peter <graphhopper@gmx.de>
Co-authored-by: easbar <easbar.mail@posteo.net>
Co-authored-by: otbutz <tbutz@optitool.de>
Co-authored-by: Thomas Butz <thomas.butz@optitool.de>
Co-authored-by: Michael Zilske <michael.zilske@tu-berlin.de>
Co-authored-by: Robin <boldtrn@users.noreply.github.com>
Co-authored-by: Andi <contactammmagamma@gmail.com>
Co-authored-by: Rafael Sanches Telles <sanchesetelles@gmail.com>
Co-authored-by: Rafael Telles <rafael@bzion.com.br>
Co-authored-by: Alexey Abel <dev@abelonline.de>
Co-authored-by: Lukas Weber <32765578+lukasalexanderweber@users.noreply.github.com>
Co-authored-by: ratrun <ratrun@gmx.at>
@karussell karussell mentioned this pull request Feb 20, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants
0