---
title: Filter geo-temporal data by region
description: Use the geo.filterRows function to filter geo-temporal data by box-shaped, circular, or polygonal geographic regions.
url: https://docs.influxdata.com/influxdb/cloud/query-data/flux/geo/filter-by-region/
estimated_tokens: 758
product: InfluxDB Cloud (TSM)
version: cloud
publisher: InfluxData
canonical: https://docs.influxdata.com/influxdb/cloud/query-data/flux/geo/filter-by-region/
date: '2025-04-02T15:54:32-06:00'
lastmod: '2025-04-02T15:54:32-06:00'
---

Use the [`geo.filterRows` function](/flux/v0/stdlib/experimental/geo/filterrows/)to filter geo-temporal data by geographic region:

1. [Define a geographic region](#define-a-geographic-region)
2. [Use strict or non-strict filtering](#strict-and-non-strict-filtering)

The following example uses the [sample bird migration data](/influxdb/cloud/query-data/flux/geo/#sample-data)and queries data points **within 200km of Cairo, Egypt**:

```js
import "experimental/geo"

sampleGeoData
    |> geo.filterRows(region: {lat: 30.04, lon: 31.23, radius: 200.0}, strict: true)
```

## Define a geographic region

Many functions in the Geo package filter data based on geographic region.
Define a geographic region using one of the the following shapes:

* [box](#box)
* [circle](#circle)
* [polygon](#polygon)

### box

Define a box-shaped region by specifying a record containing the following properties:

* **minLat:** minimum latitude in decimal degrees (WGS 84) *(Float)*
* **maxLat:** maximum latitude in decimal degrees (WGS 84) *(Float)*
* **minLon:** minimum longitude in decimal degrees (WGS 84) *(Float)*
* **maxLon:** maximum longitude in decimal degrees (WGS 84) *(Float)*

##### Example box-shaped region

```js
{
    minLat: 40.51757813,
    maxLat: 40.86914063,
    minLon: -73.65234375,
    maxLon: -72.94921875,
}
```

### circle

Define a circular region by specifying a record containing the following properties:

* **lat**: latitude of the circle center in decimal degrees (WGS 84) *(Float)*
* **lon**: longitude of the circle center in decimal degrees (WGS 84) *(Float)*
* **radius**: radius of the circle in kilometers (km) *(Float)*

##### Example circular region

```js
{
    lat: 40.69335938,
    lon: -73.30078125,
    radius: 20.0,
}
```

### polygon

Define a polygonal region with a record containing the latitude and longitude for
each point in the polygon:

* **points**: points that define the custom polygon *(Array of records)*

  Define each point with a record containing the following properties:

  ```
  - **lat**: latitude in decimal degrees (WGS 84) _(Float)_
  - **lon**: longitude in decimal degrees (WGS 84) _(Float)_

  ```

##### Example polygonal region

```js
{
    points: [
        {lat: 40.671659, lon: -73.936631},
        {lat: 40.706543, lon: -73.749177},
        {lat: 40.791333, lon: -73.880327},
    ]
}
```

## Strict and non-strict filtering

In most cases, the specified geographic region does not perfectly align with S2 grid cells.

* **Non-strict filtering** returns points that may be outside of the specified region but
  inside S2 grid cells partially covered by the region.
* **Strict filtering** returns only points inside the specified region.

*Strict filtering is less performant, but more accurate than non-strict filtering.*

 S2 grid cell  
 Filter region  
 Returned point

**Strict filtering**

**Non-strict filtering**

#### Related

* [geo package](/flux/v0/stdlib/experimental/geo/)
* [geo.filterRows() function](/flux/v0/stdlib/experimental/geo/filterrows/)
