input('magma2.shp', name: 'magma') 
-> 
group({to_coverage(magma) as magma})
->
join_magma.rhs

input('pumice2.shp', name: 'pumice')
->
select({
  pumice: {
    pumice.*,
    buffer(pumice.the_geom, pumice.weight * 10) as the_geom
  }
}) as exploded_pumice
->
group({to_coverage(pumice) as pumice})
->
join_pumice.rhs



input('raods.shp', name: 'exposure')
->
select({
  exposure: {
    exposure.*,
    $road_geom as the_geom
  }
})
->
join(on: true) as join_magma
->
join(on: true) as join_pumice
->
select({
  exposure,
  combine_coverages(
    {
      pumice as ballistics,
      magma as pyro
    },
    $grid_distance
  ) as pumice_magma,
  # flip the order so we test both
  combine_coverages(
    {
      magma as pyro,
      pumice as ballistics,
    },
    $grid_distance
  ) as magma_pumice
})
->
select({
  exposure,
  $hazard_coverage as hazard
}) 
->
select({
  exposure,
  measure(exposure.the_geom) as total_road,
  sample(geometry: exposure, coverage: hazard) as sampled
})
->
unnest(sampled)
->
select({
  exposure.id as exposure_id, 
  sampled.geometry,
  total_road,
  measure(sampled.geometry) as exposed_road,
  sampled.sampled.pyro_id as magma,
  sampled.sampled.ballistics_id as pumice
}) as ungrouped
-> 
group(
  by: exposure_id,
  select: {
    exposure_id,
    sum(if_then_else(magma > 0, 1, 0)) as magma_squares,
    sum(if_then_else(pumice > 0, 1, 0)) as pumice_squares,
    round(mode(total_road)) as total_road,
    round(sum(exposed_road)) as exposed_road
  }
) as grouped



