# quadbin

You can learn more about Quadbins in the [Spatial Indexes section](https://docs.carto.com/data-and-analysis/analytics-toolbox-for-bigquery/key-concepts/spatial-indexes#quadbin) of the documentation.

## QUADBIN\_BBOX <a href="#quadbin_bbox" id="quadbin_bbox"></a>

```sql
QUADBIN_BBOX(quadbin)
```

**Description**

Returns an array with the boundary box of a given Quadbin. This boundary box contains the minimum and maximum longitude and latitude. The output format is \[West-South, East-North] or \[min long, min lat, max long, max lat].

**Input parameters**

* `quadbin`: `INT64` Quadbin to get the bbox from.

**Return type**

`ARRAY<FLOAT64>`

**Example**

{% tabs %}
{% tab title="carto-un" %}

```sql
SELECT `carto-un`.carto.QUADBIN_BBOX(5207251884775047167);
-- -22.5
-- 21.943045533438188
-- 0.0
-- 40.979898069620127
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
SELECT `carto-un-eu`.carto.QUADBIN_BBOX(5207251884775047167);
-- -22.5
-- 21.943045533438188
-- 0.0
-- 40.979898069620127
```

{% endtab %}

{% tab title="manual" %}

```sql
SELECT carto.QUADBIN_BBOX(5207251884775047167);
-- -22.5
-- 21.943045533438188
-- 0.0
-- 40.979898069620127
```

{% endtab %}
{% endtabs %}

## QUADBIN\_BOUNDARY <a href="#quadbin_boundary" id="quadbin_boundary"></a>

```sql
QUADBIN_BOUNDARY(quadbin)
```

**Description**

Returns the boundary for a given Quadbin as a polygon GEOGRAPHY with the same coordinates as given by the [QUADBIN\_BBOX](#quadbin_bbox) function.

**Input parameters**

* `quadbin`: `INT64` Quadbin to get the boundary geography from.

**Return type**

`GEOGRAPHY`

**Example**

{% tabs %}
{% tab title="carto-un" %}

```sql
SELECT `carto-un`.carto.QUADBIN_BOUNDARY(5207251884775047167);
-- POLYGON((-22.5 40.9798980696201, -22.5 21.9430455334382, 0 21.9430455334382, 0 40.9798980696201, -22.5 40.9798980696201))
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
SELECT `carto-un-eu`.carto.QUADBIN_BOUNDARY(5207251884775047167);
-- POLYGON((-22.5 40.9798980696201, -22.5 21.9430455334382, 0 21.9430455334382, 0 40.9798980696201, -22.5 40.9798980696201))
```

{% endtab %}

{% tab title="manual" %}

```sql
SELECT carto.QUADBIN_BOUNDARY(5207251884775047167);
-- POLYGON((-22.5 40.9798980696201, -22.5 21.9430455334382, 0 21.9430455334382, 0 40.9798980696201, -22.5 40.9798980696201))
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
Quadbin Cell edges are spherical geodesics. The boundary edges can be interpreted as straight lines in other GIS tools, so to export the exact shape of the cells, use `ST_GEOGFROM(ST_ASGEOJSON(geog)`. In this process, BigQuery will add intermediate points to preserve the geodesic curves.
{% endhint %}

## QUADBIN\_CENTER <a href="#quadbin_center" id="quadbin_center"></a>

```sql
QUADBIN_CENTER(quadbin)
```

**Description**

Returns the center of a given Quadbin. The center is the intersection point of the four immediate children Quadbins.

**Input parameters**

* `quadbin`: `INT64` Quadbin to get the center from.

**Return type**

`GEOGRAPHY`

**Example**

{% tabs %}
{% tab title="carto-un" %}

```sql
SELECT `carto-un`.carto.QUADBIN_CENTER(5207251884775047167);
-- POINT(-11.25 31.952162238025)
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
SELECT `carto-un-eu`.carto.QUADBIN_CENTER(5207251884775047167);
-- POINT(-11.25 31.952162238025)
```

{% endtab %}

{% tab title="manual" %}

```sql
SELECT carto.QUADBIN_CENTER(5207251884775047167);
-- POINT(-11.25 31.952162238025)
```

{% endtab %}
{% endtabs %}

## QUADBIN\_DISTANCE <a href="#quadbin_distance" id="quadbin_distance"></a>

```sql
QUADBIN_DISTANCE(origin, destination)
```

**Description**

Returns the [Chebyshev distance](https://en.wikipedia.org/wiki/Chebyshev_distance) between two quadbin indexes. The origin and destination indices must have the same resolution. Otherwise `NULL` will be returned.

**Input parameters**

* `origin`: `INT64` origin quadbin index.
* `destination`: `INT64` destination quadbin index.

**Return type**

`INT64`

**Example**

{% tabs %}
{% tab title="carto-un" %}

```sql
SELECT `carto-un`.carto.QUADBIN_DISTANCE(5207251884775047167, 5207128739472736255);
-- 1
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
SELECT `carto-un-eu`.carto.QUADBIN_DISTANCE(5207251884775047167, 5207128739472736255);
-- 1
```

{% endtab %}

{% tab title="manual" %}

```sql
SELECT carto.QUADBIN_DISTANCE(5207251884775047167, 5207128739472736255);
-- 1
```

{% endtab %}
{% endtabs %}

## QUADBIN\_FROMGEOGPOINT <a href="#quadbin_fromgeogpoint" id="quadbin_fromgeogpoint"></a>

```sql
QUADBIN_FROMGEOGPOINT(point, resolution)
```

**Description**

Returns the Quadbin of a given point at a requested resolution. This function is an alias for `QUADBIN_FROMGEOPOINT`.

**Input parameters**

* `point`: `GEOGRAPHY` point to get the Quadbin from.
* `resolution`: `INT64` level of detail or zoom.

**Return type**

`INT64`

**Example**

{% tabs %}
{% tab title="carto-un" %}

```sql
SELECT `carto-un`.carto.QUADBIN_FROMGEOGPOINT(ST_GEOGPOINT(-3.7038, 40.4168), 4);
-- 5207251884775047167
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
SELECT `carto-un-eu`.carto.QUADBIN_FROMGEOGPOINT(ST_GEOGPOINT(-3.7038, 40.4168), 4);
-- 5207251884775047167
```

{% endtab %}

{% tab title="manual" %}

```sql
SELECT carto.QUADBIN_FROMGEOGPOINT(ST_GEOGPOINT(-3.7038, 40.4168), 4);
-- 5207251884775047167
```

{% endtab %}
{% endtabs %}

## QUADBIN\_FROMLONGLAT <a href="#quadbin_fromlonglat" id="quadbin_fromlonglat"></a>

```sql
QUADBIN_FROMLONGLAT(longitude, latitude, resolution)
```

**Description**

Returns the Quadbin representation of a point for a requested resolution and geographic coordinates.

**Input parameters**

* `longitude`: `FLOAT64` longitude (WGS84) of the point.
* `latitude`: `FLOAT64` latitude (WGS84) of the point.
* `resolution`: `INT64` level of detail or zoom.

**Return type**

`INT64`

**Example**

{% tabs %}
{% tab title="carto-un" %}

```sql
SELECT `carto-un`.carto.QUADBIN_FROMLONGLAT(-3.7038, 40.4168, 4);
-- 5207251884775047167
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
SELECT `carto-un-eu`.carto.QUADBIN_FROMLONGLAT(-3.7038, 40.4168, 4);
-- 5207251884775047167
```

{% endtab %}

{% tab title="manual" %}

```sql
SELECT carto.QUADBIN_FROMLONGLAT(-3.7038, 40.4168, 4);
-- 5207251884775047167
```

{% endtab %}
{% endtabs %}

## QUADBIN\_FROMQUADKEY <a href="#quadbin_fromquadkey" id="quadbin_fromquadkey"></a>

```sql
QUADBIN_FROMQUADKEY(quadkey)
```

**Description**

Compute a quadbin index from a quadkey.

**Input parameters**

* `quadkey`: `STRING` Quadkey representation of the index.

**Return type**

`INT64`

**Example**

{% tabs %}
{% tab title="carto-un" %}

```sql
SELECT `carto-un`.carto.QUADBIN_FROMQUADKEY('0331110121');
-- 5234261499580514303
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
SELECT `carto-un-eu`.carto.QUADBIN_FROMQUADKEY('0331110121');
-- 5234261499580514303
```

{% endtab %}

{% tab title="manual" %}

```sql
SELECT carto.QUADBIN_FROMQUADKEY('0331110121');
-- 5234261499580514303
```

{% endtab %}
{% endtabs %}

## QUADBIN\_FROMZXY <a href="#quadbin_fromzxy" id="quadbin_fromzxy"></a>

```sql
QUADBIN_FROMZXY(z, x, y)
```

**Description**

Returns a Quadbin from `z`, `x`, `y` [tile coordinates](https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames).

**Input parameters**

* `z`: `INT64` zoom level.
* `x`: `INT64` horizontal position of a tile.
* `y`: `INT64` vertical position of a tile.

**Constraints**

Tile coordinates `x` and `y` depend on the zoom level `z`. For both coordinates, the minimum value is 0, and the maximum value is two to the power of `z`, minus one (`2^z - 1`).

Note that the `y` coordinate increases from North to South, and the `y` coordinate from West to East.

**Return type**

`INT64`

**Example**

{% tabs %}
{% tab title="carto-un" %}

```sql
SELECT `carto-un`.carto.QUADBIN_FROMZXY(4, 7, 6);
-- 5207251884775047167
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
SELECT `carto-un-eu`.carto.QUADBIN_FROMZXY(4, 7, 6);
-- 5207251884775047167
```

{% endtab %}

{% tab title="manual" %}

```sql
SELECT carto.QUADBIN_FROMZXY(4, 7, 6);
-- 5207251884775047167
```

{% endtab %}
{% endtabs %}

## QUADBIN\_ISVALID <a href="#quadbin_isvalid" id="quadbin_isvalid"></a>

```sql
QUADBIN_ISVALID(quadbin)
```

**Description**

Returns `true` when the given index is a valid Quadbin, `false` otherwise.

**Input parameters**

* `quadbin`: `INT64` Quadbin index.

**Return type**

`BOOL`

**Examples**

{% tabs %}
{% tab title="carto-un" %}

```sql
SELECT `carto-un`.carto.QUADBIN_ISVALID(5207251884775047167);
-- TRUE
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
SELECT `carto-un-eu`.carto.QUADBIN_ISVALID(5207251884775047167);
-- TRUE
```

{% endtab %}

{% tab title="manual" %}

```sql
SELECT carto.QUADBIN_ISVALID(5207251884775047167);
-- TRUE
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="carto-un" %}

```sql
SELECT `carto-un`.carto.QUADBIN_ISVALID(1234);
-- FALSE
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
SELECT `carto-un-eu`.carto.QUADBIN_ISVALID(1234);
-- FALSE
```

{% endtab %}

{% tab title="manual" %}

```sql
SELECT carto.QUADBIN_ISVALID(1234);
-- FALSE
```

{% endtab %}
{% endtabs %}

## QUADBIN\_KRING <a href="#quadbin_kring" id="quadbin_kring"></a>

```sql
QUADBIN_KRING(origin, size)
```

**Description**

Returns all Quadbin cell indexes in a **filled square k-ring** centered at the origin in no particular order.

**Input parameters**

* `origin`: `INT64` Quadbin index of the origin.
* `size`: `INT64` size of the ring (distance from the origin).

**Return type**

`ARRAY<INT64>`

**Example**

{% tabs %}
{% tab title="carto-un" %}

```sql
SELECT `carto-un`.carto.QUADBIN_KRING(5207251884775047167, 1);
-- 5207128739472736255
-- 5207234292589002751
-- 5207269476961091583
-- 5207146331658780671
-- 5207251884775047167
-- 5207287069147135999
-- 5207902795658690559
-- 5208008348774957055
-- 5208043533147045887
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
SELECT `carto-un-eu`.carto.QUADBIN_KRING(5207251884775047167, 1);
-- 5207128739472736255
-- 5207234292589002751
-- 5207269476961091583
-- 5207146331658780671
-- 5207251884775047167
-- 5207287069147135999
-- 5207902795658690559
-- 5208008348774957055
-- 5208043533147045887
```

{% endtab %}

{% tab title="manual" %}

```sql
SELECT carto.QUADBIN_KRING(5207251884775047167, 1);
-- 5207128739472736255
-- 5207234292589002751
-- 5207269476961091583
-- 5207146331658780671
-- 5207251884775047167
-- 5207287069147135999
-- 5207902795658690559
-- 5208008348774957055
-- 5208043533147045887
```

{% endtab %}
{% endtabs %}

## QUADBIN\_KRING\_DISTANCES <a href="#quadbin_kring_distances" id="quadbin_kring_distances"></a>

```sql
QUADBIN_KRING_DISTANCES(origin, size)
```

**Description**

Returns all Quadbin cell indexes and their distances in a **filled square k-ring** centered at the origin in no particular order.

**Input parameters**

* `origin`: `INT64` Quadbin index of the origin.
* `size`: `INT64` size of the ring (distance from the origin).

**Return type**

`ARRAY<STRUCT<index INT64, distance INT64>>`

**Example**

{% tabs %}
{% tab title="carto-un" %}

```sql
SELECT `carto-un`.carto.QUADBIN_KRING_DISTANCES(5207251884775047167, 1);
-- {"index": "5207128739472736255", "distance": "1"}
-- {"index": "5207234292589002751", "distance": "1"}
-- {"index": "5207269476961091583", "distance": "1"}
-- {"index": "5207146331658780671", "distance": "1"}
-- {"index": "5207251884775047167", "distance": "0"}
-- {"index": "5207287069147135999", "distance": "1"}
-- {"index": "5207902795658690559", "distance": "1"}
-- {"index": "5208008348774957055", "distance": "1"}
-- {"index": "5208043533147045887", "distance": "1"}
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
SELECT `carto-un-eu`.carto.QUADBIN_KRING_DISTANCES(5207251884775047167, 1);
-- {"index": "5207128739472736255", "distance": "1"}
-- {"index": "5207234292589002751", "distance": "1"}
-- {"index": "5207269476961091583", "distance": "1"}
-- {"index": "5207146331658780671", "distance": "1"}
-- {"index": "5207251884775047167", "distance": "0"}
-- {"index": "5207287069147135999", "distance": "1"}
-- {"index": "5207902795658690559", "distance": "1"}
-- {"index": "5208008348774957055", "distance": "1"}
-- {"index": "5208043533147045887", "distance": "1"}
```

{% endtab %}

{% tab title="manual" %}

```sql
SELECT carto.QUADBIN_KRING_DISTANCES(5207251884775047167, 1);
-- {"index": "5207128739472736255", "distance": "1"}
-- {"index": "5207234292589002751", "distance": "1"}
-- {"index": "5207269476961091583", "distance": "1"}
-- {"index": "5207146331658780671", "distance": "1"}
-- {"index": "5207251884775047167", "distance": "0"}
-- {"index": "5207287069147135999", "distance": "1"}
-- {"index": "5207902795658690559", "distance": "1"}
-- {"index": "5208008348774957055", "distance": "1"}
-- {"index": "5208043533147045887", "distance": "1"}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
**tip**

The distance of the rings is computed as the [Chebyshev distance](https://en.wikipedia.org/wiki/Chebyshev_distance).
{% endhint %}

## QUADBIN\_POLYFILL <a href="#quadbin_polyfill" id="quadbin_polyfill"></a>

```sql
QUADBIN_POLYFILL(geog, resolution)
```

**Description**

Returns an array of quadbin cell indexes contained in the given geography (Polygon, MultiPolygon) at a requested resolution. Containment is determined by the cells' center. This function is equivalent to [`QUADBIN_POLYFILL_MODE`](#quadbin_polyfill_mode) with mode `center`.

**Input parameters**

* `geog`: `GEOGRAPHY` representing the shape to cover.
* `resolution`: `INT64` level of detail. The value must be between 0 and 26.

{% hint style="warning" %}
Use [`QUADBIN_POLYFILL_MODE`](#quadbin_polyfill_mode) with mode `intersects` in the following cases:

* You want to provide the minimum covering set of a Polygon, MultiPolygon.
* The input geography type is Point, MultiPoint, LineString, MultiLineString.
  {% endhint %}

**Return type**

`ARRAY<INT64>`

**Examples**

{% tabs %}
{% tab title="carto-un" %}

```sql
SELECT `carto-un`.carto.QUADBIN_POLYFILL(
  ST_GEOGFROMTEXT('POLYGON ((-3.71219873428345 40.413365349070865, -3.7144088745117 40.40965661286395, -3.70659828186035 40.409525904775634, -3.71219873428345 40.413365349070865))'),
  17
);
-- [5265786693163941887, 5265786693164466175 ,5265786693164728319]
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
SELECT `carto-un-eu`.carto.QUADBIN_POLYFILL(
  ST_GEOGFROMTEXT('POLYGON ((-3.71219873428345 40.413365349070865, -3.7144088745117 40.40965661286395, -3.70659828186035 40.409525904775634, -3.71219873428345 40.413365349070865))'),
  17
);
-- [5265786693163941887, 5265786693164466175 ,5265786693164728319]
```

{% endtab %}

{% tab title="manual" %}

```sql
SELECT carto.QUADBIN_POLYFILL(
  ST_GEOGFROMTEXT('POLYGON ((-3.71219873428345 40.413365349070865, -3.7144088745117 40.40965661286395, -3.70659828186035 40.409525904775634, -3.71219873428345 40.413365349070865))'),
  17
);
-- [5265786693163941887, 5265786693164466175 ,5265786693164728319]
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="carto-un" %}

```sql
SELECT quadbin
FROM UNNEST(`carto-un`.carto.QUADBIN_POLYFILL(
  ST_GEOGFROMTEXT('POLYGON ((-3.71219873428345 40.413365349070865, -3.7144088745117 40.40965661286395, -3.70659828186035 40.409525904775634, -3.71219873428345 40.413365349070865))'),
  17
)) AS quadbin;
-- 5265786693163941887
-- 5265786693164466175
-- 5265786693164728319
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
SELECT quadbin
FROM UNNEST(`carto-un-eu`.carto.QUADBIN_POLYFILL(
  ST_GEOGFROMTEXT('POLYGON ((-3.71219873428345 40.413365349070865, -3.7144088745117 40.40965661286395, -3.70659828186035 40.409525904775634, -3.71219873428345 40.413365349070865))'),
  17
)) AS quadbin;
-- 5265786693163941887
-- 5265786693164466175
-- 5265786693164728319
```

{% endtab %}

{% tab title="manual" %}

```sql
SELECT quadbin
FROM UNNEST(carto.QUADBIN_POLYFILL(
  ST_GEOGFROMTEXT('POLYGON ((-3.71219873428345 40.413365349070865, -3.7144088745117 40.40965661286395, -3.70659828186035 40.409525904775634, -3.71219873428345 40.413365349070865))'),
  17
)) AS quadbin;
-- 5265786693163941887
-- 5265786693164466175
-- 5265786693164728319
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="carto-un" %}

```sql
SELECT quadbin
FROM <my-project>.<my-dataset>.<my-table>,
  UNNEST(`carto-un`.carto.QUADBIN_POLYFILL(geog, 17)) AS quadbin;
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
SELECT quadbin
FROM <my-project>.<my-dataset>.<my-table>,
  UNNEST(`carto-un-eu`.carto.QUADBIN_POLYFILL(geog, 17)) AS quadbin;
```

{% endtab %}

{% tab title="manual" %}

```sql
SELECT quadbin
FROM <my-project>.<my-dataset>.<my-table>,
  UNNEST(carto.QUADBIN_POLYFILL(geog, 17)) AS quadbin;
```

{% endtab %}
{% endtabs %}

## QUADBIN\_POLYFILL\_MODE <a href="#quadbin_polyfill_mode" id="quadbin_polyfill_mode"></a>

```sql
QUADBIN_POLYFILL_MODE(geog, resolution, mode)
```

**Description**

Returns an array of quadbin cell indexes contained in the given geography at a requested resolution. Containment is determined by the mode: center, intersects, contains.

**Input parameters**

* `geog`: `GEOGRAPHY` representing the shape to cover.
* `resolution`: `INT64` level of detail. The value must be between 0 and 26.
* `mode`: `STRING`.
  * `center` returns the indexes of the quadbin cells which centers intersect the input geography (polygon). The resulting quadbin set does not fully cover the input geography, however, this is **significantly faster** that the other modes. This mode is not compatible with points or lines. Equivalent to [`QUADBIN_POLYFILL`](#quadbin_polyfill).
  * `intersects` returns the indexes of the quadbin cells that intersect the input geography. The resulting quadbin set will completely cover the input geography (point, line, polygon).
  * `contains` returns the indexes of the quadbin cells that are entirely contained inside the input geography (polygon). This mode is not compatible with points or lines.

Mode `center`:

<figure><img src="https://3029946802-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FybPdpmLltPkzGFvz7m8A%2Fuploads%2Fgit-blob-e0cebef0b9f847b59ca5b64f3a71b1f91b8be48d%2Fquadbin_polyfill_mode_center.png?alt=media&#x26;token=73bac93c-50c4-455e-bb28-15f93010fc90" alt=""><figcaption></figcaption></figure>

Mode `intersects`:

<figure><img src="https://3029946802-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FybPdpmLltPkzGFvz7m8A%2Fuploads%2Fgit-blob-8ba426b9db031b45fdf103d3168d46d7d2464052%2Fquadbin_polyfill_mode_intersects.png?alt=media&#x26;token=1c968bfc-2622-42dd-a433-0fcfb93bbdf8" alt=""><figcaption></figcaption></figure>

Mode `contains`:

<figure><img src="https://3029946802-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FybPdpmLltPkzGFvz7m8A%2Fuploads%2Fgit-blob-534b9d33c1f92dceff1fd1f94b46b44485908ba0%2Fquadbin_polyfill_mode_contains.png?alt=media&#x26;token=e0b6f46e-9d0d-44a1-aee4-86cb0751701f" alt=""><figcaption></figcaption></figure>

**Return type**

`ARRAY<INT64>`

**Examples**

{% tabs %}
{% tab title="carto-un" %}

```sql
SELECT `carto-un`.carto.QUADBIN_POLYFILL_MODE(
  ST_GEOGFROMTEXT('POLYGON ((-3.71219873428345 40.413365349070865, -3.7144088745117 40.40965661286395, -3.70659828186035 40.409525904775634, -3.71219873428345 40.413365349070865))'),
  17, 'intersects'
);
-- [5265786693153193983, 5265786693163941887, 5265786693164466175, 5265786693164204031, 5265786693164728319, 5265786693165514751]
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
SELECT `carto-un-eu`.carto.QUADBIN_POLYFILL_MODE(
  ST_GEOGFROMTEXT('POLYGON ((-3.71219873428345 40.413365349070865, -3.7144088745117 40.40965661286395, -3.70659828186035 40.409525904775634, -3.71219873428345 40.413365349070865))'),
  17, 'intersects'
);
-- [5265786693153193983, 5265786693163941887, 5265786693164466175, 5265786693164204031, 5265786693164728319, 5265786693165514751]
```

{% endtab %}

{% tab title="manual" %}

```sql
SELECT carto.QUADBIN_POLYFILL_MODE(
  ST_GEOGFROMTEXT('POLYGON ((-3.71219873428345 40.413365349070865, -3.7144088745117 40.40965661286395, -3.70659828186035 40.409525904775634, -3.71219873428345 40.413365349070865))'),
  17, 'intersects'
);
-- [5265786693153193983, 5265786693163941887, 5265786693164466175, 5265786693164204031, 5265786693164728319, 5265786693165514751]
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="carto-un" %}

```sql
SELECT quadbin
FROM UNNEST(`carto-un`.carto.QUADBIN_POLYFILL_MODE(
  ST_GEOGFROMTEXT('POLYGON ((-3.71219873428345 40.413365349070865, -3.7144088745117 40.40965661286395, -3.70659828186035 40.409525904775634, -3.71219873428345 40.413365349070865))'),
  17, 'intersects'
)) AS quadbin;
-- 5265786693153193983
-- 5265786693163941887
-- 5265786693164466175
-- 5265786693164204031
-- 5265786693164728319
-- 5265786693165514751
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
SELECT quadbin
FROM UNNEST(`carto-un-eu`.carto.QUADBIN_POLYFILL_MODE(
  ST_GEOGFROMTEXT('POLYGON ((-3.71219873428345 40.413365349070865, -3.7144088745117 40.40965661286395, -3.70659828186035 40.409525904775634, -3.71219873428345 40.413365349070865))'),
  17, 'intersects'
)) AS quadbin;
-- 5265786693153193983
-- 5265786693163941887
-- 5265786693164466175
-- 5265786693164204031
-- 5265786693164728319
-- 5265786693165514751
```

{% endtab %}

{% tab title="manual" %}

```sql
SELECT quadbin
FROM UNNEST(carto.QUADBIN_POLYFILL_MODE(
  ST_GEOGFROMTEXT('POLYGON ((-3.71219873428345 40.413365349070865, -3.7144088745117 40.40965661286395, -3.70659828186035 40.409525904775634, -3.71219873428345 40.413365349070865))'),
  17, 'intersects'
)) AS quadbin;
-- 5265786693153193983
-- 5265786693163941887
-- 5265786693164466175
-- 5265786693164204031
-- 5265786693164728319
-- 5265786693165514751
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="carto-un" %}

```sql
SELECT quadbin
FROM <my-project>.<my-dataset>.<my-table>,
  UNNEST(`carto-un`.carto.QUADBIN_POLYFILL_MODE(geog, 17, 'intersects')) AS quadbin;
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
SELECT quadbin
FROM <my-project>.<my-dataset>.<my-table>,
  UNNEST(`carto-un-eu`.carto.QUADBIN_POLYFILL_MODE(geog, 17, 'intersects')) AS quadbin;
```

{% endtab %}

{% tab title="manual" %}

```sql
SELECT quadbin
FROM <my-project>.<my-dataset>.<my-table>,
  UNNEST(carto.QUADBIN_POLYFILL_MODE(geog, 17, 'intersects')) AS quadbin;
```

{% endtab %}
{% endtabs %}

## QUADBIN\_POLYFILL\_TABLE (BETA) <a href="#quadbin_polyfill_table-beta" id="quadbin_polyfill_table-beta"></a>

```sql
QUADBIN_POLYFILL_TABLE(input_query, resolution, mode, output_table)
```

**Description**

Returns a table with the quadbin cell indexes contained in the given geography at a requested resolution. Containment is determined by the mode: center, intersects, contains. All the attributes except the geography will be included in the output table, clustered by the quadbin column.

**Input parameters**

* `input_query`: `STRING` input data to polyfill. It must contain a column `geom` with the shape to cover. Additionally, other columns can be included.
* `resolution`: `INT64` level of detail. The value must be between 0 and 26.
* `mode`: `STRING`.
  * `center` returns the indexes of the quadbin cells which centers intersect the input geography (polygon). The resulting quadbin set does not fully cover the input geography, however, this is **significantly faster** that the other modes. This mode is not compatible with points or lines. Equivalent to [`QUADBIN_POLYFILL`](#quadbin_polyfill).
  * `intersects` returns the indexes of the quadbin cells that intersect the input geography. The resulting quadbin set will completely cover the input geography (point, line, polygon).
  * `contains` returns the indexes of the quadbin cells that are entirely contained inside the input geography (polygon). This mode is not compatible with points or lines.
* `output_table`: `STRING` qualified name of the output table, e.g. `<my-project>.<my-dataset>.<my-output-table>`. The process will fail if the table already exists.

Mode `center`:

<figure><img src="https://3029946802-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FybPdpmLltPkzGFvz7m8A%2Fuploads%2Fgit-blob-e0cebef0b9f847b59ca5b64f3a71b1f91b8be48d%2Fquadbin_polyfill_mode_center.png?alt=media&#x26;token=73bac93c-50c4-455e-bb28-15f93010fc90" alt=""><figcaption></figcaption></figure>

Mode `intersects`:

<figure><img src="https://3029946802-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FybPdpmLltPkzGFvz7m8A%2Fuploads%2Fgit-blob-8ba426b9db031b45fdf103d3168d46d7d2464052%2Fquadbin_polyfill_mode_intersects.png?alt=media&#x26;token=1c968bfc-2622-42dd-a433-0fcfb93bbdf8" alt=""><figcaption></figcaption></figure>

Mode `contains`:

<figure><img src="https://3029946802-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FybPdpmLltPkzGFvz7m8A%2Fuploads%2Fgit-blob-534b9d33c1f92dceff1fd1f94b46b44485908ba0%2Fquadbin_polyfill_mode_contains.png?alt=media&#x26;token=e0b6f46e-9d0d-44a1-aee4-86cb0751701f" alt=""><figcaption></figcaption></figure>

**Output**

The results are stored in the table named `<my-output-table>`, which contains the following columns:

* `quadbin`: `INT64` the geometry of the considered point.
* The rest of columns included in `input_query` except `geom`.

**Examples**

{% tabs %}
{% tab title="carto-un" %}

```sql
CALL `carto-un`.carto.QUADBIN_POLYFILL_TABLE(
  "SELECT ST_GEOGFROMTEXT('POLYGON ((-3.71219873428345 40.413365349070865, -3.7144088745117 40.40965661286395, -3.70659828186035 40.409525904775634, -3.71219873428345 40.413365349070865))') AS geom",
  12, 'intersects',
  '<my-project>.<my-dataset>.<my-output-table>'
);
-- The table `<my-project>.<my-dataset>.<my-output-table>` will be created
-- with column: quadbin
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
CALL `carto-un-eu`.carto.QUADBIN_POLYFILL_TABLE(
  "SELECT ST_GEOGFROMTEXT('POLYGON ((-3.71219873428345 40.413365349070865, -3.7144088745117 40.40965661286395, -3.70659828186035 40.409525904775634, -3.71219873428345 40.413365349070865))') AS geom",
  12, 'intersects',
  '<my-project>.<my-dataset>.<my-output-table>'
);
-- The table `<my-project>.<my-dataset>.<my-output-table>` will be created
-- with column: quadbin
```

{% endtab %}

{% tab title="manual" %}

```sql
CALL carto.QUADBIN_POLYFILL_TABLE(
  "SELECT ST_GEOGFROMTEXT('POLYGON ((-3.71219873428345 40.413365349070865, -3.7144088745117 40.40965661286395, -3.70659828186035 40.409525904775634, -3.71219873428345 40.413365349070865))') AS geom",
  12, 'intersects',
  '<my-project>.<my-dataset>.<my-output-table>'
);
-- The table `<my-project>.<my-dataset>.<my-output-table>` will be created
-- with column: quadbin
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="carto-un" %}

```sql
CALL `carto-un`.carto.QUADBIN_POLYFILL_TABLE(
  'SELECT geom, name, value FROM `<my-project>.<my-dataset>.<my-table>`',
  12, 'center',
  '<my-project>.<my-dataset>.<my-output-table>'
);
-- The table `<my-project>.<my-dataset>.<my-output-table>` will be created
-- with columns: quadbin, name, value
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
CALL `carto-un-eu`.carto.QUADBIN_POLYFILL_TABLE(
  'SELECT geom, name, value FROM `<my-project>.<my-dataset>.<my-table>`',
  12, 'center',
  '<my-project>.<my-dataset>.<my-output-table>'
);
-- The table `<my-project>.<my-dataset>.<my-output-table>` will be created
-- with columns: quadbin, name, value
```

{% endtab %}

{% tab title="manual" %}

```sql
CALL carto.QUADBIN_POLYFILL_TABLE(
  'SELECT geom, name, value FROM `<my-project>.<my-dataset>.<my-table>`',
  12, 'center',
  '<my-project>.<my-dataset>.<my-output-table>'
);
-- The table `<my-project>.<my-dataset>.<my-output-table>` will be created
-- with columns: quadbin, name, value
```

{% endtab %}
{% endtabs %}

## QUADBIN\_RESOLUTION <a href="#quadbin_resolution" id="quadbin_resolution"></a>

```sql
QUADBIN_RESOLUTION(quadbin)
```

**Description**

Returns the resolution of the input Quadbin.

**Input parameters**

* `quadbin`: `INT64` Quadbin from which to get the resolution.

**Return type**

`INT64`

**Example**

{% tabs %}
{% tab title="carto-un" %}

```sql
SELECT `carto-un`.carto.QUADBIN_RESOLUTION(5207251884775047167);
-- 4
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
SELECT `carto-un-eu`.carto.QUADBIN_RESOLUTION(5207251884775047167);
-- 4
```

{% endtab %}

{% tab title="manual" %}

```sql
SELECT carto.QUADBIN_RESOLUTION(5207251884775047167);
-- 4
```

{% endtab %}
{% endtabs %}

## QUADBIN\_SIBLING <a href="#quadbin_sibling" id="quadbin_sibling"></a>

```sql
QUADBIN_SIBLING(quadbin, direction)
```

**Description**

Returns the Quadbin directly next to the given Quadbin at the same resolution. The direction must be set in the corresponding argument and currently only horizontal/vertical neigbours are supported. It will return `NULL` if the sibling does not exist.

**Input parameters**

* `quadbin`: `INT64` Quadbin to get the sibling from.
* `direction`: `STRING` `'right'|'left'|'up'|'down'` direction to move in to extract the next sibling.

**Return type**

`INT64`

**Example**

{% tabs %}
{% tab title="carto-un" %}

```sql
SELECT `carto-un`.carto.QUADBIN_SIBLING(5207251884775047167, 'up');
-- 5207146331658780671
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
SELECT `carto-un-eu`.carto.QUADBIN_SIBLING(5207251884775047167, 'up');
-- 5207146331658780671
```

{% endtab %}

{% tab title="manual" %}

```sql
SELECT carto.QUADBIN_SIBLING(5207251884775047167, 'up');
-- 5207146331658780671
```

{% endtab %}
{% endtabs %}

## QUADBIN\_TOCHILDREN <a href="#quadbin_tochildren" id="quadbin_tochildren"></a>

```sql
QUADBIN_TOCHILDREN(quadbin, resolution)
```

**Description**

Returns an array with the children Quadbins of a given Quadbin for a specific resolution. A children Quadbin is a Quadbin of higher level of detail that is contained by the current Quadbin. Each Quadbin has four direct children (at the next higher resolution).

**Input parameters**

* `quadbin`: `INT64` Quadbin to get the children from.
* `resolution`: `INT64` resolution of the desired children.

**Return type**

`ARRAY<INT64>`

**Example**

{% tabs %}
{% tab title="carto-un" %}

```sql
SELECT `carto-un`.carto.QUADBIN_TOCHILDREN(5207251884775047167, 5);
-- 5211742290262884351
-- 5211751086355906559
-- 5211746688309395455
-- 5211755484402417663
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
SELECT `carto-un-eu`.carto.QUADBIN_TOCHILDREN(5207251884775047167, 5);
-- 5211742290262884351
-- 5211751086355906559
-- 5211746688309395455
-- 5211755484402417663
```

{% endtab %}

{% tab title="manual" %}

```sql
SELECT carto.QUADBIN_TOCHILDREN(5207251884775047167, 5);
-- 5211742290262884351
-- 5211751086355906559
-- 5211746688309395455
-- 5211755484402417663
```

{% endtab %}
{% endtabs %}

## QUADBIN\_TOPARENT <a href="#quadbin_toparent" id="quadbin_toparent"></a>

```sql
QUADBIN_TOPARENT(quadbin, resolution)
```

**Description**

Returns the parent (ancestor) Quadbin of a given Quadbin for a specific resolution. An ancestor of a given Quadbin is a Quadbin of smaller resolution that spatially contains it.

**Input parameters**

* `quadbin`: `INT64` Quadbin to get the parent from.
* `resolution`: `INT64` resolution of the desired parent.

**Return type**

`INT64`

**Example**

{% tabs %}
{% tab title="carto-un" %}

```sql
SELECT `carto-un`.carto.QUADBIN_TOPARENT(5207251884775047167, 3);
-- 5202783469519765503
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
SELECT `carto-un-eu`.carto.QUADBIN_TOPARENT(5207251884775047167, 3);
-- 5202783469519765503
```

{% endtab %}

{% tab title="manual" %}

```sql
SELECT carto.QUADBIN_TOPARENT(5207251884775047167, 3);
-- 5202783469519765503
```

{% endtab %}
{% endtabs %}

## QUADBIN\_TOQUADKEY <a href="#quadbin_toquadkey" id="quadbin_toquadkey"></a>

```sql
QUADBIN_TOQUADKEY(quadbin)
```

**Description**

Compute a quadkey from a quadbin index.

**Input parameters**

* `quadbin`: `INT64` Quadbin index.

**Return type**

`STRING`

**Example**

{% tabs %}
{% tab title="carto-un" %}

```sql
SELECT `carto-un`.carto.QUADBIN_TOQUADKEY(5234261499580514303);
-- '0331110121'
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
SELECT `carto-un-eu`.carto.QUADBIN_TOQUADKEY(5234261499580514303);
-- '0331110121'
```

{% endtab %}

{% tab title="manual" %}

```sql
SELECT carto.QUADBIN_TOQUADKEY(5234261499580514303);
-- '0331110121'
```

{% endtab %}
{% endtabs %}

## QUADBIN\_TOZXY <a href="#quadbin_tozxy" id="quadbin_tozxy"></a>

```sql
QUADBIN_TOZXY(quadbin)
```

**Description**

Returns the zoom level `z` and coordinates `x`, `y` for a given Quadbin.

**Input parameters**

* `quadbin`: `INT64` Quadbin from which to obtain the coordinates.

**Return type**

`STRUCT<INT64, INT64, INT64>`

**Example**

{% tabs %}
{% tab title="carto-un" %}

```sql
SELECT `carto-un`.carto.QUADBIN_TOZXY(5207251884775047167);
-- z  x  y
-- 4  7  6
```

{% endtab %}

{% tab title="carto-un-eu" %}

```sql
SELECT `carto-un-eu`.carto.QUADBIN_TOZXY(5207251884775047167);
-- z  x  y
-- 4  7  6
```

{% endtab %}

{% tab title="manual" %}

```sql
SELECT carto.QUADBIN_TOZXY(5207251884775047167);
-- z  x  y
-- 4  7  6
```

{% endtab %}
{% endtabs %}

<img src="https://3029946802-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FybPdpmLltPkzGFvz7m8A%2Fuploads%2Fgit-blob-1c82685e4e434438152a8e3d867df996413489fe%2Feu-flag-website.png?alt=media&#x26;token=4343f6e5-973a-4e9a-8e14-50366a086f72" alt="EU flag" data-size="line">This project has received funding from the [European Union’s Horizon 2020](https://ec.europa.eu/programmes/horizon2020/en) research and innovation programme under grant agreement No 960401.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.carto.com/data-and-analysis/analytics-toolbox-for-bigquery/sql-reference/quadbin.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
