Geometry
A geometry follows the GeoJSON format, with the rules below on top.
The geometry type is Point, MultiPoint, LineString, MultiLineString, Polygon or MultiPolygon, matched case-sensitively. GeometryCollection is refused.
A position holds two or three numbers. Longitude falls in [-180, 180] and latitude in [-90, 90], checked on the double each number is held as (see Precision). Non-finite ordinates are refused, and so is a geometry that mixes positions of two and three ordinates (see Altitude).
A LineString holds at least two positions. A Polygon ring holds at least four and is closed, which means its last position equals its first, altitude included.
A bbox holds four or six numbers, and its corners follow the position rules.
A geometry written as a JSON string must be valid JSON, and the same rules then apply to it.
These rules bind GeoProperty values only. A GeoJSON object written as the value of a Property, as a ListProperty item or as a member of a structured value is ordinary JSON. It isn't checked, GeometryCollection is accepted, and its numbers are kept as written. An attribute with no stated type is read as a GeoProperty only when its value is a GeoJSON geometry, such as "area": {"type": "Point", "coordinates": [13, 52]}.
The same rules apply to the reference geometry of a query, to a subscription's geoQ and to a registration.