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:
- Layer files: CIMLayerDocument: A JSON document containing one of more layers representing data such as features from a feature class or raster.
- Map files: CIMMapDocument: A JSON document containing a collection of layers and display properties for 2D maps or 3D scenes. Maps and scenes in the CIM are represented by the CIMMap object. There are not separate object types and maps and scenes are instead differentiated by the
mapTypeproperty. Types of scenes, global and local, are differentiated by the
- Layout files: CIMLayoutDocument : A JSON document with a representation of a page (CIMLayout), its elements, and the maps and scenes on it for print of document export.
- Report files: CIMReportDocument: A JSON document representing a report (CIMReport), its elements, and the report specific
- Styles : A database with style items defining graphic objects like colors, colors schemes, and symbols used to draw a feature or layout graphic. These items are used in the definitions of layers, maps, scenes, and layouts but may also be stored on their own as items in styles where the JSON is written to a database field. See also An overview of symbols in the CIM.
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:
- 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.
- The Types document lists objects by their type for quick reference.
- Numeric types are specified as
doublecorresponding to 16-bit integer, 32-bit integer, 64-bit integer, single-precision floating-point, and double-precision floating-point types respectively.
- Types specified as
anymay be any basic JSON type:
The Cartographic Information Model uses Semantic Versioning and this documentation corresponds to version 2.4.0.
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.