A Free and Open-Source Software library implementing OGC Cartographic Symbology 2.0
libCartoSym aims to be an eC implementation of the CartoSym-CSS and CartoSym-JSON encodings defined in the candidate OGC Cartographic Symbology - Part 1: Core Model and Encodings Standard version 2.0 Standard.
The library will allow to read and write these CartoSym encodings, as well as import from and export to additional encodings of portrayal rules such as OGC SLD/SE and Mapbox GL Styles.
Since the CartoSym encodings extend the OGC Common Query Language (CQL2), the libCQL2 dependency provides support for parsing and writing CQL2-Text and CQL2-JSON expressions, which themselves imply support for parsing and writing geometries defined in Well-Known Text (WKT) and GeoJSON which is provided by libSFGeometry and libSFCollections. The ability to perform spatial relation queries based on the Dimensionally Extended-9 Intersection Model is provided by libDE9IM. The libGeoExtents library provides the foundational basic data structures for geographic points and extents.
Additional functionality related to implementing CartoSym 2.0 in renderers, such as the run-time evaluation of expressions and the generation of a symbology specifier for specific conditions, will also be integrated within this library.
Object-oriented bindings for libCartoSym automatically generated using Ecere's binding generating tool (bgen) from the eC library will be available for the C, C++ and Python programming languages, with eventual support for Java and Rust planned as well.
The recommended method to obtain and build libCartoSym and its dependency libraries is to follow the instructions in BUILDING.md, or running fetchAndBuild.sh / fetchAndBuild.bat.
This method will use the stand-alone eC development kit and eC runtime library (using the extras
branch with necessary additional modules),
avoiding unnecessary dependencies on other components of the Ecere SDK runtime library.
The script will clone both the eC and libCartoSym repositories and build everything (not yet including bindings to other programming languages).