2023-05-04 13:36:27 +00:00
---
slug: /en/sql-reference/functions/geo/polygons
sidebar_label: Polygons
title: "Functions for Working with Polygons"
---
## readWKTMultiPolygon
2023-05-04 13:43:01 +00:00
Converts a WKT (Well Known Text) MultiPolygon into a MultiPolygon type.
2023-05-04 13:36:27 +00:00
### Example
``` sql
SELECT
toTypeName(readWKTMultiPolygon('MULTIPOLYGON(((2 0,10 0,10 10,0 10,2 0),(4 4,5 4,5 5,4 5,4 4)),((-10 -10,-10 -9,-9 10,-10 -10)))')) AS type,
readWKTMultiPolygon('MULTIPOLYGON(((2 0,10 0,10 10,0 10,2 0),(4 4,5 4,5 5,4 5,4 4)),((-10 -10,-10 -9,-9 10,-10 -10)))') AS output FORMAT Markdown
```
| type | output |
|:-|:-|
| MultiPolygon | [[[(2,0),(10,0),(10,10),(0,10),(2,0)],[(4,4),(5,4),(5,5),(4,5),(4,4)]],[[(-10,-10),(-10,-9),(-9,10),(-10,-10)]]] |
### Input parameters
String starting with `MULTIPOLYGON`
### Returned value
MultiPolygon
## readWKTPolygon
2023-05-04 13:43:01 +00:00
Converts a WKT (Well Known Text) MultiPolygon into a Polygon type.
2023-05-04 13:36:27 +00:00
### Example
``` sql
SELECT
toTypeName(readWKTPolygon('POLYGON((2 0,10 0,10 10,0 10,2 0))')) AS type,
readWKTPolygon('POLYGON((2 0,10 0,10 10,0 10,2 0))') AS output
FORMAT Markdown
```
| type | output |
|:-|:-|
| Polygon | [[(2,0),(10,0),(10,10),(0,10),(2,0)]] |
### Input parameters
String starting with `POLYGON`
### Returned value
Polygon
## polygonsWithinSpherical
2023-05-23 16:53:53 +00:00
Returns true or false depending on whether or not one polygon lies completely inside another polygon. Reference https://www.boost.org/doc/libs/1_62_0/libs/geometry/doc/html/geometry/reference/algorithms/within/within_2.html
2023-05-04 13:36:27 +00:00
### Example
``` sql
2023-05-04 16:47:39 +00:00
select polygonsWithinSpherical([[[(4.3613577, 50.8651821), (4.349556, 50.8535879), (4.3602419, 50.8435626), (4.3830299, 50.8428851), (4.3904543, 50.8564867), (4.3613148, 50.8651279)]]], [[[(4.346693, 50.858306), (4.367945, 50.852455), (4.366227, 50.840809), (4.344961, 50.833264), (4.338074, 50.848677), (4.346693, 50.858306)]]]);
2023-05-04 13:36:27 +00:00
```
```response
2023-05-04 16:47:39 +00:00
0
2023-05-04 13:36:27 +00:00
```
### Input parameters
### Returned value
UInt8, 0 for false, 1 for true
## polygonsDistanceSpherical
2023-05-23 16:53:53 +00:00
Calculates the minimal distance between two points where one point belongs to the first polygon and the second to another polygon. Spherical means that coordinates are interpreted as coordinates on a pure and ideal sphere, which is not true for the Earth. Using this type of coordinate system speeds up execution, but of course is not precise.
2023-05-04 13:36:27 +00:00
### Example
``` sql
SELECT polygonsDistanceSpherical([[[(0, 0), (0, 0.1), (0.1, 0.1), (0.1, 0)]]], [[[(10., 10.), (10., 40.), (40., 40.), (40., 10.), (10., 10.)]]])
```
```response
0.24372872211133834
```
### Input parameters
Two polygons
### Returned value
Float64
## polygonsDistanceCartesian
Calculates distance between two polygons
### Example
``` sql
SELECT polygonsDistanceCartesian([[[(0, 0), (0, 0.1), (0.1, 0.1), (0.1, 0)]]], [[[(10., 10.), (10., 40.), (40., 40.), (40., 10.), (10., 10.)]]])
```
```response
14.000714267493642
```
### Input parameters
Two polygons
### Returned value
Float64
## polygonsEqualsCartesian
Returns true if two polygons are equal
### Example
``` sql
SELECT polygonsEqualsCartesian([[[(1., 1.), (1., 4.), (4., 4.), (4., 1.)]]], [[[(1., 1.), (1., 4.), (4., 4.), (4., 1.), (1., 1.)]]])
```
```response
1
```
### Input parameters
Two polygons
### Returned value
UInt8, 0 for false, 1 for true
## polygonsSymDifferenceSpherical
2023-05-23 16:53:53 +00:00
Calculates the spatial set theoretic symmetric difference (XOR) between two polygons
2023-05-04 13:36:27 +00:00
### Example
``` sql
SELECT
```
```response
```
### Input parameters
### Returned value
## polygonsSymDifferenceCartesian
2023-05-23 16:53:53 +00:00
The same as `polygonsSymDifferenceSpherical` , but the coordinates are in the Cartesian coordinate system; which is more close to the model of the real Earth.
2023-05-04 13:36:27 +00:00
### Example
``` sql
SELECT
```
```response
```
### Input parameters
### Returned value
## polygonsIntersectionSpherical
2023-05-23 16:53:53 +00:00
Calculates the intersection (AND) between polygons, coordinates are spherical.
2023-05-04 13:36:27 +00:00
### Example
``` sql
SELECT
```
```response
```
### Input parameters
### Returned value
## polygonsWithinCartesian
Returns true if the second polygon is within the first polygon.
### Example
``` sql
SELECT polygonsWithinCartesian([[[(2., 2.), (2., 3.), (3., 3.), (3., 2.)]]], [[[(1., 1.), (1., 4.), (4., 4.), (4., 1.), (1., 1.)]]])
```
```response
1
```
### Input parameters
Two polygons
### Returned value
UInt8, 0 for false, 1 for true
## polygonConvexHullCartesian
2023-05-23 16:53:53 +00:00
Calculates a convex hull. [Reference ](https://www.boost.org/doc/libs/1_61_0/libs/geometry/doc/html/geometry/reference/algorithms/convex_hull.html )
Coordinates are in Cartesian coordinate system.
2023-05-04 13:36:27 +00:00
### Example
``` sql
SELECT
```
```response
```
### Input parameters
### Returned value
## polygonAreaSpherical
2023-05-23 16:53:53 +00:00
Calculates the surface area of a polygon.
2023-05-04 13:36:27 +00:00
### Example
``` sql
SELECT
```
```response
```
### Input parameters
### Returned value
2023-05-23 16:53:53 +00:00
MultiPolygon
2023-05-04 13:36:27 +00:00
## polygonsUnionSpherical
2023-05-23 16:53:53 +00:00
Calculates a union (OR).
2023-05-04 13:36:27 +00:00
### Example
``` sql
SELECT
```
```response
```
### Input parameters
### Returned value
## polygonPerimeterSpherical
Calculates
### Example
``` sql
SELECT
```
```response
```
### Input parameters
### Returned value
## polygonsIntersectionCartesian
Calculates
### Example
``` sql
SELECT
```
```response
```
### Input parameters
### Returned value
## polygonAreaCartesian
Calculates the area of a polygon
### Example
``` sql
SELECT polygonAreaCartesian([[[(0., 0.), (0., 5.), (5., 5.), (5., 0.)]]])
```
```response
25
```
### Input parameters
One polygon
### Returned value
Float64
## polygonPerimeterCartesian
Calculates
### Example
``` sql
SELECT polygonPerimeterCartesian([[[(0., 0.), (0., 5.), (5., 5.), (5., 0.)]]])
```
```response
15
```
### Input parameters
One polygon
### Returned value
Float64
## polygonsUnionCartesian
Calculates
### Example
``` sql
SELECT
```
```response
```
### Input parameters
### Returned value
2023-05-23 16:53:53 +00:00
For more information on geometry systems, see this [presentation ](https://archive.fosdem.org/2020/schedule/event/working_with_spatial_trajectories_in_boost_geometry/attachments/slides/3988/export/events/attachments/working_with_spatial_trajectories_in_boost_geometry/slides/3988/FOSDEM20_vissarion.pdf ) about the Boost library, which is what ClickHouse uses.