> For the complete documentation index, see [llms.txt](https://help.felt.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.felt.com/analysis-and-dashboards/spatial-analysis.md).

# Spatial analysis

Join, buffer, dissolve, clip, and intersect layers, and create travel-time areas, with the Analysis tool.

| Task                                              | Plans                          |
| ------------------------------------------------- | ------------------------------ |
| Run an analysis, combine layers, and clip a layer | Team, Business, and Enterprise |
| Create travel-time areas                          | Business and Enterprise        |
| Crop a raster layer                               | Business and Enterprise        |
| Sample raster                                     | Business and Enterprise        |

[Compare plans](https://felt.com/pricing#compare)

Spatial analysis creates a new layer from one or two map layers, leaving the inputs unchanged. The **Analysis** tool runs operations such as join, buffer, clip, and travel time.

For an operation the **Analysis** tool doesn't have, such as finding the nearest feature or summing point values in each polygon, ask Felt AI. See [Query map layers with SQL](/felt-ai/ai-assistant.md#query-map-layers-with-sql).

## Create travel-time areas

A travel-time area, or isochrone, shows how far you can travel by car, bike, or on foot in up to 120 minutes. The **Travel time** operation creates a layer with one area for each point and travel time.

1. Click **Analysis** ![](https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FFXhPP6A5qGrl52o8O5IM%2Ftransformations.svg?alt=media\&token=ebf46d3c-a17f-48fb-acb5-393e90c8e663) in the toolbar and select **Travel time**.
2. In **Measure travel time from**, select a point layer.
3. In **Mode**, select **Drive**, **Walk**, or **Bike**.
4. In **Travel time**, enter the minutes. To add another time, such as 10, 20, and 30 minutes, click **Add travel time**. You can add up to five.
5. Click **Apply**. The result appears in the legend as a new layer.

One run can create up to 10,000 areas, counting each point once for each travel time. For more, filter the layer, use fewer travel times, or select **Features on screen** in **Apply to**. To check one place, use the **Travel time** type in [Measure](/tools/measure.md#measure-travel-time). You can also ask Felt AI, such as "Show the area within a 15-minute walk of each school". For straight-line distance, use **Buffer**.

## Run an analysis

1. Click **Analysis** ![](https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FFXhPP6A5qGrl52o8O5IM%2Ftransformations.svg?alt=media\&token=ebf46d3c-a17f-48fb-acb5-393e90c8e663) in the toolbar.
2. Select an operation, such as **Buffer**. The **Analysis** panel opens.
3. Select the input layer. For an operation that compares two layers, select the second layer too.
4. In **Settings**, set the operation's options.
5. Optional: In **Apply to**, select **Features on screen** to analyze only the current map view. For layers larger than 500 MB, this is the default.
6. Click **Apply**. The result appears in the legend as a new layer.

Analysis uses only features that pass a layer's filters. See [Filter layers](/layers/filter-layers.md).

Analysis results are created once and don't update when an input layer refreshes. For results that stay current, [connect a data source](/upload-anything/data-sources/add-a-source.md), define a [SQL query](/upload-anything/sql-queries.md), and turn on [live refresh](/upload-anything/refresh-data.md#set-up-a-live-layer). Results count toward processing. See [Plan usage](/plans-and-billing/plan-usage.md).

<figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2Fgit-blob-508f0e684976a390851fca9f5ab96c48df610643%2Fanalysis-panel-buffer.webp?alt=media" alt="Analysis menu open from the toolbar, listing single-layer and multi-layer operations, with Buffer highlighted and its preview."><figcaption></figcaption></figure>

## Combine layers

Use **Join** to combine attributes or **Dissolve** to merge polygons. To stack features from two layers into one, ask Felt AI; the **Analysis** tool can't append layers.

### Join

**Join** adds one layer's attributes to another by matching values in each layer's join key column. For example, both layers might have a tract ID column. **Join** matches values, not locations; to combine by location, use **Intersect** or **Count points**.

1. In the toolbar, click **Analysis** > **Join**.
2. Under **Join data and geometry from…**, select the layer whose shapes you want in the result and its **Join key** column.
3. Under **… with data from**, select the second layer and its **Join key** column. This layer can be a table with no geometry.
4. Optional: Under **… and keep unmatched rows from**, clear a layer to drop its unmatched rows. Both layers are selected by default, so every row is kept.
5. Click **Apply**.

Join key values must match exactly, so check spelling and format first. To attach a spreadsheet to places such as counties or ZIP codes, see [Spreadsheets and geocoding](/upload-anything/files/spreadsheets-and-geocoding.md).

### Dissolve

**Dissolve** merges polygons in one layer and removes the boundaries between them. For example, it can merge a property's parcels. In **Combine**, select **All features** (the default) to make one polygon, or **Overlapping features** to make one polygon per group of overlapping or touching features.

**Dissolve** doesn't group by an attribute, so first filter the layer to the polygons you want. To dissolve polygons from two layers, first combine the layers with Felt AI.

## Clip a layer to a boundary

**Clip** trims a point, line, or polygon layer to the polygons of a second layer and keeps the input layer's attributes. For example, clip roads to a county boundary.

1. In the toolbar, click **Analysis** > **Clip**.
2. Under **Cut out data from…**, select the layer to trim.
3. Under **… where it overlaps with**, select the boundary layer. It must be a polygon layer.
4. Click **Apply**.

To clip a layer to an annotation, such as a polygon you drew, select the annotation, right-click, click **Actions** > **Convert to layer**, and use that layer as the boundary. The basemap can't be clipped; to mask land or water, use a land or water polygon layer.

### Crop a raster layer

**Clip** doesn't support raster layers. To crop a raster, add the Spatial filter extension from **Developer Platform** in the toolbar. Draw a shape in view mode, then export the raster from the filter panel as a GeoTIFF clipped to that shape. On the map, the filter hides pixels outside the shape only for you. See [Spatial filter](/tools/spatial-filter.md).

**Sample raster** writes raster values into a vector layer; it doesn't produce a raster.

## Sample raster

**Sample raster** adds raster values to a point, line, or polygon layer as new attributes. For example, it can calculate each parcel's average elevation, a type of zonal statistic.

1. In the toolbar, click **Analysis** > **Sample raster**.
2. Under **Calculate statistics for each feature of…**, select the vector layer.
3. In **Raster layer**, select the raster.
4. In **Bands**, select the bands to read.
5. Select the statistics, such as **Average**, or **Most common** for categories such as land cover.
6. Click **Apply**.

## Analysis operations

| Operation     | What it does                                                                                                | Example use                                           | Input                      | Second layer       | Output                 |
| ------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | -------------------------- | ------------------ | ---------------------- |
| Buffer        | Draws a polygon covering everything within a set distance of each feature, in ft, mi, m, or km              | Find places within half a mile of a hospital          | Points, lines, or polygons | None               | Polygons               |
| Bounds        | Draws the smallest rectangle around each feature                                                            | Simplify detailed shapes to broad coverage areas      | Lines or polygons          | None               | Polygons               |
| Centroid      | Places a point at the center of each feature, keeping its attributes                                        | Turn metro area polygons into points                  | Lines or polygons          | None               | Points                 |
| Dissolve      | Merges all polygons into one, or merges groups of overlapping or touching polygons                          | Merge overlapping buffers into one area               | Polygons                   | None               | Polygons               |
| Clip          | Keeps the parts of each feature inside the second layer's polygons, preserving the input layer's attributes | Cut a countrywide layer down to your area of interest | Points, lines, or polygons | Polygons           | Same as input          |
| Intersect     | Creates one feature per overlap, with attributes from both layers                                           | Find the roads inside national parks                  | Points, lines, or polygons | Polygons           | Same as input          |
| Subtract      | Removes the parts of each feature inside the second layer's polygons                                        | Remove flood zones from candidate development sites   | Points, lines, or polygons | Polygons           | Same as input          |
| Count points  | Adds the number of points inside each polygon                                                               | Count the airports in each US state                   | Polygons                   | Points             | Polygons               |
| Join          | Adds a second layer's attributes by matching values in a column from each layer                             | Add GDP figures from a table to a countries layer     | Any layer or table         | Any layer or table | First layer's geometry |
| Sample raster | Adds raster values or statistics to each feature                                                            | Find the average elevation of each parcel             | Points, lines, or polygons | A raster layer     | Same as input          |
| Travel time   | Draws the area you can reach from each point in a set time by car, bike, or on foot                         | Find the area within a 15-minute walk of each school  | Points                     | None               | Polygons               |

## Try the spatial analysis exercise

The spatial analysis exercise finds habitat for the Iberian lynx. [Download the datasets](https://drive.google.com/drive/folders/1eKmVEg1hZk8TlVnQPu150oaTQNu07YkX), then follow the video.

{% embed url="<https://www.youtube.com/watch?v=97NX-lqZjtU>" %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

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

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://help.felt.com/analysis-and-dashboards/spatial-analysis.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
