# Working with Raster data

Once your raster data is stored as a BigQuery table, you can leverage the power of CARTO's Analytics Toolbox to perform advanced spatial analyses involving raster and vector data sources.

This section covers some key use cases for analyzing raster data, demonstrating how to extract raster values, perform spatial intersections, and aggregate raster data values using SQL and the procedures provided by the raster module in the CARTO Analytics Toolbox.

{% hint style="info" %}
Check the [**complete SQL reference**](https://docs.carto.com/data-and-analysis/analytics-toolbox-for-snowflake/sql-reference/raster) for the raster module.
{% endhint %}

### Get values from the pixels that intersect with a specific point

```sql
CALL CARTO.CARTO.RASTER_VALUES(
    'my_database.my_schema.my_tablename',
    ST_POINT(-6.61403, 37.47571),
    'band_1',
    'my_database.my_schema.my_output_table',
    NULL
);
-- The table `my_database.my_schema.my_output_table` will be created
-- with columns: pixel, band_1 (one pixel intersecting the point)
```

### Get values from the pixels that intersect with points from a table

```sql
CALL CARTO.CARTO.RASTER_VALUES(
    'my_database.my_schema.my_tablename',
    '
    SELECT id, point AS geom
    FROM my_database.my_schema.my_geom_table
    ',
    '
    band_1 AS alias_1,
    band_3 AS alias_2
    ',
    'my_database.my_schema.my_output_table',
    NULL
);
-- The table `my_database.my_schema.my_output_table` will be created
-- with columns: id, pixel, alias_1, alias_2 (one pixel intersecting each point)
```

### Get a calculated value from different bands for each pixel that intersects with points on table

```sql
CALL CARTO.CARTO.RASTER_VALUES(
    'my_database.my_schema.my_tablename',
    '''
    SELECT id, point AS geom
    FROM my_database.my_schema.my_point_table
    ''',
    '''
    band_1 as nir,
    band_2 as red,
    (band_1-band_2)/(band_1+band_2) as nvdi
    ''',
    'my_database.my_schema.my_output_table',
    NULL
);
-- The table `my-project.my-dataset.my-output-table` will be created
-- with columns: pixel, nir, red, nvdi
```

### Get all pixels that intersect with a polygon and their band's values

```sql
CALL CARTO.CARTO.RASTER_VALUES(
    'my_database.my_schema.my_tablename',
    ST_GEOGFROMTEXT('
        POLYGON((
            0.14538491988787428 -0.19997006321490718,
            0.1595469834865071 -0.22803650229192843,
            0.14881814742693678 -0.20391825036028427,
            0.1734515550197102 -0.22898063235646787,
            0.15165056014666334 -0.19885427102265768,
            0.16169275069842115 -0.21413203430647013,
            0.14538491988787428 -0.19997006321490718
        ))
    '),
    '
    band_1, band_2
    ',
    'my_database.my_schema.my_output_table',
    NULL
);
-- The table `my_database.my_schema.my_output_table` will be created
-- with columns: band_1_avg, band_2_max, total_sum, count
-- (aggregation of all the pixels intersecting the polygon)
```

### Intersect with a polygon table and get aggregated data

```sql
CALL CARTO.CARTO.RASTER_AGG_VALUES(
    'my_database.my_schema.my_tablename',
    'my_database.my_schema.my_geom_table', -- columns: name, geom
    '
    AVG(band_1) AS band_1_avg,
    MAX(band_2) AS band_2_max,
    SUM(band_1 + band_2) AS total_sum,
    COUNT(band_1) AS count
    ',
    'my_database.my_schema.my_output_table',
    NULL
);
-- The table `my_database.my_schema.my_output_table` will be created
-- with columns: name, band_1_avg, band_2_max, total_sum, count
-- (aggregation of all the pixels intersecting each polygon)
```


---

# 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-snowflake/guides/working-with-raster-data.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.
