Satellite perimeters
deepfire:satellite-perimeters — fire perimeter polygons estimated from clusters of
satellite hotspots, current and historical (~140,000 snapshots, ~19,000 active). Geometry:
MultiPolygon (EPSG:4326). Feature IDs: satellite-perimeters.<uuid>.
Each row is a timestamped snapshot: a cluster gets a new row whenever its perimeter geometry materially changes, and older snapshots are kept.
These perimeters are derived from satellite hotspot detections. They are not official surveyed fire boundaries and should not be treated as authoritative for safety or legal purposes.
Attributes
| Property | Type | Notes |
|---|---|---|
id | uuid | Feature key (surfaced as satellite-perimeters.<uuid>), per snapshot |
cluster_id | uuid | Owning cluster — joins to deepfire:clusters |
computed_at | timestamp (ISO 8601) | When the snapshot was computed |
observed_watermark | timestamp, nullable | Satellite acquisition time of the latest hotspot fed in |
n_hotspots | number | Detections used to build the polygon |
area_m2 | number, nullable | Enclosed area (m²) |
perimeter_m | number, nullable | Perimeter length (m) |
algo_version | string | Algorithm version (e.g. cumulative-multihull-v1) |
active | boolean | Whether the owning cluster is currently active |
active = true returns every snapshot of live firesactive reflects the owning cluster's state, and a cluster keeps every snapshot it ever
produced — so active = true returns several polygons per fire, not one. For the
single latest perimeter per fire, keep the row with the greatest computed_at per
cluster_id:
latest = {}
for feature in features:
props = feature["properties"]
key = props["cluster_id"]
if key not in latest or props["computed_at"] > latest[key]["properties"]["computed_at"]:
latest[key] = feature
Examples
Active perimeter snapshots in a bounding box (California):
curl -sG "https://ogc.deepfire.co/ogc/features/v1/collections/deepfire:satellite-perimeters/items" \
--data-urlencode "bbox=-125,32,-114,42" \
--data-urlencode "filter-lang=cql2-text" \
--data-urlencode "filter=active = true" \
--data-urlencode "f=application/json"
All snapshots for one fire (sort client-side by computed_at for the growth history):
curl -sG "https://ogc.deepfire.co/ogc/features/v1/collections/deepfire:satellite-perimeters/items" \
--data-urlencode "filter-lang=cql2-text" \
--data-urlencode "filter=cluster_id = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'" \
--data-urlencode "f=application/json"
Full parameter reference: Get satellite perimeters.