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.

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.