Home

Awesome

Cartographic Information Model

This repository hosts the specification for the Cartographic Information Model (CIM) which is a map content specification used to persist and transfer cartographic descriptions of GIS datasets. Represented in JSON, the specification is used for maps, scenes, layouts, layers, symbols, and styles in ArcGIS applications and APIs.

Usage of the CIM primarily begins with an entry point through a primary object. These objects are:

How this specification is formatted

This CIM specification is documented via Markdown documents that contain definitions for objects and their properties. JSON lacks an inheritance mechanism and CIM implementations often deal with many abstract types using inheritance. Additionally, JSON has one numeric type, but typed languages typically differentiate various integer and floating-point types. The formatting of the Markdown reflects these realities in the following ways:

  1. Objects that can be thought of inheriting from a type list properties in a section for each inherited type. In some cases, the final type may inherit all properties from another type and have no unique properties for itself. See CIMRGBColor for an example.
  2. The Types document lists objects by their type for quick reference.
  3. Numeric types are specified as short, long, long long, float, and double corresponding to 16-bit integer, 32-bit integer, 64-bit integer, single-precision floating-point, and double-precision floating-point types respectively.
  4. Types specified as any may be any basic JSON type: string, number, boolean, or null.

Versioning

The Cartographic Information Model uses Semantic Versioning and this documentation corresponds to the current latest version: 3.4.0. The final version of the previous major release series (2.9.0) can be found at docs/v2/.

Licensing

See License

Contributing

You are invited to fork this repository to a public or private repository and to send Pull Requests suggest improvements or notify us of errors or omissions in this documentation. Creating a fork solely for this purpose does not constitute the creation and distribution of a derivative work. Please see our guidelines for contributing.