public function getMultiStationReport($GET) { $infoType = $GET['infoTypeRadio']; $exportType = $GET['exportTypeRadio']; $valueType = $GET['valueTypeRadio']; $folSeq = $GET['stationsSelect']; $fromDateStr = $GET['fromDate']; $toDateStr = $GET['toDate']; $timeBase = $GET['timeBase']; $timeBaseQuick = $GET['timeBaseQuick']; $quickReportType = $GET['quickReportType']; if ($quickReportType != "null") { $timeBase = $timeBaseQuick; } if ($valueType != "normal") { $timeBase = "5min"; } $isValidated = $GET['isValidated']; $isAverage = $GET['isAverage']; $folSeqArray = array(); //holds all folderseqs $folChannelsArray = array(); //holds selected channels by foldSeq as key foreach ($GET as $key => $value) { if (strpos($key, "channelNos_") !== false) { $folSeq = (double) substr($key, 11); array_push($folSeqArray, $folSeq); $folChannelsArray[$folSeq] = $value; } } //a few validation checks if (count($folChannelsArray) == 0) { return null; } if ($quickReportType == "null" && (false === strtotime($fromDateStr) || false === strtotime($toDateStr))) { return null; } //get folderNames from DB $FDS = FolderDataStore::getInstance(); $foldersObjArray = $FDS->FindBySeqs($folSeqArray); //calculating from to dates from provided $_GET $fromToDates = DateUtils::getDatesArrayForStationReports($quickReportType, $fromDateStr, $toDateStr); //calculating Date Slices now from DateUtils $fromDate = new DateTime($fromToDates['fromDate']); $toDate = new DateTime($fromToDates['toDate']); $folChannelsNamesArray = array(); //holds selected channels by foldSeq as key $allChannelsArray = array(); $channelUnitArray = array(); foreach ($folChannelsArray as $folSeq => $folChannelChannelsArr) { $folName = $foldersObjArray[$folSeq]->getFolderName(); $CCDS = ChannelConfigurationDataStore::getInstance(); $ChannelsInfo = $CCDS->FindByFolderAndChannelNos($folSeq, $folChannelChannelsArr); $channelNamesArr = array(); foreach ($ChannelsInfo as $chInfo) { if ($valueType != "normal") { if (!self::isZeroSpanChannel($chInfo->getChannelName())) { $chNo = $chInfo->getChannelNumber(); $chArr = $folChannelsArray[$folSeq]; if (($key = array_search($chNo, $chArr)) !== false) { unset($folChannelsArray[$folSeq][$key]); $folChannelsArray[$folSeq] = array_values($folChannelsArray[$folSeq]); } continue; } } $chUnit = $chInfo->getChannelUnit(); if (ConvertorUtils::getPrescribedUnit($chInfo->getChannelName()) != null) { $chUnit = ConvertorUtils::getPrescribedUnit($chInfo->getChannelName()); } $chUnit = mb_check_encoding($chUnit, 'UTF-8') ? $chUnit : utf8_encode($chUnit); $chStation = $chInfo->getChannelStation(); if (!empty($chStation)) { $chStation = " - " . $chStation; } $chStr = $folName . '<br>' . $chInfo->getChannelName() . $chStation . '<br>' . $chUnit; array_push($allChannelsArray, $chStr); array_push($channelUnitArray, $chUnit); array_push($channelNamesArr, $chInfo->getChannelName()); } $folChannelsNamesArray[$folSeq] = $channelNamesArr; } //Created an array with folSeq and seelcted channels for it $folChannelDataArray = array(); foreach ($folSeqArray as $folSeq) { $channelNoArray = $folChannelsArray[$folSeq]; $EDS = ExemptionDataStore::getInstance(); $exemptions = $EDS->FindExemptionsByFolderDatesChannels($folSeq, $fromToDates['fromDate'], $fromToDates['toDate'], implode(', ', $channelNoArray)); //Stack or AQMS $stationType = $foldersObjArray[$folSeq]->getStationType(); $dataJson = self::getDataJSON($fromToDates['fromDate'], $fromToDates['toDate'], $folSeq, "5min", $channelNoArray, $periodType, $exemptions, $stationType); //$avgData = self::getAverageData($fromToDates['fromDate'],$fromToDates['toDate'],$folSeq,$channelNoArray); $folChannelDataArray[$folSeq] = $dataJson['data']; } //Created an array with folSeq -> date->chanelvalues $CMD = CommentsDataStore::getInstance(); $commentsObjs = $CMD->FindCommentsMasterByFolChannel($folSeqArray[0], $folChannelsArray[$folSeqArray[0]]); $dataSlices = null; //if its stack type we are supporting single station/folder data only $stationType = $foldersObjArray[$folSeqArray[0]]->getStationType(); if ($stationType == 'stack' || $stationType == 'effluent') { //if($isAverage == "on"){ //$dateSlices = DateUtils::getDateSlicesByInterval($fromDate,$toDate,$timeBase); //}else{ if ($timeBase == "instant") { $dateSlices = DateUtils::getDateSlicesForData($folChannelDataArray[$folSeqArray[0]], $isAverage, $timeBase); } else { $dateSlices = DateUtils::getDateSlicesByInterval($fromDate, $toDate, $timeBase); } //} } else { $dateSlices = DateUtils::getDateSlicesByInterval($fromDate, $toDate, $timeBase); } //$dateSlices = $dateSlicesValid; $dataFinal = self::getFinalDataByValueType($timeBase, $dateSlices, $folSeqArray, $folChannelDataArray, $folChannelsNamesArray, $valueType, $isAverage, $stationType); if ($isValidated == "on") { $dateSlicesValidByChannelNumber = DateUtils::getDateSlicesByComments($commentsObjs, $timeBase, $folChannelsArray[$folSeqArray[0]]); $dataFinal = self::getValidatedDataOnly($dataFinal, $dateSlicesValidByChannelNumber); } if ($valueType != "normal") { $dataFinal = self::getZeroSpanValues($dataFinal); } $channelDataJSON = array(); $channelDataJSON['channels'] = $allChannelsArray; //all channels with key as chno and val as chname $channelDataJSON['data'] = $dataFinal; //dateFinal is date as key and array of channel values as value $finalDataJSON = self::processDataJsonForGridGraph($channelDataJSON, $infoType); $finalDataJSON["units"] = $channelUnitArray; if ($infoType == "export") { ExportUtils::exportMultiStationGridReport($finalDataJSON, $exportType); return null; } else { if (count($channelDataJSON['channels']) == 1) { $chName = $channelNamesArr[0]; $presLimit = PrescribedLimitsUtils::getPrescribedLimit($chName); if ($presLimit != null) { $finalDataJSON['presLimit'] = $presLimit; } } return self::getAvgMinMaxValues($finalDataJSON); } }
public function getWindRoseReport($GET) { $infoType = $GET['infoTypeRadio']; $periodType = $GET['periodTypeRadio']; $fromDateStr = $GET['fromDate']; $toDateStr = $GET['toDate']; $timeBase = $GET['timeBase']; $timeBaseQuick = $GET['timeBaseQuick']; $quickReportType = $GET['quickReportType']; if ($quickReportType != "null") { $timeBase = $timeBaseQuick; } $timeBaseFromGet = $timeBase; $folSeqArray = array(); //holds all folderseqs foreach ($GET as $key => $value) { if (strpos($key, "channelNos_") !== false) { $folSeq = (double) substr($key, 11); array_push($folSeqArray, $folSeq); } } if (count($folSeqArray) == 0) { return null; } $folSeq = $folSeqArray[0]; //calculating from to dates from provided $_GET $fromToDates = DateUtils::getDatesArrayForStationReports($quickReportType, $fromDateStr, $toDateStr); // $dateSlices = DateUtils::getDateSlicesByInterval($fromDate,$toDate,$timeBase); $WSChannelNo = 0; $WDChannelNo = 0; $CCDS = ChannelConfigurationDataStore::getInstance(); $ChannelsInfo = $CCDS->FindByFolder($folSeq); foreach ($ChannelsInfo as $channel) { if ($channel->getChannelName() == "Wind Speed") { $WSChannelNo = $channel->getChannelNumber(); } else { if ($channel->getChannelName() == "Wind Direction") { $WDChannelNo = $channel->getChannelNumber(); } } } $fromDate = new DateTime($fromToDates['fromDate']); $toDate = new DateTime($fromToDates['toDate']); $toDate->setTime(23, 59, 59); $fromDate = $fromDate->format("Y/m/d H:i:s"); $toDate = $toDate->format("Y/m/d H:i:s"); $WQDS = WQDDataDataStore::getInstance(); if (strpos($timeBase, 'hours') !== false) { $timeBase = "1hour"; } $WSArrayDB = $WQDS->getChannel($fromDate, $toDate, $folSeq, $WSChannelNo, $timeBase); $WDArrayDB = $WQDS->getChannel($fromDate, $toDate, $folSeq, $WDChannelNo, $timeBase); if ($WSArrayDB == null || $WDArrayDB == null) { return null; } $WS = array(); $WD = array(); $i = 0; $WSDateInterval = $WSArrayDB[0][0]; foreach ($WSArrayDB as $ws) { if (strtotime($ws[0]) == strtotime($WSDateInterval)) { $WS[$i++] = floatval($ws[1]); $WSDateInterval = DateUtils::getIncrementedDateStr($WSDateInterval, $timeBaseFromGet); } } $i = 0; $WDDateInterval = $WDArrayDB[0][0]; foreach ($WDArrayDB as $wd) { if (strtotime($wd[0]) == strtotime($WDDateInterval)) { $WD[$i++] = floatval($wd[1]); $WDDateInterval = DateUtils::getIncrementedDateStr($WDDateInterval, $timeBaseFromGet); } } $direction_array["N"][] = null; $direction_array["NNE"][] = null; $direction_array["NE"][] = null; $direction_array["ENE"][] = null; $direction_array["E"][] = null; $direction_array["ESE"][] = null; $direction_array["SE"][] = null; $direction_array["SSE"][] = null; $direction_array["S"][] = null; $direction_array["SSW"][] = null; $direction_array["SW"][] = null; $direction_array["WSW"][] = null; $direction_array["W"][] = null; $direction_array["WNW"][] = null; $direction_array["NW"][] = null; $direction_array["NNW"][] = null; for ($ii = 0; $ii < count($WD); $ii++) { switch ($WD[$ii]) { case $WD[$ii] >= 348.75 or $WD[$ii] < 11.25: $direction_array["N"][] = $WS[$ii]; break; case $WD[$ii] >= 11.25 and $WD[$ii] < 33.75: $direction_array["NNE"][] = $WS[$ii]; break; case $WD[$ii] >= 33.75 and $WD[$ii] < 56.25: $direction_array["NE"][] = $WS[$ii]; break; case $WD[$ii] >= 56.25 and $WD[$ii] < 78.75: $direction_array["ENE"][] = $WS[$ii]; break; case $WD[$ii] >= 78.75 and $WD[$ii] < 101.25: $direction_array["E"][] = $WS[$ii]; break; case $WD[$ii] >= 101.25 and $WD[$ii] < 123.75: $direction_array["ESE"][] = $WS[$ii]; break; case $WD[$ii] >= 123.75 and $WD[$ii] < 146.25: $direction_array["SE"][] = $WS[$ii]; break; case $WD[$ii] >= 146.25 and $WD[$ii] < 168.75: $direction_array["SSE"][] = $WS[$ii]; break; case $WD[$ii] >= 168.75 and $WD[$ii] < 191.25: $direction_array["S"][] = $WS[$ii]; break; case $WD[$ii] >= 191.25 and $WD[$ii] < 213.75: $direction_array["SSW"][] = $WS[$ii]; break; case $WD[$ii] >= 213.75 and $WD[$ii] < 236.25: $direction_array["SW"][] = $WS[$ii]; break; case $WD[$ii] >= 236.25 and $WD[$ii] < 258.75: $direction_array["WSW"][] = $WS[$ii]; break; case $WD[$ii] >= 258.75 and $WD[$ii] < 281.25: $direction_array["W"][] = $WS[$ii]; break; case $WD[$ii] >= 281.25 and $WD[$ii] < 303.75: $direction_array["WNW"][] = $WS[$ii]; break; case $WD[$ii] >= 303.75 and $WD[$ii] < 326.25: $direction_array["NW"][] = $WS[$ii]; break; case $WD[$ii] >= 326.25 and $WD[$ii] < 348.75: $direction_array["NNW"][] = $WS[$ii]; break; } } $direction_keys = array_keys($direction_array); $max_wind = round(max($WS), 0); $num_data = count($WS); $wind_range_max = $max_wind < 20 ? 25 : $max_wind; $data_range_array = array(1, 5, 10, 15, 20, $wind_range_max); foreach ($direction_keys as $direction) { for ($ii = 0; $ii <= 5; $ii++) { $count_data[$ii] = 0; } $raw_data = $direction_array[$direction]; foreach ($raw_data as $temp_speed) { if ($temp_speed >= 0 and $temp_speed < $data_range_array[0]) { $count_data[0]++; } elseif ($temp_speed >= $data_range_array[0] and $temp_speed < $data_range_array[1]) { $count_data[1]++; } elseif ($temp_speed >= $data_range_array[1] and $temp_speed < $data_range_array[2]) { $count_data[2]++; } elseif ($temp_speed >= $data_range_array[2] and $temp_speed < $data_range_array[3]) { $count_data[3]++; } elseif ($temp_speed >= $data_range_array[3] and $temp_speed < $data_range_array[4]) { $count_data[4]++; } elseif ($temp_speed >= $data_range_array[4]) { $count_data[5]++; } } for ($ii = 0; $ii <= 5; $ii++) { $plot_data[$direction][$ii] = 0; } for ($ii = 0; $ii <= 5; $ii++) { $plot_data[$direction][$ii] = round($count_data[$ii] / $num_data * 100, 2); } } return $plot_data; }