> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://ocient.ferndocs.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://ocient.ferndocs.com/_mcp/server.

# Polygon Constructors

> Construct and manage polygons in OcientGeo, suitable for representing complex spatial regions.

OcientGeo™ POLYGON constructors use geospatial data to create a POLYGON object.

# ST_FORCECCW

Creates a standardized polygon from an existing one. Ocient® defines standardized as the exterior being counterclockwise (CCW) and all holes being clockwise (CW) oriented.

**Syntax**

```sql
ST_FORCECCW(polygon)
```

| **Argument** | **Data** **Type** | **Description**                                                                                    |
| ------------ | ----------------- | -------------------------------------------------------------------------------------------------- |
| `polygon`    | `POLYGON`         | A `POLYGON` to be converted on its exterior counterclockwise and clockwise for any interior holes. |

**Example**

```sql
SELECT ST_FORCECCW(ST_POLYGON('POLYGON((0 0,0 1,1 1,1 0,0 0))'));
```

*Output*: `POLYGON((0 0,1 0,1 1,0 1,0 0))`

# ST_MAKEPOLYGON

Alias for [**ST_POLYGON**](#stpolygon).

# ST_POLYGON

Creates a `POLYGON`.

## ST_POLYGON(geo)

Creates a `POLYGON` from the specified `POINT`, `POINT` array, `LINESTRING`, or `POLYGON` geography.

**Syntax**

```sql
ST_POLYGON(geo)
```

| **Argument** | **Data** **Type** | **Description**                                                                                   |
| ------------ | ----------------- | ------------------------------------------------------------------------------------------------- |
| `geo`        | `POLYGON`         | A `POINT`, `POINT` array, `LINESTRING`, or `POLYGON` value to be converted to a `POLYGON` object. |

**Example**

```sql
SELECT ST_POLYGON(
        ST_LINESTRING(
            ST_POINT [](
                ST_POINT(1, 2),
                ST_POINT(1, 3),
                ST_POINT(1, 4),
                ST_POINT(1, 2))));
```

*Output*: `POLYGON((1 2,1 3,1 4,1 2))`

## ST_POLYGON(char)

Alias for ST_MAKEPOLYGON(char).

Creates a `POLYGON` from the specified `CHAR` representing a `POLYGON` in WKT format.

**Syntax**

```sql
ST_POLYGON(char)
```

| **Argument** | **Data** **Type**                                 | **Description**                                               |
| ------------ | ------------------------------------------------- | ------------------------------------------------------------- |
| `char`       | `CHAR` that represents a `POLYGON` in WKT format. | The `CHAR` argument must represent a `POLYGON` in WKT format. |

**Example**

```sql
SELECT ST_POLYGON('POLYGON((1 2,1 3,1 4,1 2))');
```

*Output*: `POLYGON((1 2,1 3,1 4,1 2))`

## ST_POLYGON(binary)

Alias for ST_POLYGONFROMWKB(binary).

Creates a `POLYGON` from the specified `BINARY`. The `BINARY` value must represent a `POLYGON` in WKB format.

**Syntax**

```sql
ST_POLYGON(binary)
```

| **Argument** | **Data** **Type**                                   | **Description**                                                                                                  |
| ------------ | --------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `binary`     | `BINARY` that represents a `POLYGON` in WKB format. | A `BINARY` argument to be converted to a `POLYGON`. The `BINARY` value must represent a `POLYGON` in WKB format. |

**Example**

```sql
SELECT ST_POLYGON(BINARY('0x01030000000100000005000000000000000000000000000000000000000000000000000000000000000000f03f000000000000f03f000000000000f03f000000000000f03f000000000000000000000000000000000000000000000000'));
```

*Output*: `POLYGON((0 0,0 1,1 1,1 0,0 0))`

## ST_POLYGON(outer_ring, inner_rings)

Alias for ST_MAKEPOLYGON(outerRing, innerRings).

Creates a `POLYGON` from the specified outer ring (that must be either a `POINT`, `POINT` array, or `LINESTRING`) and the array of interior rings (closed lines).

The interior of the `POLYGON` is on the left when traveling around the exterior ring. The interior of a hole is on the right when traveling around a hole.

**Syntax**

```sql
ST_POLYGON(outer_ring, inner_rings)
```

| **Argument**  | **Data** **Type**                                            | **Description**                                                                                                       |
| ------------- | ------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- |
| `outer_ring`  | `POINT`, `POINT` array, or `LINESTRING`                      | A `POINT`, `POINT` array, or `LINESTRING` that represents the outer ring of the `POLYGON` object.                     |
| `inner_rings` | `ARRAY` of `POINT` arrays, or `ARRAY` of `LINESTRING` values | An `ARRAY` of `POINT` arrays or `LINESTRING` values that represents the inner rings or holes in the `POLYGON` object. |

**Example**

```sql
SELECT ST_POLYGON(
        ST_LINESTRING(ST_POINT [](ST_POINT(1, 2))),
        ST_LINESTRING [](ST_LINESTRING(ST_POINT [](ST_POINT(1, 2)))));
```

*Output*: `POLYGON((1.000000 2.000000), (1.000000 2.000000))`

# ST_POLYGONFROMWKB

Alias for [**ST_POLYGON(binary)**](#stpolygonbinary).

# ST_POLYGONFROMEWKT

Alias for the [**ST_POLYGON**](#stpolygon) constructor.

Creates a `POLYGON` using an EWKT-formatted `CHAR` as an input argument.

**Syntax**

```sql
ST_POLYGONFROMEWKT(char)
```

| **Argument** | **Data** **Type** | **Description**                                                                                                                                                                                                                                                                                                                                           |
| ------------ | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `char`       | `CHAR`            | A string that includes an SRID value and an EWKT-formatted value that represents a `POLYGON`. Separate the values in the string by a semicolon in this format: `'SRID = value; polygon_value'` The input string must include the `SRID = value;` component. However, the database ignores this component as all Ocient geography types are `SRID = 4326`. |

**Example**

```sql
SELECT ST_POLYGONFROMEWKT('SRID=4326;POLYGON((1 2,1 3,1 4,1 2))');
```

*Output*: `POLYGON((1 2,1 3,1 4,1 2))`

# ST_POLYGONFROMGEOJSON

Creates a `POLYGON` represented by the specified GeoJSON value as an input argument.

**Syntax**

```sql
ST_POLYGONFROMGEOJSON(geojson [, geodesic ] )
```

| **Argument** | **Data** **Type** | **Description**                                                                                                                                                                                                                                                                                                                                                                               |
| ------------ | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `geo_json`   | `STRING`          | A string of a GeoJSON. Valid GeoJSON formats follow IETF®[**standards**](https://datatracker.ietf.org/doc/rfc7946/), which you can generate using the [**ST_ASGEOJSON**](/guides/sql-reference/geospatial-functions/conversion-functions)  function. If you specify an invalid GeoJSON, the behavior of the function is undefined. The function returns NULL if any argument is a NULL value. |
| `geodesic`   | `BOOLEAN`         | Optional. If you specify `geodesic` as `TRUE`, the function adds points to the resulting `POLYGON` such that it remains within 10 meters of the original planar polygon. If you do not specify this argument, the value defaults to `FALSE`.                                                                                                                                                  |

**Examples**

In this example, the function produces an empty `POLYGON` value from the GeoJSON representation.

```sql
SELECT ST_POLYGONFROMGEOJSON('{"type":"Polygon","coordinates":[]}',false);
```

*Output*: `POLYGON EMPTY`

In this example, the function produces a `POLYGON` value from the GeoJSON representation.

```sql
SELECT ST_POLYGONFROMGEOJSON(
        '{"type":"Polygon","coordinates":[[[1,1],[1,5],[5,5],[5,1]]]}',
        false);
```

*Output*: `POLYGON((1 1, 1 5, 5 5, 5 1))`

# ST_POLYGONFROMTEXT

Alias for [**ST_POLYGON(char)**](#stpolygonchar).

# ST_WHOLEEARTH

Returns the database internal representation of the whole earth polygon. The [**ST_ENVELOPE**](/guides/sql-reference/geospatial-functions/spatial-operators) function returns this `POLYGON` value, with the envelope set as the entire earth.

GIS specifications do not describe a canonical polygon for the whole earth, but this value serves as the Ocient-canonical polygon. The whole earth polygon is also equivalent to `ST_POLYGON('POLYGON((0 0,0 0,0 0,0 0')))`, which can have a separate meaning in other GIS implementations.

**Syntax**

```sql
ST_WHOLEEARTH()
```

**Example**

```sql
SELECT ST_WHOLEEARTH();
```

*Output*: `POLYGON((0.0 0.0, 0.0 0.0, 0.0 0.0, 0.0 0.0))`

# Related Links

[**Geospatial Data Types**](/guides/sql-reference/data-types)

[**Conversion Functions**](/guides/sql-reference/geospatial-functions/conversion-functions)