C-squares

C-squares (acronym for the concise spatial query and representation system) is a system of geocodes (actually a type of global grid) that provides a basis for simple spatial indexing of geographic features or data. It was devised by Tony Rees of CSIRO Marine and Atmospheric Research (then "CSIRO Marine Research") in 2001-2, and described in the literature in 2003. The notation system of c-squares incorporates a compact encoding of latitude and longitude coordinates into a machine- and human-readable c-squares code, which can then be used either for spatial search or display via a suitable mapping application. The c-squares codes also provide an application- and vendor-independent, interoperable notation system for any gridded data whose units of organization correspond with steps of the c-squares hierarchy (e.g. 5-, 1-, 0.5 degree cells, etc.).

Rationale
According to the initial system description, c-squares was devised as an improved (more precise) method for expressing dataset geographic extents in searchable metadata catalogues, in place of (or in addition to) conventional bounding rectangle representations. The method is also useful as a generic, interoperable notation for gridded data (see above), for example a variety of datasets that describe environmental characteristics of global half-degree cells (see AquaMaps site). C-squares can also simply be used for mapping (example: CSIRO Marine and Atmospheric Research's "CAAB" application), although the most value is obtained when the system is used for spatial search as well (e.g. OBIS database, CMAR's "MarLIN" metadatabase, etc.).

Description
C-squares provides a hierarchical nomenclature for dividing 10°x10° World Meteorological Organization (WMO) squares into smaller units (each an individual "c-square") of 5°x5°, 1°x1°, 0.5°x0.5°, 0.1°x0.1°, etc., using an alternating base 2, base 5 linear division, as fine as may be required. Each cell of the resulting subdivision is allocated a unique alphanumeric identifier (c-squares code), such that the position of an object or objects on the surface of the Globe can be represented by a set of one or more such codes that define the cell(s) within which the object occurs. Storing these codes as text identifiers, for example in a database, repository of spatial metadata, searchable text file or web page, then offers the functionality for a simple, text-based spatial search, without the requirement for any more complex geographic information system (GIS). Once stored (or if desired, generated on-the-fly using a c-squares encoder), a code or set of codes can also be rendered on a map by a utility (for example, the web-accessible c-squares mapper) that incorporates the relevant decoding routines.

The actual assignment of the individual cell identifiers to vector objects whose position is expressed in latitude, longitude coordinates follows rules described in reference (1) and the c-squares website and can be automated via simple routines, and the reverse is also possible (decoding) in a straightforward manner. In addition, since the codes are hierarchical and interleaved (each "cycle" containing identifiers for both longitude and latitude, at progressively finer levels of resolution), only the relevant "leading" portion of a (for example) high resolution code need be interrogated to match a lower resolution spatial query.

Example c-squares codes
London, UK, occupies (for example) portions of four 0.5°x0.5° cells:
 * -0.5°W to 0°W, 51.5°N to 52.0°N
 * -0.5°W to 0°W, 51.0°N to 51.5°N
 * 0°E to 0.5°E, 51.5°N to 52.0°N
 * 0°E to 0.5°E, 51.0°N to 51.5°N

In c-squares notation these are cells 7500:110:3, 7500:110:1, 1500:110:3 and 1500:110:1 (at 0.5°x0.5° resolution). Alternatively at 1°x1° they are portions of two cells, 7500:110 and 1500:110; at 5°x5° resolution, portions of two cells 7500:1 and 1500:1; and at 10°x10° resolution, portions of 2 cells 7500 and 1500 (equivalent to the same identifiers as in WMO squares).

In a system that uses c-squares codes as units of spatial indexing, a text-based search on any of these square identifiers will retrieve data associated with the relevant square. If a wildcard search is supported (for example suppose that the wildcard character is a percent sign), a search on "7500%" will retrieve all data items in that ten degree square, a search on "7500:1%" will retrieve all data items in that five degree square, etc.

The asterisk character "*" has a special (reserved) meaning in c-squares notation, being a "compact" notation indicating that all finer cells within a higher level cell are included, to the level of resolution indicated by the number of asterisks. In the example above, "7500:*" would indicate that all 4 five-degree cells within parent ten-degree cell "7500" are filled, "7500:***" would indicate that all 100 one-degree cells within parent ten-degree cell "7500" are filled, etc. This approach enables the filling of contiguous blocks of cells with an economy of characters in many cases (a form of data compression), that is useful for efficient storage and transfer of c-squares codes as required.

Sample c-squares enabled systems
C-squares spatial indexing, search, and/or mapping routines are currently incorporated into OBIS, the Ocean Biogeographic Information System; FishBase; AquaMaps; and a variety of web-accessible applications at CSIRO Marine and Atmospheric Research. For a full list, see the link Sample c-squares enabled systems on the c-squares website.