# Dissolve Worker

Processes dissolve operations to merge features based on attribute values.

## Overview

The dissolve worker merges adjacent or overlapping features that share the same attribute value, optionally aggregating numeric fields.

## Job Type

`dissolve`

## Input Parameters

```json
{
  "source_dataset_id": 123,
  "output_dataset_id": 124,
  "dissolve_mode": "field",
  "dissolve_field": "category",
  "aggregation_fields": {
    "population": "sum",
    "area": "sum"
  }
}
```

### Parameters

- `source_dataset_id` (required): Source dataset ID
- `output_dataset_id` (required): Output dataset ID
- `dissolve_mode` (optional): "all", "field", or "custom" (default: "field")
- `dissolve_field` (required if mode="field"): Field to dissolve on
- `custom_field` (required if mode="custom"): Field for custom grouping
- `custom_groups` (required if mode="custom"): Array of group definitions
- `aggregation_fields` (optional): Object mapping field names to aggregation functions (sum, avg, min, max, count)

## Output

Creates a new dataset with dissolved features:

- Merged geometries for each group
- Aggregated attribute values
- Group identifiers

## Dissolve Modes

### All Features

Merge all features into a single feature. No grouping field required.

### By Field

Merge features that share the same value in the specified field.

### Custom Groups

Merge features based on custom group definitions. Allows complex grouping logic.

## Aggregation Functions

- `sum`: Sum of numeric values
- `avg`: Average of numeric values
- `min`: Minimum value
- `max`: Maximum value
- `count`: Count of features

## Example

```bash
# Enqueue a dissolve job via API
curl -X POST "https://example.com/api/run_dissolve.php" \
  -H "Content-Type: application/json" \
  -d '{
    "source_dataset_id": 123,
    "output_dataset_id": 124,
    "dissolve_mode": "field",
    "dissolve_field": "category",
    "aggregation_fields": {
      "population": "sum",
      "area": "sum"
    }
  }'
```

## Background Jobs

This analysis runs as a background job. The worker:

1. Fetches queued `dissolve` jobs
2. Validates input parameters
3. Executes PostGIS dissolve queries
4. Applies aggregations
5. Creates output dataset
6. Marks job as completed

## Performance Considerations

- Processing time depends on dataset size and number of groups
- Complex geometries may slow processing
- Aggregation operations add processing time
- Consider simplifying geometries before dissolving

## Related Documentation

- [Dissolve Analysis Tool](../analysis-tools/dissolve.md)
- [Analysis API](../api/analysis.md)
- [Workers Overview](index.md)

