forked from graphhopper/graphhopper
-
Notifications
You must be signed in to change notification settings - Fork 0
/
changelog.txt
259 lines (240 loc) · 20 KB
/
changelog.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
1.0
removed HintsMap
removed /change endpoint
removed vehicle,weighting and edge_based from GraphHopper class, replaced with new profile parameter, #1958
all routing profiles have to be configured when setting up GraphHopper, #1958
there no longer is a default vehicle, not setting the vehicle now only works if there is exactly one profile that matches the other parameters. anyway you should use the new profile rather than the vehicle parameter.
removed IPFilter. Use a firewall instead.
PMap refactored. It is recommended to use putObject(String, Object) instead of put, #1956
removed UnsafeDataAccess as not maintained, see #1620
add profiles parameter and replace prepare.ch/lm.weightings and prepare.ch.edge_based with profiles_ch/lm config parameters, #1922
Properties in config.yml have to follow the snake_case, #1918, easy convert via https://github.com/karussell/snake_case
GraphHopper class no longer enables CH by default, #1914
replaced command line arguments -Dgraphhopper.. with -Ddw.graphhopper.. due to #1879, see also #1897
GraphHopper.init(CmdArgs)->GraphHopper.init(GraphHopperConfig), see #1879
removed GenericWeighting and DataFlagEncoder as a normal CarFlagEncoder does the job too. Or use the new CustomWeighting see #1841
remove TurnWeighting, see #1863
speed up path simplification with path details/instructions, see #1802
revert compression of landmark preparation data, see #1749 and #1376
add required EncodedValues like road_class to EncodingManager if not added from user
removed PathNative,PathBidirRef,Path4CH,EdgeBasedPathCH and moved path extraction code out of Path class, added PathExtractor,BidirPathExtractor(+subclasses for CH) instead, #1730
conditional turn restrictions now supported, #1683
added new `curbside` feature, #1697
moved QueryGraph to new routing.querygraph package
removed GraphExtension, #1783, renamed TurnCostExtension to TurnCostStorage
removed `heading`, `pass_through` and `ch.force_heading` parameters for speed mode/CH, #1763
0.13
removed docker compose file
PathDetails return null instead of -1 for Infinity by default
replaced AverageSpeedDetails by DecimalDetails
moved TagParser into new package: com.graphhopper.routing.util.parsers
removed FlagEncoderFactory.DEFAULT
removed forestry and motorroad from RoadClass
SpatialRule.AccessValue replaced by RoadAccess
removed EncodedValueLookup.hasEncoder, use hasEncodedValue instead
removed MappedDecimalEncodedValue: should be replaced with FactoredDecimalEncodedValue
DataFlagEncoder: it is now required to add EncodedValues before. graph.encoded_values: max_speed,road_class,road_environment,road_access
instead of EncodingManager.ROUNDABOUT use Roundabout.KEY
changed output format of result=pointlist and moved it into separate endpoint /spt
removed TraversalMode.EDGE_BASED_1DIR and TraversalMode.EDGE_BASED_2DIR_UTURN, renamed TraversalMode.EDGE_BASED_2DIR to TraversalMode.EDGE_BASED
to prevent u-turns when using edge-based algorithms it is now required to use TurnWeighting, #1640
GraphHopperStorage.getGraph(Class) was replaced by GraphHopperStorage.getBase/CHGraph(), #1669
CHGraph.shortcut(int, int) was removed (use .shortcut(int, int, ...) and/or .shortcutEdgeBased(int, int, ...) instead, #1693
CH graphs are now identified using CHProfile instead of Weighting, #1670
removed the 'traversal_mode` request parameter for /route, instead of 'traversal_mode=edge_based_2dir' use edge_based=true
removed GraphHopper.set/getTraversalMode() methods, #1705
edge-based CH is now chosen by default if it was prepared, #1706
it is now possible to specify finite u-turn costs for CH preparation, #1671
removed distances from CH shortcuts, reduces memory consumption per shortcut by 4 bytes (about 8-10%), #1719
0.12
renamed VirtualEdgeIteratorState.getOriginalEdgeKey to more precise getOriginalEdgeKey #1549
access refactoring #1436 that moves AccessValue into SpatialRule.Access
refactoring of EncodingManager to use builder pattern. Migration should be simple. Replace new EncodingManager with EncodingManager.create
The methods GraphHopper.setEnableInstructions/setPreferredLanguage is now in EncodingManager.Builder
EncodingManager.supports renames to hasEncoder
big refactoring #1447: to increase 64bit limit of flags, make reverse direction handling easier, to allow shared EncodedValues,
remove reverseFlags method, much simpler property access, simplify FlagEncoder (maybe even deprecate this interface at a later stage)
moved shp-reader into separate repository: https://github.com/graphhopper/graphhopper-reader-shp
0.11
web resources for dropwizard web framework (no servlets anymore) #1108
prefix -Dgraphhopper. for command line arguments necessary, see docs/web/quickstart.md or docs/core/quickstart-from-source.md#running--debbuging-with-intellij for details
delegated reading properties to dropwizard, i.e. the new format yml is not read again in GraphHopper.init
changed file format for landmarks #1376
convert properties into new yml format via: https://gist.github.com/karussell/dbc9b4c455bca98b6a38e4a160e23bf8
0.10
introduce path details
added handcoded API java client to this repository
0.9
remove war bundling support #297
rename of DefaultModule to GraphHopperModule and GHServletModule to GraphHopperServletModule
EncodedValue uses Math.round(value/factor). This can change the retrieved values for EncodedValues #954
EncodedDoubleValue and EncodedValue requires maxValue/factor to be a natural number #954
default base algorithm for all modes is bidirectional A* (except speed mode)
introduced landmarks based hybrid mode, #780
moving all prepare.xy configs to prepare.ch.xy and e.g. disallow the old
removed deprecated methods in GraphHopper (setCHWeighting, setCHWeightings, getCHWeightings, setCHWeightings, getCHPrepareThreads, setCHPrepareThreads), Path.calcMillis, findID of LocationIndex and all implementations
0.8
refactoring to Weighting class, see #807
removed FlagEncoder from parameters as weighting.getFlagEncoder can and is used
all properties with prefix "osmreader." changed to "datareader." and osmreader.osm changed to datareader.file
maven/gradle dependency graphhopper is now splitted into graphhopper-core and graphhopper-reader-osm, i.e. if you previouls depend on 'graphhopper' artificat you should now use graphhopper-reader-osm except environments like Android where you just load the graph and do no import
use GraphHopperOSM as base class instead of GraphHopper
OSM reader separated from core, use new graphhopper-core package
moved subnetwork code into own package com.graphhopper.routing.subnetwork
moved weighting code into own package com.graphhopper.routing.weighting
code format has changed, so it is important to change your PRs too before you merge master, see discussion #770
0.7
added snapped points to output JSON for every path
the foot routing is now much smoother and only considers safe paths, to use beautiful roads (i.e. prefer hiking routes etc) use the new 'hike' profiles, see #633
vehicle constants have moved to FlagEncoderFactory
several constants changed to under score notation see #719 with a few breaking changes, e.g. use lower case names for flag encoders or jsonp_allowed instead of the jsonpAllowed annotation
moving all string parameter constants into the Parameters class
no more acceptedRailways set see #662 for more information
web API: content type of gpx export is now application/gpx+xml if not explicitly specified
use prepare.ch.weightings instead of prepare.chWeighting e.g. for disabling CH use prepare.ch.weightings=no
GraphHopper class is refactored regarding RoutingAlgorithmFactory in order to fix problem when integrating flexibility routing, most of the CH related stuff is moved into CHAlgoFactoryDecorator, several methods are deprecated to use the methods of the decorator, see #631
WeightingMap is now named HintsMap
use the correct graphHopperFolder as no automatic fallback to 'folder-gh' is happening anymore, see #704
refactored FlagEncoder.handleFerryWay to getFerrySpeed to make it possible to fix #665
removed setWeightLimit as too unspecific for arbitrary weights, use setMaxVisitedNodes instead
missing renames for Path.setEdgeEntry -> setSPTEntry and AbstractAlgorithm.createEdgeEntry -> createSPTEntry
0.6
removed methods deprecated in 0.4 and 0.5
renamed EdgeEntry to SPTEntry and AStar.AStarEdge to AStar.AStarEntry
parameter force removed from AbstractFlagEncoder.applyMaxSpeed
GHResponse now wraps multiple PathWrapper; renamed GraphHopper.getPaths to calcPaths as 'get' sounded too cheap; a new method RoutingAlgorithm.calcPaths is added; see #596
moving lgpl licensed file into own submodule graphhopper-tools-lgpl
renaming of Tarjans algorithm class to TarjansSCCAlgorithm
more strict naming for Weighting enforced and more strict matching to select Weighting (equals check), #490
specify the preferred-language for way names during graph import (ISO 639-1 or ISO 639-2)
renaming of getCHWeighting to getCHWeightings due to supporting multiple CH weightings, #623
deprecation of setCHWeighting, please use setCHWeightings instead, #623
0.5
Several names have changed see #466, #467, #468
GraphHopper.optimize removed use postProcessing instead
method GraphHopper.getGraph() changed to getGraphHopperStorage()
the interface GraphStorage does no longer extend from the Graph interface. Use GraphHopperStorage (which implements the Graph interface via the base graph) or only Graph instead
now it is necessary to call baseGraph/chGraph.freeze in order to use the chGraph (to simply determine when an edgeId is a shortcut)
LevelGraphStorage is now a GraphHopperStorage with an additional ch graph (CHGraphImpl)
GraphHopperStorage implements now the Graph interface and delegates all necessary methods to the underlying base graph. To do routing you call getGraph(CHGraph.class or Graph.class) where the parameter Graph.class returns the base graph and the behaviour is identical to GraphHopperStorage itself
renamed LevelGraph* to CHGraph*
renamed NoGraphExtension to NoOpExtension
removed visitedNodes method in GraphHopper replaced with per response information: response.getHints().getLong("visited_nodes.sum", 0)
added ability to store hints in GHResponse which will be forwarded to the json too
breaking change in HTTP API: error JSON format changed to be message:"" instead of within info.errors, see updated api documentation
made GHResponse.getMillis, Path.getMillis, GPXEntry.getMillis deprecated, use getTime instead
in AbstractFlagEncoder, parse*() and getStr() are now deprecated, use properties.get* instead
0.4
translation key turn changed and merged with left etc into turn_left, turn_right etc
create location index before preparation in the GraphHopper class
encodingManager.getSingle() is removed and flagEncoder list is no longer sorted, the first vehicle is used for CH preparation
removed LocationIndexTreeSC, use new LocationIndexTree(levelGraph.getBaseGraph(), directory) instead
getLevel and setLevel do no longer automatically increase node count, use getNodeAccess.ensureNode for that
normal algorithms are now possible on prepared graph use getBaseGraph, see #116
GHResponse no longer has isFound method, use !hasErrors instead
merged unused Edge class into EdgeEntry
astar and astarbi are now both none-heuristic and take parameters for beeline approximation: astar.approximation=BeelineSimplification|BeelineAccurate or astarbi.approximation=...
making GPX export according to the schema to support import from various tools like basecamp
refactoring: AllEdgesIterator.getMaxId is now named getCount
major change of internal API: moved method "Path RoutingAlgorithm.calcPath(QueryResult,QueryResult)" to a helper method QueryGraph.lookup, call queryResult.getClosestNode for the calcPath(nodeFrom,nodeTo) method
no cachedWays and cachedPoints in Path anymore
Path.findInstruction was moved to InstructionList.find
if start and end point are identical an algorithm will find the path consisting only of one node, one point and one instruction (finish instruction), but without edges
astarbi has new default values for approximation (false) and approximation_factor (1.2) in RoutingAlgorithmFactorySimple
instead of strings use the variables in AlgorithmOptions to specify an algorithm
use RoutingAlgorithmFactorySimple instead of RoutingAlgorithmFactory, also more constistent algorithm preparation handling due to new AlgorithmOptions, therefor removed NoOpAlgorithmPreparation
GHResponse.getXX methods now fail fast (throw an exception) if an error while route calculation occured. See #287
renamed less often used URL parameter 'min_path_precision' to way_point_max_distance which makes it identical to the setWayPointMaxDistance method used for simplification at OSMImport
removed douglas.minprecision from Java API ghRequest.hints => use wayPointMaxDistance instead
encoder.supportTurnCost is replaced by encoder.supports(TurnWeighting.class)
CmdArgs is now a Map<String, String> instead Map<String, Object>. The value will be parsed up on every getXY call, makes storing string vs. object less error-prone
removed GHRequest.getHint, instead use the provided methods in GHRequest.getHints().getXY and GHRequest.getHints().put
important graph incompatibility as properties cannot be loaded. renamed osmreader.bytesForFlags to graph.bytesForFlags, renamed config property osmreader.acceptWay to graph.flagEncoders
default weighting is now fastest, fixing #261
moved method GraphHopper.main into tools module and class com.graphhopper.tools.Import, see #250
refactored GraphHopper.createWeighting to accept more than one configuration option, see #237
refactored GraphHopper.disableCHShortcuts to setCHEnable(boolean)
moving the boolean parameter of GraphHopper.setInMemory into a separate method setStoreOnFlush
renaming of GraphHopper.setCHShortcuts to setCHWeighting, as well as the property prepare.chShortcuts to prepare.chWeighting
jsonp is disabled by default. You need to enable it in the config.properties, see the config-example.properties
EncodingManager cannot be null in GraphHopperStorage. If you need to parse EncodingManager configuration from existing graph use EncodingManager.create
no reflection done in EncodingManager which improves portability and makes configuration of encoders possible before adding to manager
removed dijkstraNativebi as no performance advantage but maintenance disadvantage and similar to oneToManyDijkstra
to provide context for turn costs we needed to add prevEdgeId into Weighting.calcWeight, see new documentation
with the introduction of lock protection mechanism (see #112) GraphHopper needs always write access, see also #217
new GraphHopper.clean method to remove the graph directory via Java API
0.3.0
introduced prefer bits, now bike uses more bits and 3 bike encoder do not fit into 32 bit anymore, will be fixed later
moved Translation argument into Path.calcInstruction for more fine grained control, instructions are now uncached and GHRequest: new locale parameter
CoordTrig and the like are removed, GHPlace is mostly replaced by GHPoint and so GHRequest has now methods ala addPoint instead
removed isBoth from AbstractFlagEncoder, moved canBeOverwritten and associated test to PrepareEncoder
removed unused directory.rename
refactor edge.copyProperties into copyPropertiesTo to have similar semantics as Graph.copyTo
calcWeight now contains reverse boolean to calculate correct direction dependent weight
completely different web API response format. see docs/web
swapDirections is renamed to reverseFlags (EncodingManager and FlagEncoders)
edgeState.detach has now a reverse parameter, just use false to get previous results
web api: buildDate contains now timezone, algoType is replaced with weighting
dijkstraNative is now dijkstraNativebi
fixed #151
calcWeight now contains reverse boolean to calculate correct direction dependent weight
EncodingManager always takes the encoders in constructor, to force always init
GraphHopper.setMemory(true, true/false) was refactored to GraphHopper.setMemory(true/false), use mmap config via GraphHopper.setMemoryMapped()
incompatible edges => you need to re-import data and/or update the edges file
the instructions of the web response does not contain times (string) but instead millis (long)
PrepareContractionHierarchies.setPeriodicUpdates is now in percentage not in absolute counts
improved bike routing #132, #138, #139, #150
gpx export via API, HTTP (route?type=gpx) and web interface is possible: #113, #136, #141
0.2.0
23 Nov 2013
change inconsistent default settings for contraction hierarchies in the API - see https://lists.openstreetmap.org/pipermail/graphhopper/2013-December/000585.html
fixed issues with android:
graphhopper: use maps from 0.2 path; updated maps
mapsforge: use mapsforge-map dependency; merged #461; avoid duplicates otherwise mapsforge-core would be duplicate (?)
refactored/renamed classes and methods:
refactor 'flags' from int to long (still only int is stored)
replacing Graph.edge(a,b,dist,edgeFlags) by Graph.edge(a,b).setDistance().setFlags()
FlagEncoder.flags => use FlagEncoder.setProperties or separate setAccess and setSpeed method
renamed LocationIDResult to QueryResult and Location2NodesNtree to LocationIndexTree
renamed Location2IDIndex to LocationIndex
renamed WeightCalculation to Weighting and getWeight to calcWeight
the URL parameter algoType in web module is now deprecated and 'weighting' should be used
removed GHDijkstraHeap, GHDijkstraHeap2
made DistanceCalc into interface (new DistanceCalcEarth implementation)
made GraphStorage into interface (new GraphHopperStorage implementation) move some methods from Graph into GraphStorage -> optimize + node removal stuff -> not necessary in algorithms
incompatible storage layout due to:
pluggable endianness (#103) -> changed default endianess to LITTLE
add highly experimental UnsafeDataAccess to speed up search ~15%
several small bug fixes and improvements
different edge insert
important bug fix for edge retrieval which leads to massive speed up in prepare + CH algos
finally fixed major feature request #27 to allow gps-to-gps queries instead of only junction-to-junction ones.
follow up in #52 and #115
slower but more precise and necessary edge distance calculation
fixed bug #105 for disconnected areas
fix which made CH preparation ~5% faster
more align API for all algorithms. and initCollection is called via 1000 not something depending on the graph size
API changed
case of vehicle now case does not matter
returned distance is in meter now
better i18n support
fixed major bug #102 when removing subnetworks
fixed bug #89 for trams on roads
completed improvement #93 for ferries
edge explorer makes none-CH algorithms ~8% faster
link to all closed issues: https://github.com/graphhopper/graphhopper/issues?milestone=2&state=closed
0.1.1
06 August 2013
correct maven bundling and some more issues
more i18n
0.1
23 July 2013
initial version with lots of features
24 closed issues:
https://github.com/graphhopper/graphhopper/issues?milestone=3&state=closed
e.g.:
Route instructions
Implement OSM import for bike/foot/car
More compact graph (nodes along a way are stored in a separate storage => faster and reduced RAM usage)
Made routing working world wide. Make German-sized networks working on Android.
Made routing faster via bidirectional algorithms, contraction hierarchies, graph sorting, better OSM integration and some fine tuning.