28.0¶
Links to the API Reference can be found here
28.0.1 (2025-03-18)¶
Bug Fixes¶
-
Map: Render vehicle and load roads even before heightmap data are ready
This change makes rendering of the map faster by making some operations parallel.
-
Map: Select closest route from nearby alternatives after tap on map
- Navigation: Fix crash in street change analyzer
- Navigation: Fix evaluation of undefined trailer type for logistic restrictions
- Navigation: Fix multiple identical warnings on route
-
Places: Fix moving of DestroyContext object to lambda
It would sometimes happen that the function that loads place's information would be stuck and not return anything. This has now been fixed.
-
Routing: Dont say instruction on straight road
- Routing: Fix crash when recomputing pedestrian route
- Routing: Make ETA rely solely on speed profiles
- Routing: Rework EV charging station ranking
- Routing: Say instruction on exit from non highway road
28.0.0 (2025-02-28)¶
Bug Fixes¶
- Audio: Say direction immediately after setting navigation route
- Core: Correct vehicle zone warnings for online route
-
Map: Add limited capabilities for certain Adreno GPUs
The app would crash when using navigation mode on certain devices (mostly Samsung ones).
-
Map: Added bothway attribute to incident parsing
-
Map: Fix visibility of places after MapView reloading
After setting the visible categories through
PlacesManagerand reloading the map, the skin would be reset and the visible categories reset to default, too. This has now been fixed. -
Map: Improve displaying of online route with traffic
Fixed graphical artifacts that could have been visible.
-
Navigation: Fix handling of road lanes connectivity with invalid road data
- Routing: Do not report emission zones for electric vehicle
Features¶
-
Android: Add recompute reason into recompute started listener method
Instead of
OnRouteRecomputeProgressListener, there is now aOnRouteRecomputelistener with three different callbacks that notify about start, progress and end of recompute. The listener that notifies about the start of recompute now has aReasonparameter. -
Android: Add route to recompute progress notification callback
The
OnRouteRecomputelistener now also has arouteparamater so that it is clear for which route the recompute was triggered. -
Android: Deprecate Individual places functionality
- Android: Return null permanent ID when voice entry is not installed
-
Android: Split original position to place and entry position
Address points or POIs have their original (place) positions - that's where they are positioned in real life. These objects can also have an "entry" point which is a position on the road through which the point is accessible.
-
Android: Split recompute progress callback to dedicated methods for start, progress and finished
Instead of
OnRouteRecomputeProgressListener, there is now aOnRouteRecomputelistener with three different callbacks that notify about start, progress and end of recompute. The listener that notifies about the start of recompute now has aReasonparameter. -
iOS: Add entry position into Waypoint and ChargingWaypoint
Address points or POIs have their original (place) positions - that's where they are positioned in real life. These objects can also have an "entry" point which is a position on the road through which the point is accessible.
-
iOS: Add recompute reason and route into recompute progress listener method
-
iOS: Split recompute progress callback to dedicated methods for start, progress and finished
Instead of
didUpdateRecomputeProgress, there is now aSYNavigationObserverlistener with three different callbacks that notify about start, progress and end of recompute. The listener that notifies about the start of recompute now has aReasonparameter. -
iOS: Deprecate Individual places functionality
- iOS: Make map nullable in
SYMapInstaller detectCurrentCountrycallback - iOS: Remove unused
SYCustomPlacesCategoriesErrorDomain - iOS: Rename error domains with prefix NS to have prefix SY
- Navigation: Support of new lane types
- Navigation: Update route dynamic warnings with scout analyzer
- Navigation: Vehicle aid analyzer works now with online route restrictions
- Navigation: Vehicle zone analyzer works now with online route restrictions
- Position: Snap vehicle on current or visited part only
- Routing: Add special
LargeGapInPolylinerouting error type for gap in gpx - Routing: Refresh EV warnings on route after recompute
- Routing: Remove full route json serialization
BREAKING CHANGES¶
- Routing: Removed unused full serialization of route from interfaces. Developers didn't use this function
so probably no action is needed to adapt. Full serialized route didn't need compute but it was dependent on
the map and therefore after map update deserialization failed. The best approach is to store brief route
(only route plan) and compute the route each time after deserialization.
- Android:
serializeToFullJSON()method has been removed from android interface. UseserializeToBriefJSON()function instead if you want to store user routes. - iOS:
SYRouteSerializerFullhas been removed from iOS interface. UseSYRouteSerializerBriefinstead if you want to store user routes.
- Android:
- iOS: Unused
SYCustomPlacesCategoriesErrorDomainwas removed. - iOS: Renamed
NSEVErrorDomaintoSYEVErrorDomain,NSEVErrortoSYEVError,NSTrafficErrorDomaintoSYTrafficErrorDomain,NSTrafficErrortoSYTrafficError,NSReverseSearchErrorDomaintoSYReverseSearchErrorDomain. -
iOS: SYNavigationObserver's method
didUpdateRecomputeProgress: was replaced with new methodsdidStartRecompute:,didUpdateRecomputeProgress:anddidFinishRecompute:didStartRecomputehas two arguments: route and recompute reasondidUpdateRecomputeProgresshas two arguments : route and recompute progressdidFinishRecomputehas two arguments: route and recompute result
The route parameter in all of them is the original navigation route, from which recompute is started, due to one of these possible reasons: traffic change, vehicle of out route, waypoint skipped or language changed. This reason is provided in the didStartRecompute: delegate method. The route parameter in all of the three delegate recompute methods could be used as an identifier for single recompute process.
Recompute result could be Success or an Error which has two possible reasons for now:
- failed - recompute could not been finished, due to missing data or similar issue
- cancelled - recompute was cancelled, due to e.g. navigation route was changed during recompute process.
-
Android: Navigation listener
OnRouteRecomputeProgressListenerwas replaced withOnRouteRecomputelistener with separate methods for start, progress and finished recomputeRecomputeStartedDatahas two arguments: route and recompute reasonRecomputeProgressDatahas two arguments : route and recompute progressRecomputeFinishedDatahas two arguments: route and recompute result
The route parameter in all recompute listener data classes is the original navigation route, from which recompute is started, due to one of these possible reasons: traffic change, vehicle of out route, waypoint skipped or language changed.
This reason is provided in
RecomputeStartedDatareceived in theRecomputeStartedcallback.Routeparameter in all three recompute listener data classes could be used as an identifier for single recompute process.Recompute result could be Success or an Error which has two possible reasons for now:
- failed - recompute could not been finished, due to missing data or similar issue
- cancelled - recompute was cancelled, due to e.g. navigation route was changed during recompute process
-
iOS: Map iso became nullable in completion of
SYMapInstaller.detectCurrentCountry. -
Navigation: Added support of specialized road lane types:
- Android:
LaneInfo.Typeextended by: Turn, CenterTurn, Slow, Express, PassingOvertaking, Reversible, RegulatedAccess, VariableDriving -
iOS:
SYLaneTypeextended by: SYLaneTypeTurn, SYLaneTypeCenterTurn, SYLaneTypeSlow, SYLaneTypeExpress, SYLaneTypePassingOvertaking, SYLaneTypeReversible, SYLaneTypeRegulatedAccess, SYLaneTypeVariableDrivingWhere:
- Turn lane is a dedicated lane that is used for making a turn in order not to disrupt ongoing traffic.
- Center Turn lane is a bidirectional turn lane located in the middle of a road that allows traffic in both directions to turn left (right for left side driving countries).
- Slow lane, e.g., truck lane (U.S.), also known as crawler lane (Great Britain), is a lane on long and/or steep uphill/downhill stretches of high-speed roads that is designated to facilitate slow traffic.
- An Express lane is a lane of a road that is used for faster moving traffic and has fewer accesses to exits/off ramps
- A Passing lane is a lane that can occur on steep mountain grades or other roads where overtaking needs to be regulated for safety. They are used to safely pass slow moving vehicles.
- A Reversible lane is lane element that is fully reversible, i.e., traffic changes direction for a specific time frame. For example, direction is northbound in the morning, then reversed to be southbound in the evening.
- A Regulated access lane is a lane designated as a holding zone, used to regulate traffic using time intervals. Variable driving lanes are lanes added to a road that open and close to accommodate traffic volume and flow using variable indicators.
- Android:
-
Routing: Added new routing errors:
LargeGapInPolylinefor android andSYRoutingResultLargeGapInPolylinefor ios- These new errors are tied to the Guided route compute type, further specifying the error, which was until now
marked as
PathConstructFailedandSYRoutingResultPathConstructFailed, respectively. - An error is returned when provided polyline for guided route compute probably had too large gaps between the points and the matched route was not continous and had gaps greater than 1km. In that case, the provided polyline is not correctly generated or is not created from gps log. Consider to use polyline points as waypoints instead.
- These new errors are tied to the Guided route compute type, further specifying the error, which was until now
marked as
-
Android: Parameter
permanentIdchanged to nullableParameter changed to nullable state (as it was before) because permamentId could be provided only for installed or system voice packages. For other available packages, this parameter will be provided as null.