# 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)