This release, 8.6, was made on 8th August 2023 and is based on commit 8.6-1-gc0939f76f in the Git repository.

The previous release, 8.4, was made on 20th February 2023 and was based on commit 8.4-1-gcb08c572d in the Git repository.

Changes since the initial release of 8.6

These changes were made during the active lifetime of release 8.6, and became part of release 8.8.

--- 8.6.17 ---
updated the Android build system to work with the latest Android Studio (Giraffe)
fixed #173: UWP SDK crashes with access violation in in the renderer
fixed #183: range calculation crashes
text index and street index are no longer read if requested text index levels are -1: fixes #156: map of Britain and Ireland takes 9Gb RAM
--- 8.6.31 ---
IMPORTANT: fixed #184: release 8.6 is slower than 8.4
--- 8.6.57 ---
fixed #189: enabling and disabling maps does not work
makemap creates urban areas more accurately; fixes #192
the standard style sheet now draws urban areas after land layers
--- 8.6.66 ---
fixed #83: seabed texture not drawn when graphics acceleration is turned off
improved order of layers in CTM1 files for better search relevance
fixed #195: 3D buildings were not drawn
--- 8.6.71 ---
repeating textures now have their own vertex array: fixes #194
improved wetland hachure colour: now uses ncsblue
fixed #196: route colours should not be made darker in night mode
English names are now generally drawn on a separate line, using a forced line break, apart from minor and mid-level roads; and English names have now been added for some layers where they were not used.
added CALLBACK macro (_stdcall) needed for WinHttpSetStatusCallback to compile in 32-bit build
updated to the version of the naett library used by the mainline
added a rule for contour shapefiles: *.contours.shp
added a contour layer to the standard style sheet
fixed #199: the /split option in makemap seems not to copy string attributes
fixed #203: Android app crashes on two-finger gesture
--- 8.6.84 ---
fixed #221 and #222: motorway feature type matches invalid feature type in style sheet expressions
placename labels now have higher priority than stations
restored legality of drawing a layer twice in a style sheet
fixed #219: railway platforms were drawn as sections of railway track; added platforms to style sheet
--- 8.6.89 ---
improved the handling of touch events on Android to avoid jumps when releasing one finger, etc.
fixed #200: label paths are smoothed when necessary, allowing more river names to be drawn
fixed #223: river names wrapped unnecessarily
--- 8.6.96 ---
further improvements to river names in size and positioning
using obsolete expression syntax in a style sheet now causes an error
roads, cities and major land areas are now drawn at smaller scales
grassland and meadows are no longer drawn by the standard style sheet because they are recorded so inconsistently in OSM data
fixed #229: the /interval option in makemap now works properly
bodies of water no longer disappear at small sizes
removed seams between terrain shadow tiles
improved urban areas by increasing resolution and using a different set of roads to determine them
--- 8.6.116 ---
canals are now not shown by the standard style sheet at scales below 1:1,000,000: fixes #233
added missing feature type name 'strait'
MString::CompareExact erroneously allowed case mismatches if there were non-ASCII characters
fixed #250: crash when loading style sheet if an icon was defined after the first layer
--- 8.6.126 ---
fixed case #252: landlocked maps are drawn in blue
added missing property implementations to the iOS SDK: fixed #248: hiding the scale bar has no effect on iOS demo
fixed #259: canal label in wrong place in perspective view
--- 8.6.135 ---

Online Map Data Access

New functionality allows CartoType to support both the client and server roles in using CTM1 files online. The Framework function

std::string HandleQuery(const std::string& aQuery,const std::string& aData)

can be used by servers to handle queries sent from client programs. A client program opens a map file using a URL instead of a filename. Any string starting with http: or https: is treated as a URL. Internally, requests for map data are passed to the server as HTTP requests which must be fulfilled using Framework::HandleQuery. The HandleQuery function is implemented in the C++ and .NET APIs, allowing servers to be written using C++, C#, or another .NET language. The client program can run on any CartoType platform. This allows CartoType applications to use very large maps without the need to install the map data on a device.

Address Searching

Address searching has been greatly simplified internally, and made more accurate and more likely to find an address, and there are some public API changes. Specific functions for finding street addresses, parts of addresses and buildings near streets have been abolished. Address searches are more likely to be successful if CTM1 files are re-created using the new version of makemap, which creates CTM1 8.2 data rather than CTM1 8.1.
overlapping maps

Clipping of overlapping maps is no longer supported. It did not work properly and was hardly ever used. If maps are loaded as tiles, side by side, they should not overlap. Of course overlapping maps are allowed, and useful, if different maps have different types of data and are intended to be used as overlays.

Framework Creation

Framework objects can be created without style sheets. If an empty string is supplied as the style sheet, everything still works but maps cannot be drawn. This is useful when creating Framework objects for geocoding alone.
When a Framework object is created the default number of text and street index levels loaded is now 3 rather than 1, which uses more RAM but speeds up address searching.

Style Sheets

Style sheet expressions can now test the display size of objects by using units, as in the expression '@feature_type="isl" and @size gt 5mm', which tests for islands with a displayed size (maximum diagonal of bounding box) greater than five millimetres.

Metadata

Map metadata now includes an array of the names of all the layers in the map.

Specific C++ SDK Changes

The function Framework::HandleQuery has been added to make it possible to write an on-line map data server using CartoType:

std::string Framework::HandleQuery(const std::string& aQuery,const std::string& aData);

The enum class AddressPart has been abolished.

The data member Layers, a vector of strings, has been added to the MapMetaData class.

FrameworkMapDataSet::LoadMapData no longer has the argument aMapOverlaps, and the MapsOverlap data member of FrameworkParam has been abolished.

These Framework functions have been abolished:

  • SetMapsOverlap
  • FindStreetAddresses
  • FindAddressPart
  • BuildingsNearStreet

Functions to load and append style sheets now take char*, not uint8_t*, as the type for the style sheet text.

CartoType's own list classes, formerly defined in cartotype_list.h, have been abolished.

For convenience, map object user data defined by the UserData union now includes a view of the data as a pair of two 32-bit integers.

Stream classes have been simplified. In particular, DataInputStream and DataOutputStream have been merged into InputStream and OutputStream. These changes should not affect users because these classes are mainly for internal use.

These functions have been added to MString:

  • Text Substring(size_t aStart,size_t aLength) const
  • void Replace(size_t aStart,size_t aEnd,const char16_t* aText,size_t aLength = npos)

RefCountedString is now immutable. It was formerly intended as such but that was not enforced.

Specific .NET SDK Changes

The function Framework.HandleQuery has been added to make it possible to write an on-line map data server using CartoType:

array<Byte>^ HandleQuery(String^ aQuery,array<Byte>^ aData)

These Framework functions have been abolished:

  • SetMapsOverlap
  • FindStreetAddresses
  • FindAddressPart
  • FindBuildingsNearStreet

The property Layers, a list of strings, has been added to the MapMetaData class.

The enum class AddressPart has been abolished.

The MapsOverlap property of FrameworkParam has been abolished.

Specific UWP SDK Changes

These Framework functions have been abolished:

  • SetMapsOverlap
  • FindStreetAddresses
  • FindAddressPart
  • FindBuildingsNearStreet

The property Layers, a vector of strings, has been added to the MapMetaData class.

The enum class AddressPart has been abolished.

The MapsOverlap property of FrameworkParam has been abolished.

Specific Android SDK Changes

These Framework methods have been abolished:

  • setMapsOverlap
  • findStreetAddresses
  • findAddressPart
  • findBuildingsNearStreet

The member 'layers', a vector of strings, has been added to the MapMetaData class.

The AddressPart class has been abolished.

The mapsOverlap member of FrameworkParam has been abolished.

The MapView class now uses a different scale gesture detector, for smoother and more reliable handling of pinch zoom gestures.

Specific iOS SDK Changes

These CartoTypeFramework methods have been abolished:

  • setMapsOverlap
  • findStreetAddresses
  • findAddressPart

The property 'layers', an array of strings, has been added to the CartoTypeMapMetaData class.

The CartoTypeFramework method readUrl has been added for internal use.

The CartoTypeAddressPart enum has been abolished.

The mapsOverlap member of CartoTypeFrameworkParam has been abolished.

Makemap Changes

Makemap now creates CTM1 files with a version of 8.2 rather than 8.1. The change is to the way search terms are stored in the text index. They are now stored as-is rather than being converted to lower-case, which allows for better matching in some cases. Older versions of CartoType can read CTM1 8.2 maps, and newer versions can read CTM1 8.1 maps. It is highly recommended to re-create CTM1 files using the new version of makemap if you use address searching, because certain streets cannot not be found and there are false positives using the older version. That is because strings encoding object IDs were erroneously converted to lower case, changing the value of the encoded numeric ID.

The option /textindex no longer includes the choice of making a partial text index. The choice is now only between a full text index and none.

Standard Style Sheet Changes

These are changes to the file standard.ctstyle.

The 'found' layer, used by the Maps App and the Windows Demo to display found objects, now uses a new icon called 'found-point-icon' to highlight point objects. It is a scalable circle icon, rather than the fixed-size circle formerly inserted.

The 'outline' layer now uses labels only for islands with a size (maximum length of diagonal of bounding box) of more than 5mm on the projected map. This rule uses the new ability of style sheet expressions to interpret numbers with trailing units, like '5mm', where appropriate.

The terrain layers 'terrain-height-feet' and 'terrain-shadow' are now suppressed at scales larger than 1:20000 (formerly 1:10000) because they became blocky at very large scales.

The layers 'place/major' and 'place/minor' now draw city, town and village labels only for point objects.

The layer 'land/major' now suppresses labels at scales smaller than 1:100,000.

The layer 'waterway/major' now draws labels only for features with a size (maximum length of diagonal of bounding box) greater than 1cm on the projected map.

The layer 'road/mid' now suppresses secondary road labels at scales smaller than 1:40,000 (formerly 1:75,000).

The layer 'road/major' now draws labels only for road segments with a size (maximum length of diagonal of bounding box) greater than 1cm on the projected map.

The layer 'routerelation', used for long-distance trails and cycle paths, now labels walking routes in green and cycling routes in blue.

If the style sheet variable DEBUG is set programmatically, the layers '_route', '_route1', '_route2' and 'postcode' are added to show route layers created in contraction hierarchy routing data and postcode boundaries and points. These layers are useful when investigating routing and address-finding issues.