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 longitude and latitude |
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 |
Point
NotePoints are defined according to the GeoJSON spec, which specificies longitude before latitude. Many sites provide location data in the opposite order, so be sure to confirm that any data being used to create a
Point
is in the order(longitude, latitude)
.
The 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 (longitude, latitude).
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], };
LineString
A GeoJSON LineString value for storing a geometric path.
NoteNo other properties must be present in the LineString object.
UPDATE city:london SET distance = { type: "Line", coordinates: [[-0.118092, 51.509865],[0.1785278, 51.37692386]], };
Polygon
A 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] ]] };
MultiPoint
MultiPoints 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] ], };
MultiLineString
A 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] ] ] }
MultiPolygon
MultiPolygons 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] ] ] ] };
Collection
Collections 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.