73 lines
2.4 KiB
TypeScript
73 lines
2.4 KiB
TypeScript
/**
|
|
* 강우영향일 계산 로직
|
|
*
|
|
* 1.강우영향일 및 강우량을 계산하며 강우량이 3이상이면 강우영향일이며 이후 이틀까지 강우영향일로 포함
|
|
*
|
|
* 2.강우영향일이면서 3mm이하의 강우량일 경우에는 강우영향을 준 날의 강우량을 따름
|
|
* @param data
|
|
* @param weather (default:ALL), SUNNY, ..etc
|
|
* @author jsyang
|
|
*/
|
|
|
|
export default function CalcRainEffect(data : any, weather='ALL') {
|
|
/* console.log("%c Calculate RainEffect !" , "background:blue;color:white");
|
|
console.log("%c Data Length :"+data.length+" Weather : "+weather , "background:yellow;color:blue");*/
|
|
// 강우영향일 계산 (강우량이 3 초과이면 무조건 강우영향일)
|
|
for(let idx = 0; idx < data.length; idx++) {
|
|
const item = data[idx];
|
|
if(item){
|
|
if(item.infoRnDay && Number(item.infoRnDay) >= 3) {
|
|
item.rainEffectDay = 1;
|
|
} else {
|
|
item.rainEffectDay = 0;
|
|
}
|
|
|
|
if(item.infoRnDay == 'x'){
|
|
item.infoRnDay = '0.0';
|
|
item.toBeInfoRnDay = '0.0';
|
|
}else{
|
|
item.infoRnDay = Number(item.infoRnDay).toFixed(1);
|
|
item.toBeInfoRnDay = Number(item.infoRnDay).toFixed(1);
|
|
}
|
|
}
|
|
}
|
|
|
|
// 이틀 전, 하루 전이 강우영향일(3 이상)인 경우 해당 날도 강우영향일로 설정
|
|
for(let idx = 0; idx < data.length; idx++) {
|
|
if(data[idx]) {
|
|
// 하루 전이 강우영향일(3 이상)인 경우
|
|
if(idx > 0 && data[idx-1]?.infoRnDay && Number(data[idx-1]?.infoRnDay) >= 3) {
|
|
data[idx]!.rainEffectDay = 1;
|
|
}
|
|
// 이틀 전이 강우영향일(3 이상)인 경우
|
|
if(idx > 1 && data[idx-2]?.infoRnDay && Number(data[idx-2]?.infoRnDay) >= 3) {
|
|
data[idx]!.rainEffectDay = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
for(let idx = 0; idx < data.length; idx++) {
|
|
if(data[idx] && data[idx]?.rainEffectDay === 1) {
|
|
if(idx > 1){
|
|
if(data[idx-1]?.infoRnDay && Number(data[idx]?.infoRnDay) < 3 && Number(data[idx-1]?.infoRnDay.toString().trim()) >= 3) {
|
|
data[idx]!.toBeInfoRnDay = data[idx-1]!.infoRnDay;
|
|
}
|
|
}
|
|
if(idx > 2){
|
|
if(data[idx-2]?.infoRnDay && Number(data[idx]?.infoRnDay) < 3 && Number(data[idx-2]?.infoRnDay.toString().trim()) >= 3) {
|
|
data[idx]!.toBeInfoRnDay = data[idx-2]!.infoRnDay;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
let rtnData : any = [];
|
|
if (weather === 'ALL') {
|
|
rtnData = data;
|
|
} else if (weather === 'SUNNY') {
|
|
rtnData = data.filter((item: any) => item.rainEffectDay === 0);
|
|
} else {
|
|
rtnData = data.filter((item: any) => item.rainEffectDay === 1);
|
|
}
|
|
return rtnData;
|
|
} |