This is a basic cruise expansion demonstration creating a weighted average of diameter class records for all groups with no filtering unlike the original.
<?php
require_once("FPSOpen.php");
echo "\nFSD FPSExpander\n\n";
$SQL = "SELECT VEG_LBL, SUM(AREA_GIS) AS AREA FROM ADMIN WHERE FLAG > 0 AND MSMT_YR > 0 GROUP BY VEG_LBL;";
foreach($dbh->query($SQL, PDO::FETCH_ASSOC) as $row) {
$VegLbl[$row['VEG_LBL']] = $row['AREA'];
}
foreach($VegLbl as $Lbl => $Area) {
$SQL = "SELECT
DBHCLS.SPECIES as Species,
DBHCLS.GRP as Grp,
ADMIN.RPT_YR AS Rpt_YR ,
Sum(IIf([DBHCLS].[Age]>0,[DBHCLS].[Age],Null)*[ADMIN].[AREA_GIS])/Sum([ADMIN].[AREA_GIS]) AS Age,
Sum([DBHCLS].[TREES]*[ADMIN].[AREA_GIS])/{$Area} AS Trees,
Sum([DBHCLS].[DBH]*[ADMIN].[AREA_GIS])/Sum([ADMIN].[AREA_GIS]) AS DBH,
Sum([DBHCLS].[BASAL]*[ADMIN].[AREA_GIS])/{$Area} AS Basal,
Sum([DBHCLS].[Height]*[ADMIN].[AREA_GIS])/Sum([ADMIN].[AREA_GIS]) AS Height,
Sum([DBHCLS].[BOLEHT]*[ADMIN].[AREA_GIS])/Sum([ADMIN].[AREA_GIS]) AS BoleHT,
Sum([DBHCLS].[TAPER]*[ADMIN].[AREA_GIS])/Sum([ADMIN].[AREA_GIS]) AS Taper,
Sum([DBHCLS].[CROWN]*[ADMIN].[AREA_GIS])/Sum([ADMIN].[AREA_GIS]) AS Crown,
Round(Sum([DBHCLS].[Vigor]*[ADMIN].[AREA_GIS])/Sum([ADMIN].[AREA_GIS]),1) AS Vigor,
Sum([DBHCLS].[CubicTot]*[ADMIN].[AREA_GIS])/{$Area} AS CubicTot,
Sum([DBHCLS].[CubicGrs]*[ADMIN].[AREA_GIS])/{$Area} AS CubicGrs,
Sum([DBHCLS].[CubicNet]*[ADMIN].[AREA_GIS])/{$Area} AS CubicNet,
Sum([DBHCLS].[BoardGrs]*[ADMIN].[AREA_GIS])/{$Area} AS BoardGrs,
Sum([DBHCLS].[BoardNet]*[ADMIN].[AREA_GIS])/{$Area} AS BoardNet,
Sum([DBHCLS].[ValueGrs]*[ADMIN].[AREA_GIS])/{$Area} AS ValueGrs,
Sum([DBHCLS].[DEFECT_B]*[ADMIN].[AREA_GIS])/Sum([ADMIN].[AREA_GIS]) AS Defect_B,
Sum([DBHCLS].[DEFECT_M]*[ADMIN].[AREA_GIS])/Sum([ADMIN].[AREA_GIS]) AS Defect_M,
Sum([DBHCLS].[DEFECT_T]*[ADMIN].[AREA_GIS])/Sum([ADMIN].[AREA_GIS]) AS Defect_T,
Round([DBHCLS].[DBH]) AS DBHCls,
Sum([DBHCLS].[Cords]*[ADMIN].[AREA_GIS])/{$Area} AS Cords,
Sum([DBHCLS].[StemDry]*[ADMIN].[AREA_GIS])/{$Area} AS StemDry,
Sum([DBHCLS].[StemWet]*[ADMIN].[AREA_GIS])/{$Area} AS StemWet,
Sum([DBHCLS].[BoleDry]*[ADMIN].[AREA_GIS])/{$Area} AS BoleDry,
Sum([DBHCLS].[BoleWet]*[ADMIN].[AREA_GIS])/{$Area} AS BoleWet,
Sum([DBHCLS].[BarkDry]*[ADMIN].[AREA_GIS])/{$Area} AS BarkDry,
Sum([DBHCLS].[CrwnDry]*[ADMIN].[AREA_GIS])/{$Area} AS CrwnDry,
Sum([DBHCLS].[RootDry]*[ADMIN].[AREA_GIS])/{$Area} AS RootDry,
Sum([DBHCLS].[CarbTree]*[ADMIN].[AREA_GIS])/{$Area} AS CarbTree,
Sum([DBHCLS].[CarbBole]*[ADMIN].[AREA_GIS])/{$Area} AS CarbBole,
Sum([DBHCLS].[CO2Tree]*[ADMIN].[AREA_GIS])/{$Area} AS CO2Tree,
Sum([DBHCLS].[CO2Bole]*[ADMIN].[AREA_GIS])/{$Area} AS CO2Bole
FROM
ADMIN INNER JOIN DBHCLS ON (ADMIN.RPT_YR = DBHCLS.RPT_YR) AND (ADMIN.STD_ID = DBHCLS.STD_ID)
WHERE
ADMIN.FLAG>0 AND ADMIN.Veg_Lbl = '{$Lbl}' AND ADMIN.MSMT_YR > 0
GROUP BY
DBHCLS.SPECIES,
DBHCLS.GRP,
Round([DBHCLS].[DBH]),
ADMIN.RPT_YR;";
$DCLS = null;
foreach($dbh->query($SQL, PDO::FETCH_ASSOC) as $row) {
$DCLS[] = $row;
}
echo "The FSD Penguin has averaged {$Lbl} to expand...\n\n";
$SQL = "SELECT STD_ID FROM ADMIN WHERE FLAG > 0 AND MSMT_YR = 0 AND VEG_LBL = '$Lbl';";
echo "The following stands have been expanded:\n";
$Cnt = 0;
foreach($dbh->query($SQL, PDO::FETCH_ASSOC) as $row) {
$PT = 0;
$dbh->query('DELETE * FROM DBHCLS WHERE STD_ID = ' . $row['STD_ID']);
$dbh->query('DELETE * FROM STAND WHERE STD_ID = ' . $row['STD_ID']);
$dbh->query('INSERT INTO STAND (STD_ID, RPT_YR) VALUES (' . $row['STD_ID'] . ',' . $DCLS[0]['Rpt_YR'] . ')');
$dbh->query("UPDATE ADMIN SET RPT_YR = {$DCLS[0]['Rpt_YR']} WHERE STD_ID = {$row['STD_ID']}");
foreach($DCLS as $Rec) {
$PT++;
$Fields = null;
$Values = null;
$Fields[] = 'STD_ID';
$Values[] = $row['STD_ID'];
$Fields[] = 'PlotTree';
$Values[] = $PT;
foreach($Rec as $Field => $Value) {
$Fields[] = $Field;
if(in_array($Field,array('Species','Grp'))) {
$Values[] = "'$Value'";
} else {
if($Value == '') { $Values[] = 0; } else { $Values[] = $Value;}
}
}
$SQLInsert = 'INSERT INTO DBHCLS (`' . implode('`,`', $Fields) . '`) VALUES (' . implode(',', $Values) . ');';
$dbh->query($SQLInsert);
}
$Cnt++;
echo $Lbl . "\t -> \t " . $row['STD_ID'] . "\t Stand Counter:$Cnt \t DBHCLS Recs Appended:$PT \n";
}
}
$dbh = null;
?>