This release, 8.12, was made on 7th November 2024 and was based on commit 8.12-19-g3f49c29ef.

The previous release, 8.10, was made on 28th May 2024 and was based on commit 8.9-312-g25b22d38f.

The most important changes are that support for voice instructions during navigation has been added; and most identifiers in the iOS API have been renamed, for reasons explained below.

Changes to notice position classes

NoticePosition becomes NoticeAnchor and ExtendedNoticePosition becomes NoticePosition. These names better express their functions.

NoticePosition now stores the width of the notice as well as its X and Y insets.

Functions creating notices (map legend, turn instructions, scale bar) can now take an existing Legend object created in any desired style, allowing, for example, the use of a custom font, border, border colour or transparency in turn instructions.

There is a new function Legend::SetFontStyle to set the font style for subsequent lines added to a Legend object.

There are new Legend style flags to select standard turn instructions or a scale bar.

The width of the Legend object now includes any caption text like "Major road" displayed to the left of an illustration of map style. Therefore some legend widths may need to be increased in user code.

New error code 72: route outside map

The new error code 72, KErrorRouteOutsideMap in the C++ API, means that an attempt was made to use a route (e.g., one loaded from an XML file) which is outside the current map.

Voice instruction support

During navigation, voice instructions can be retrieved using the new VoiceInstruction framework function. It is intended to be used in this way: call VoiceInstruction after every update to the current position, that is, after every call to Navigate, and if VoiceInstruction returns a non-empty string, pass that string to the platform's text-to-speech system. This system has been successfully used on the .NET, Android and iOS platforms. The NavigatorTurn class (Turn in some APIs) now has an Index data member which is unique within a route. It can be used to avoid duplication when creating custom voice instructions. The value -1 means that the index is unknown. It is not normally necessary to make use of this value.

Voice instructions are available in the following languages: English, French, German, Portuguese, Spanish, and Swedish. To choose the language, set the locale in the CartoType Framework: e.g., use the locale "fr-FR", or any locale starting with "fr", for French instructions. It is also necessary to set the text-to-speech language in the platform's text-to-speech system, and ensure that the required voice is loaded.

Controlling the scale during navigation and when following the current position

The new framework function SetFollowScale(double aMinScale,double aSlowScale,double aFastScale,double aMaxScale) sets the scale denominators to be used during navigation when moving at various speeds. aMinScale is the minimum scale; aSlowScale is used at 20kph; aFastScale is used at 80kph; aMaxScale is the maximum scale. The default values are 2000, 2000, 8000, 1000000.

Displaying untravelled and travelled parts of the route differently

During navigation, using the standard style sheet, the travelled part of the route is now displayed in a paler colour than the untravelled part. If desired, the travelled part of the route can be hidden completely.

Destination of road is now stored

The ultimate destination of a road, usually an off-ramp from a motorway or trunk road, is now stored in the RouteSegment class and NavigatorTurn class (Turn in some APIs).

Improved route instruction summaries

The route instructions returned by Framework::RouteInstructions and Route::Instructions are now much improved. They include the time and distance for each section of the route. Sections are merged more intelligently to reduce unnecessary information. At motorway exits the junction number and name, and the road destination as shown on the road sign, are now given if available.

New navigation state: departure

The new 'Departure' navigation state allows different instructions, such as directional indications like 'drive east', to be given at the start of a route.

Android-specific changes

A new Framework method lastError() returns any error code resulting from a call to a Framework method that does not return an error, but returns some other value. For example, Framework.range and Framework.timeAndDistanceMatrix.

Added Framework.FONT_STYLE_BOLD ... Framework.FONT_STYLE_MONOSPACE flag values to be used when setting the Legend font style.

Some functions now return error codes which formerly returned void. For example, Framework.enableMap, Framework.appendStyleSheet, and Framework.convertCoords.

.NET-specific changes

A new Framework function LastError() returns any error code resulting from a call to a Framework method that does not return an error, but returns some other value. For example, Framework.Range and Framework.TimeAndDistanceMatrix.

Added literals Motorway, MotorwayLink, TrunkRoad ... Waterway, UnknownRoute to be used as indexes into the road type arrays in route profiles.

Added FontStyleFlag values to be used when setting the Legend font style.

UWP-specific changes

The same as those for .NET.

iOS-specific changes

Major API change: The prefix used for CartoType declarations is now Ct, although there are compatibility aliases for all declarations apart from enumerated constants; for example, CtFramework has a compatibility alias CartoTypeFramework. All enumerated constants are now prefixed by the class name. For example, the CtFontStyle members are CtFontStyleBold, CtFontStyleItalic, etc., allowing them to be referred to using the names CtFontStyle.bold, CtFontStyle.italic, etc., in Swift, taking advantage of the Objective-C-to-Swift automatic renaming system. The prefix Ct rather than CT is used because Apple informally reserves all capitalised two-letter prefixes, CT being used for Apple's Core Text system.

A new CtFramework method lastError returns the error code resulting from the most recent preceding call to a CtFramework method that does not return an error.