AR1/docs/api/analysis.md

316 lines
5.7 KiB
Markdown

# Analysis API
Endpoints for running spatial analysis tools.
## Hot Spot Analysis
**Endpoint**: `POST /api/analysis_hotspot_run.php`
Run Getis-Ord Gi* hot spot analysis on a dataset.
### Request Body
```json
{
"dataset_id": 123,
"value_field": "population",
"neighbor_type": "distance",
"distance": 1000,
"output_mode": "static"
}
```
### Parameters
- `dataset_id` (required): Dataset ID to analyze
- `value_field` (required): Numeric field to analyze
- `neighbor_type` (optional): "distance" or "knn" (default: "distance")
- `distance` (required if neighbor_type="distance"): Distance threshold in dataset units
- `k_neighbors` (required if neighbor_type="knn"): Number of nearest neighbors
- `output_mode` (optional): "static", "view", or "materialized_view" (default: "static")
### Response
```json
{
"status": "success",
"job_id": 456,
"message": "Hot spot analysis job queued"
}
```
### Background Job
The analysis runs as a background job. Use the `job_id` to check status via [Jobs API](jobs.md).
### Example
```bash
curl -X POST "https://example.com/api/analysis_hotspot_run.php" \
-H "Content-Type: application/json" \
-H "Cookie: PHPSESSID=..." \
-d '{
"dataset_id": 123,
"value_field": "population",
"neighbor_type": "distance",
"distance": 1000
}'
```
## Outlier Analysis
**Endpoint**: `POST /api/analysis/outlier_run.php`
Identify statistical outliers in a dataset.
### Request Body
```json
{
"dataset_id": 123,
"value_field": "income",
"method": "zscore",
"threshold": 2.0
}
```
### Parameters
- `dataset_id` (required): Dataset ID to analyze
- `value_field` (required): Numeric field to analyze
- `method` (optional): "zscore" or "mad" (default: "zscore")
- `threshold` (optional): Z-score threshold or MAD multiplier (default: 2.0)
### Response
```json
{
"status": "success",
"job_id": 457,
"message": "Outlier analysis job queued"
}
```
## KDE (Kernel Density Estimation)
**Endpoint**: `POST /api/analysis_kde.php`
Generate kernel density estimation surface from point data.
### Request Body
```json
{
"dataset_id": 123,
"bandwidth": 1000,
"cell_size": 100,
"weight_field": null
}
```
### Parameters
- `dataset_id` (required): Point dataset ID
- `bandwidth` (optional): Bandwidth in dataset units (default: auto-calculated)
- `cell_size` (optional): Output cell size (default: auto-calculated)
- `weight_field` (optional): Field to weight points
### Response
```json
{
"status": "success",
"job_id": 458,
"message": "KDE analysis job queued"
}
```
## Nearest Neighbor Analysis
**Endpoint**: `POST /api/nearest_run.php`
Find nearest neighbors between two datasets.
### Request Body
```json
{
"source_dataset_id": 123,
"target_dataset_id": 124,
"max_distance": 5000,
"limit": 1
}
```
### Parameters
- `source_dataset_id` (required): Source dataset ID
- `target_dataset_id` (required): Target dataset ID
- `max_distance` (optional): Maximum search distance
- `limit` (optional): Maximum neighbors per feature (default: 1)
### Response
```json
{
"status": "success",
"job_id": 459,
"message": "Nearest neighbor analysis job queued"
}
```
## Dissolve Analysis
**Endpoint**: `POST /api/run_dissolve.php`
Dissolve features based on attribute values.
### Request Body
```json
{
"dataset_id": 123,
"dissolve_field": "category",
"aggregation": {
"population": "sum",
"area": "sum"
}
}
```
### Parameters
- `dataset_id` (required): Dataset ID
- `dissolve_field` (required): Field to dissolve on
- `aggregation` (optional): Aggregation functions for numeric fields
### Response
```json
{
"status": "success",
"job_id": 460,
"message": "Dissolve analysis job queued"
}
```
## Clip Analysis
**Endpoint**: `POST /api/datasets_clip_run.php`
Clip features to a boundary geometry.
### Request Body
```json
{
"dataset_id": 123,
"clip_geometry": {
"type": "Polygon",
"coordinates": [ ... ]
}
}
```
### Parameters
- `dataset_id` (required): Dataset ID to clip
- `clip_geometry` (required): GeoJSON geometry for clipping boundary
### Response
```json
{
"status": "success",
"job_id": 461,
"message": "Clip analysis job queued"
}
```
## Erase Analysis
**Endpoint**: `POST /api/analysis_erase_run.php`
Erase features from a dataset using another dataset.
### Request Body
```json
{
"input_dataset_id": 123,
"erase_dataset_id": 124
}
```
### Parameters
- `input_dataset_id` (required): Input dataset ID
- `erase_dataset_id` (required): Erase dataset ID
### Response
```json
{
"status": "success",
"job_id": 462,
"message": "Erase analysis job queued"
}
```
## Zonal Statistics
**Endpoint**: `POST /api/zonal_stats.php`
Calculate statistics for raster data within polygon zones.
### Request Body
```json
{
"raster_dataset_id": 125,
"zone_dataset_id": 123,
"statistics": ["mean", "sum", "count"]
}
```
### Parameters
- `raster_dataset_id` (required): Raster dataset ID
- `zone_dataset_id` (required): Polygon zone dataset ID
- `statistics` (optional): Statistics to calculate (default: all)
### Response
```json
{
"status": "success",
"job_id": 463,
"message": "Zonal statistics job queued"
}
```
## Output Modes
Analysis results can be stored in different formats:
- **static**: Results stored in a permanent table (default)
- **view**: Results stored as a database view (updates with source data)
- **materialized_view**: Results stored as a materialized view (requires refresh)
## Job Status
All analysis operations run as background jobs. Use the returned `job_id` to check status:
```bash
GET /api/job_status.php?job_id=456
```
See [Jobs API](jobs.md) for details.
## Related Documentation
- [Analysis Tools](../analysis-tools/index.md)
- [Workers](../workers/index.md)
- [Jobs API](jobs.md)