SurrealDB makes working with GeoJSON easy, with support for Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon, and Collection values. SurrealQL automatically detects GeoJSON objects converting them into a single data type.
| Type | Description |
|---|---|
Point | A geolocation point with latitude and longitude |
LineString | A GeoJSON LineString value for storing a geometric path |
Polygon | A GeoJSON Polygon value for storing a geometric area |
MultiPoint | A value which contains multiple geometry points |
MultiLineString | A value which contains multiple geometry lines |
MultiPolygon | A value which contains multiple geometry polygons |
Collection | A value which contains multiple different geometry types |
PointThe simplest form of GeoJSON that SurrealDB supports is a geolocation point. These can be written using two different formats. The first format is a simple 2-element tuple (latitude, longitude).
UPDATE city:london SET centre = (-0.118092, 51.509865);
In addition, SurrealDB supports entering GeoJSON points using the traditional format.
NoteNo other properties must be present in the Point object.
UPDATE city:london SET centre = { type: "Point", coordinates: [-0.118092, 51.509865], };
LineStringA GeoJSON LineString value for storing a geometric path.
NoteNo other properties must be present in the LineString object.
UPDATE city:london SET distance = { type: "LineString", coordinates: [[-0.118092, 51.509865],[0.1785278, 51.37692386]], };
PolygonA GeoJSON Polygon value for storing a geometric area.
NoteNo other properties must be present in the Polygon object.
UPDATE city:london SET boundary = { type: "Polygon", coordinates: [[ [-0.38314819, 51.37692386], [0.1785278, 51.37692386], [0.1785278, 51.61460570], [-0.38314819, 51.61460570], [-0.38314819, 51.37692386] ]] };
MultiPointMultiPoints can be used to store multiple geometry points in a single value.
NoteNo other properties must be present in the MultiPoint object.
UPDATE person:tobie SET locations = { type: "MultiPoint", coordinates: [ [10.0, 11.2], [10.5, 11.9] ], };
MultiLineStringA MultiLineString can be used to store multiple geometry lines in a single value.
NoteNo other properties must be present in the MultiLineString object.
UPDATE travel:yellowstone SET routes = { type: "MultiLineString", coordinates: [ [ [10.0, 11.2], [10.5, 11.9] ], [ [11.0, 12.2], [11.5, 12.9], [12.0, 13.0] ] ] }
MultiPolygonMultiPolygons can be used to store multiple geometry polygons in a single value.
NoteNo other properties must be present in the MultiPolygon object.
UPDATE university:oxford SET locations = { type: "MultiPolygon", coordinates: [ [ [ [10.0, 11.2], [10.5, 11.9], [10.8, 12.0], [10.0, 11.2] ] ], [ [ [9.0, 11.2], [10.5, 11.9], [10.3, 13.0], [9.0, 11.2] ] ] ] };
CollectionCollections can be used to store multiple different geometry types in a single value.
NoteNo other properties must be present in the Collection object.
UPDATE university:oxford SET buildings = { type: "GeometryCollection", geometries: [ { type: "MultiPoint", coordinates: [ [10.0, 11.2], [10.5, 11.9] ], }, { type: "Polygon", coordinates: [[ [-0.38314819, 51.37692386], [0.1785278, 51.37692386], [0.1785278, 51.61460570], [-0.38314819, 51.61460570], [-0.38314819, 51.37692386] ]] }, { type: "MultiPolygon", coordinates: [ [ [ [10.0, 11.2], [10.5, 11.9], [10.8, 12.0], [10.0, 11.2] ] ], [ [ [9.0, 11.2], [10.5, 11.9], [10.3, 13.0], [9.0, 11.2] ] ] ] } ] };
You’ve now seen how to use geometries to store locations, paths, and polygonal areas in SurrealDB. For more advanced functionality, take a look at the operators and geo functions, which enable area, distance, and bearing geometric calculations, and the ability to detect whether geometries contain or intersect other geometry types.