Geospatial Capabilities
OmniSci supports a subset of object types and functions for storing and writing queries for geospatial definitions.
When using GEO fields, you must set the SRID to define the reference system to use. OmniSci supports both 4326 and 900913. Unless a point is assigned an SRID, it remains unassigned, and you need to set the SRID in your SQL code.
See also:
Importing Geospatial Data
Geospatial Primitives
Type | Description | Example |
---|---|---|
POINT |
A point described by two coordinates. | POINT(0 0) |
LINESTRING |
A sequence of 2 or more points and the lines that connect them. | LINESTRING(0 0,1 1,1 2) |
POLYGON |
A set of one or more rings (closed line strings), with the first representing the shape (external ring) and the rest representing holes in that shape (internal rings). | POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)) |
MULTIPOLYGON |
A set of one or more polygons. | MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1))) |
For more information on WKT primitives, see Wikipedia: Well-known Text: Geometric objects.
OmniSci supports SRIDs 4326 and 900913. You can specify the SRID of your geometry field when creating the table:
create table simple_geo (name text encoding dict(32), pt geometry(point,4326));
If you did not set the SRID of your geo field in the table, you need to set it in your SQL code. The following query uses ST _DISTANCE, sets the SRID to 4326, and casts the geospatial point field as a geography to return the distance in meters:
select a.name, st_distance{(cast(st_setsrid(a.pt,4326) as geography),cast(st_setsrid(b.pt.4326) as geography)} as dist_meters from starting_point a, destination_points b;
If the SRID for both fields and tables in ST _DISTANCE is set, you do not need to use ST_ SETSRID, thereby simplifying the SQL code for returning distance:
select a.name, st_distance(cast(a.pt as geography),cast(b.pt as geography)) as dist_meters from starting_point a, destination_points b;You create geospatial objects as geometries (planar spatial data types), which are supported by the planar geometry engine at run time. When you call
ST_DISTANCE
on two geometry objects, the engine returns the shortest straight-line planar distance, in degrees, between those points. For example, the following query returns the shortest distance between the point(s) in p1 and the polygon(s) in poly1
:
SELECT ST_DISTANCE(p1, poly1) from geo1;
Calling ST_CONTAINS
returns whether the second geometry is contained in the first.
SELECT count(*) from geo1 where ST_CONTAINS(poly1, ‘POINT(0 0)’);
Geospatial Literals
Geospatial functions that expect geospatial object arguments accept geospatial columns, geospatial objects returned by other functions, or string literals containing WKT representations of geospatial objects. Supplying a WKT string is equivalent to calling a geometry constructor. For example, these two queries are identical:
SELECT count(*) from geo1 where ST_Distance(p1, ‘POINT(1 2)’) < 1.0; SELECT count(*) from geo1 where ST_Distance(p1, ST_GeomFromText(‘POINT(1 2)’));
Geospatial literals can be created with a specific SRID. For example:
SELECT ST_Contains(mpoly2, ST_GeomFromText(‘POINT(-71.064544 42.28787)’, 4326)) from geo2;
Limited Support for Geography
OmniSci has limited support for geography objects and geodesic distance calculations. Currently, OmniSci supports spheroidal distance calculation between two geography points. The ST_DISTANCE
function accepts two point geographies and returns distance in meters. To get geographic distance, cast the point as a geography from the default geometry. You
can use a special function or a geography literal. For example:
ST_Distance(CastToGeography(p2), ST_GeogFromText('POINT(2.5559 49.0083)', 4326))
Geospatial Functions
OmniSci supports the functions listed below.
Function | Description |
---|---|
ST_GeomFromText(WKT) |
Return a specified geometry value from Well-known Text representation. |
ST_GeogFromText(WKT) |
Return a specified geography value from Well-known Text representation. |
Function | Description |
---|---|
ST_Transform |
Returns a geometry with its coordinates transformed to a different spatial reference. Currently, WGS84 to Web Mercator transform is supported. For example:
ST_Distance( ST_Transform(ST_GeomFromText('POINT(-71.064544 42.28787)', 4326), 900913), ST_GeomFromText('POINT(-13189665.9329505 3960189.38265416)', 900913) ) |
ST_SetSRID | Set the SRID to a specific integer value. For example:
ST_Transform(ST_SetSRID(ST_GeomFromText('POINT(-71.064544 42.28787)'), 4326),900913) |