﻿---
title: ES|QL ST_SYMDIFFERENCE function
description: 
url: https://www.elastic.co/elastic/docs-builder/docs/3562/reference/query-languages/esql/functions-operators/spatial-functions/st_symdifference
products:
  - Elasticsearch
---

# ES|QL ST_SYMDIFFERENCE function
<applies-to>
  - Elastic Cloud Serverless: Preview
  - Elastic Stack: Planned
</applies-to>

Returns the symmetric difference of two geometries.

## Syntax

![Embedded](https://www.elastic.co/elastic/docs-builder/docs/3562/reference/query-languages/esql/images/generated/x-pack-esql/functions/st_symdifference.svg)


## Parameters

<definitions>
  <definition term="geomA">
    Expression of type `geo_point`, `geo_shape`, `cartesian_point` or `cartesian_shape`. If `null`, the function returns `null`.
  </definition>
  <definition term="geomB">
    Expression of type `geo_point`, `geo_shape`, `cartesian_point` or `cartesian_shape`. Must share the same coordinate reference system as the first parameter. If `null`, the function returns `null`.
  </definition>
</definitions>


## Description

Returns the symmetric difference of two geometries, that is the parts of each geometry that are not shared by both. This is equivalent to the union of the two differences: `ST_UNION(ST_DIFFERENCE(geomA, geomB), ST_DIFFERENCE(geomB, geomA))`. Both geometries must share the same coordinate reference system.

## Supported types


| geomA           | geomB           | result          |
|-----------------|-----------------|-----------------|
| cartesian_point | cartesian_point | cartesian_shape |
| cartesian_point | cartesian_shape | cartesian_shape |
| cartesian_shape | cartesian_point | cartesian_shape |
| cartesian_shape | cartesian_shape | cartesian_shape |
| geo_point       | geo_point       | geo_shape       |
| geo_point       | geo_shape       | geo_shape       |
| geo_shape       | geo_point       | geo_shape       |
| geo_shape       | geo_shape       | geo_shape       |


## Example

```esql
ROW a = TO_GEOSHAPE("POLYGON ((0 0, 3 0, 3 3, 0 3, 0 0))"),
    b = TO_GEOSHAPE("POLYGON ((1 1, 4 1, 4 4, 1 4, 1 1))")
| EVAL symdiff = ST_SYMDIFFERENCE(a, b)
| KEEP symdiff
```


| symdiff:geo_shape                                                                                                                                   |
|-----------------------------------------------------------------------------------------------------------------------------------------------------|
| MULTIPOLYGON (((3.0 1.0, 3.0 0.0, 0.0 0.0, 0.0 3.0, 1.0 3.0, 1.0 1.0, 3.0 1.0)), ((3.0 1.0, 3.0 3.0, 1.0 3.0, 1.0 4.0, 4.0 4.0, 4.0 1.0, 3.0 1.0))) |


### Diagrams

**Symmetric difference of two overlapping polygons**
The symmetric difference includes the parts of each polygon that are not shared by both.
![Symmetric difference of two overlapping polygons](https://www.elastic.co/elastic/docs-builder/docs/3562/reference/query-languages/esql/images/generated/x-pack-esql/functions/st_symdifference_symdifference.svg)