blob: 5dd5fefc525eccae6cdc7fe6e4250fec286c9ded [file] [log] [blame] [view]
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
!!!note
Please always keep the schema name `SEDONA` (e.g., `SEDONA.ST_GeomFromWKT`) when you use Sedona functions to avoid conflicting with Snowflake's built-in functions.
## ST_Contains
Introduction: Return true if A fully contains B
Format: `ST_Contains (A:geometry, B:geometry)`
SQL example:
```sql
SELECT *
FROM pointdf
WHERE ST_Contains(ST_PolygonFromEnvelope(1.0,100.0,1000.0,1100.0), pointdf.arealandmark)
```
## ST_Crosses
Introduction: Return true if A crosses B
Format: `ST_Crosses (A:geometry, B:geometry)`
SQL example:
```sql
SELECT *
FROM pointdf
WHERE ST_Crosses(pointdf.arealandmark, ST_PolygonFromEnvelope(1.0,100.0,1000.0,1100.0))
```
## ST_Disjoint
Introduction: Return true if A and B are disjoint
Format: `ST_Disjoint (A:geometry, B:geometry)`
SQL example:
```sql
SELECT *
FROM geom
WHERE ST_Disjoinnt(geom.geom_a, geom.geom_b)
```
## ST_DWithin
Introduction: Returns true if 'leftGeometry' and 'rightGeometry' are within a specified 'distance'. This function essentially checks if the shortest distance between the envelope of the two geometries is <= the provided distance.
Format: `ST_DWithin (leftGeometry: Geometry, rightGeometry: Geometry, distance: Double)`
SQL Example:
```sql
SELECT ST_DWithin(ST_GeomFromWKT('POINT (0 0)'), ST_GeomFromWKT('POINT (1 0)'), 2.5)
```
Output:
```
true
```
## ST_Equals
Introduction: Return true if A equals to B
Format: `ST_Equals (A:geometry, B:geometry)`
SQL example:
```sql
SELECT *
FROM pointdf
WHERE ST_Equals(pointdf.arealandmark, ST_PolygonFromEnvelope(1.0,100.0,1000.0,1100.0))
```
## ST_Intersects
Introduction: Return true if A intersects B
Format: `ST_Intersects (A:geometry, B:geometry)`
SQL example:
```sql
SELECT *
FROM pointdf
WHERE ST_Intersects(ST_PolygonFromEnvelope(1.0,100.0,1000.0,1100.0), pointdf.arealandmark)
```
## ST_OrderingEquals
Introduction: Returns true if the geometries are equal and the coordinates are in the same order
Format: `ST_OrderingEquals(A: geometry, B: geometry)`
SQL example 1:
```sql
SELECT ST_OrderingEquals(ST_GeomFromWKT('POLYGON((2 0, 0 2, -2 0, 2 0))'), ST_GeomFromWKT('POLYGON((2 0, 0 2, -2 0, 2 0))'))
```
Output: `true`
SQL example 2:
```sql
SELECT ST_OrderingEquals(ST_GeomFromWKT('POLYGON((2 0, 0 2, -2 0, 2 0))'), ST_GeomFromWKT('POLYGON((0 2, -2 0, 2 0, 0 2))'))
```
Output: `false`
## ST_Overlaps
Introduction: Return true if A overlaps B
Format: `ST_Overlaps (A:geometry, B:geometry)`
SQL example:
```sql
SELECT *
FROM geom
WHERE ST_Overlaps(geom.geom_a, geom.geom_b)
```
## ST_Relate
Introduction: The first variant of the function computes and returns the [Dimensionally Extended 9-Intersection Model (DE-9IM)](https://en.wikipedia.org/wiki/DE-9IM) matrix string representing the spatial relationship between the two input geometry objects.
The second variant of the function evaluates whether the two input geometries satisfy a specific spatial relationship defined by the provided `intersectionMatrix` pattern.
!!!Note
It is important to note that this function is not optimized for use in spatial join operations. Certain DE-9IM relationships can hold true for geometries that do not intersect or are disjoint. As a result, it is recommended to utilize other dedicated spatial functions specifically optimized for spatial join processing.
Format:
`ST_Relate(geom1: Geometry, geom2: Geometry)`
`ST_Relate(geom1: Geometry, geom2: Geometry, intersectionMatrix: String)`
SQL Example
```sql
SELECT ST_Relate(
ST_GeomFromWKT('LINESTRING (1 1, 5 5)'),
ST_GeomFromWKT('POLYGON ((3 3, 3 7, 7 7, 7 3, 3 3))')
)
```
Output:
```
1010F0212
```
SQL Example
```sql
SELECT ST_Relate(
ST_GeomFromWKT('LINESTRING (1 1, 5 5)'),
ST_GeomFromWKT('POLYGON ((3 3, 3 7, 7 7, 7 3, 3 3))'),
"1010F0212"
)
```
Output:
```
true
```
## ST_RelateMatch
Introduction: This function tests the relationship between two [Dimensionally Extended 9-Intersection Model (DE-9IM)](https://en.wikipedia.org/wiki/DE-9IM) matrices representing geometry intersections. It evaluates whether the DE-9IM matrix specified in `matrix1` satisfies the intersection pattern defined by `matrix2`. The `matrix2` parameter can be an exact DE-9IM value or a pattern containing wildcard characters.
!!!Note
It is important to note that this function is not optimized for use in spatial join operations. Certain DE-9IM relationships can hold true for geometries that do not intersect or are disjoint. As a result, it is recommended to utilize other dedicated spatial functions specifically optimized for spatial join processing.
Format: `ST_RelateMatch(matrix1: String, matrix2: String)`
SQL Example:
```sql
SELECT ST_RelateMatch('101202FFF', 'TTTTTTFFF')
```
Output:
```
true
```
## ST_Touches
Introduction: Return true if A touches B
Format: `ST_Touches (A:geometry, B:geometry)`
```sql
SELECT *
FROM pointdf
WHERE ST_Touches(pointdf.arealandmark, ST_PolygonFromEnvelope(1.0,100.0,1000.0,1100.0))
```
## ST_Within
Introduction: Return true if A is fully contained by B
Format: `ST_Within (A:geometry, B:geometry)`
SQL example:
```sql
SELECT *
FROM pointdf
WHERE ST_Within(pointdf.arealandmark, ST_PolygonFromEnvelope(1.0,100.0,1000.0,1100.0))
```
## ST_Covers
Introduction: Return true if A covers B
Format: `ST_Covers (A:geometry, B:geometry)`
SQL example:
```sql
SELECT *
FROM pointdf
WHERE ST_Covers(ST_PolygonFromEnvelope(1.0,100.0,1000.0,1100.0), pointdf.arealandmark)
```
## ST_CoveredBy
Introduction: Return true if A is covered by B
Format: `ST_CoveredBy (A:geometry, B:geometry)`
SQL example:
```sql
SELECT *
FROM pointdf
WHERE ST_CoveredBy(pointdf.arealandmark, ST_PolygonFromEnvelope(1.0,100.0,1000.0,1100.0))
```