Start with Part 1: Roof Inspection Guide
Run the SAM3 detection and score the roofs it returns
SAM3 Notebook
The full text-prompted geometry inference walkthrough
Insurance & Risk solutions
Catastrophe exposure, underwriting enrichment, and portfolio concentration patterns
RasterFlow Billing
Learn how RasterFlow usage is metered in RasterFlow Spatial Units
Run the Roof Inspection Guide first. This is the second half of that walkthrough and does not stand alone. The queries below run in the
SedonaContext session Part 1 opens, against the examples_temp.sam3_db.sam3_{AOI_NAME} table the SAM3 run writes. The canopy query also needs the scored_roofs temp view, which Part 1 builds from that table and your own my_portfolio records.What the Wherobots catalogs add to a roof
The roof polygons from Part 1 are useful as a join key. The examples below match them to Overture building footprints and measure canopy height within 10 m of each roof. These two checks add context to the detections without licensing another dataset.Overture building footprints
Overture building footprints
wherobots_open_data.overture_maps_foundation.buildings_buildingA stable building identity to deduplicate detections against, plus height, num_floors, and class. Also roof_material, roof_shape, and roof_color where a contributor supplied them.Data vintage: OpenStreetMap contributions through July 2026.Meta canopy height
Meta canopy height
wherobots_open_data.meta_canopy_height.global_v2Tree height around the structure, for overhang, debris, and windthrow exposure.Data vintage: not carried in the catalog. The table exposes only ingested_at, which is when Wherobots loaded it, not when the imagery was flown.Reconcile detections with building footprints
A detection is not a building record. One structure can come back as two polygons, and a row of attached houses can come back as one, so the row count off the SAM3 table is not a building count. Overture’sid identifies matched footprints; detections with no match and detections spanning several footprints still need review.
This pairs every roof detection with footprints it overlaps by area, keeps the largest overlap, and records how many footprints it covered. A shared edge alone does not count as a match:
distinct_buildingscounts the Overture building IDs selected as best matches. It is not a complete building count: a single detection can span several footprints, and the best-match filter keeps only one of them.no_footprintcounts unmatched detections, not buildings. Overture is contributor-supplied, so a real structure may be absent, but multiple unmatched polygons can also describe one structure. Inspect these detections before adding them to an inventory.spans_several_footprintsflags detections that cover more than one building footprint. Before assigning these to policies, run a separate join that keeps every positive-area detection–footprint pair and cut each piece withST_Intersection(d.geometry, b.geometry). The best-match query above intentionally retains only one pair per detection.roof_material_pctandroof_shape_pctare the non-null rates over distinct matched building IDs. Run them before pricing a commercial roof-attribute feed.
Reconcile unmatched detections and those spanning multiple footprints before reporting a building inventory or using the counts in a pricing decision. This summary identifies both cases; it does not resolve them.
Tree overhang over each detected roof
Canopy above a roof is a windthrow and debris exposure, and the reason some of your detections are incomplete. Buffer each roof by 10 m, include every canopy tile touching that buffer, and take the maximum of the per-tile results.allTouched=true includes canopy pixels touched by the buffer even when their centers fall outside it. The inner spatial join lets Sedona optimize tile matching; a regular left join brings roofs outside canopy coverage back with a null height.
Next steps
Roof Inspection Guide
Back to the detection run, the cost table, and output triage.
Insurance & Risk solutions
Catastrophe exposure, underwriting enrichment, and portfolio concentration patterns.
Run as a Job
Put the inspection on a schedule once the prompt and threshold are settled.
Visualize RasterFlow outputs
Check a mosaic before inference and detections after, on the same map.

