Skip to content

Commit

Permalink
Merge commit '8be9c15128b97341b90be0d0e8d5dcce9abaa486'
Browse files Browse the repository at this point in the history
  • Loading branch information
ftomei committed Mar 1, 2024
2 parents f09764c + 8be9c15 commit 18e9010
Show file tree
Hide file tree
Showing 31 changed files with 639 additions and 222 deletions.
20 changes: 10 additions & 10 deletions agrolib/climate/climate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ bool elaborationOnPoint(QString *myError, Crit3DMeteoPointsDbHandler* meteoPoint
int index = clima->getParam1ClimateIndex();
if (index != NODATA)
{
float param = readElab(clima->db(), table, index, QString::fromStdString(meteoPointTemp->id), clima->param1ClimateField(), myError);
float param = readClimateElab(clima->db(), table, index, QString::fromStdString(meteoPointTemp->id), clima->param1ClimateField(), myError);
clima->setParam1(param);
}
else
Expand Down Expand Up @@ -138,7 +138,7 @@ bool passingClimateToAnomaly(QString *myError, Crit3DMeteoPoint* meteoPointTemp,
float valueClimate;
QString table = getTable(clima->climateElab());
int index = clima->getParam1ClimateIndex();
valueClimate = readElab(clima->db(), table, index, QString::fromStdString(meteoPointTemp->id), clima->climateElab(), myError);
valueClimate = readClimateElab(clima->db(), table, index, QString::fromStdString(meteoPointTemp->id), clima->climateElab(), myError);
if (index != NODATA && valueClimate != NODATA)
{
// MP found
Expand Down Expand Up @@ -194,7 +194,7 @@ bool passingClimateToAnomaly(QString *myError, Crit3DMeteoPoint* meteoPointTemp,

if (minDist != NODATA)
{
valueClimate = readElab(clima->db(), table, index, idNearMP, clima->climateElab(), myError);
valueClimate = readClimateElab(clima->db(), table, index, idNearMP, clima->climateElab(), myError);
if (index != NODATA && valueClimate != NODATA)
{
return anomalyOnPoint(meteoPointTemp, valueClimate);
Expand All @@ -215,7 +215,7 @@ bool passingClimateToAnomalyGrid(QString *myError, Crit3DMeteoPoint* meteoPointT
float valueClimate;
QString table = getTable(clima->climateElab());
int index = clima->getParam1ClimateIndex();
valueClimate = readElab(clima->db(), table, index, QString::fromStdString(meteoPointTemp->id), clima->climateElab(), myError);
valueClimate = readClimateElab(clima->db(), table, index, QString::fromStdString(meteoPointTemp->id), clima->climateElab(), myError);
if (index != NODATA && valueClimate != NODATA)
{
// MP found
Expand Down Expand Up @@ -355,7 +355,7 @@ bool climateTemporalCycle(QString *myError, Crit3DClimate* clima, std::vector<fl
int climateIndex = getClimateIndexFromElab(getQDate(startD), clima->param1ClimateField());
if (climateIndex != NODATA)
{
paramValue = readElab(db, table, climateIndex, QString::fromStdString(meteoPoint->id), clima->param1ClimateField(), myError);
paramValue = readClimateElab(db, table, climateIndex, QString::fromStdString(meteoPoint->id), clima->param1ClimateField(), myError);
clima->setParam1(paramValue);
}
else
Expand Down Expand Up @@ -417,7 +417,7 @@ bool climateTemporalCycle(QString *myError, Crit3DClimate* clima, std::vector<fl
int climateIndex = getClimateIndexFromElab(getQDate(startD), clima->param1ClimateField());
if (climateIndex != NODATA)
{
paramValue = readElab(db, table, climateIndex, QString::fromStdString(meteoPoint->id), clima->param1ClimateField(), myError);
paramValue = readClimateElab(db, table, climateIndex, QString::fromStdString(meteoPoint->id), clima->param1ClimateField(), myError);
clima->setParam1(paramValue);
}
else
Expand Down Expand Up @@ -466,7 +466,7 @@ bool climateTemporalCycle(QString *myError, Crit3DClimate* clima, std::vector<fl

if (climateIndex != NODATA)
{
paramValue = readElab(db, table, climateIndex, QString::fromStdString(meteoPoint->id), clima->param1ClimateField(), myError);
paramValue = readClimateElab(db, table, climateIndex, QString::fromStdString(meteoPoint->id), clima->param1ClimateField(), myError);
clima->setParam1(paramValue);
}
else
Expand Down Expand Up @@ -531,7 +531,7 @@ bool climateTemporalCycle(QString *myError, Crit3DClimate* clima, std::vector<fl

if (climateIndex != NODATA)
{
paramValue = readElab(db, table, climateIndex, QString::fromStdString(meteoPoint->id), clima->param1ClimateField(), myError);
paramValue = readClimateElab(db, table, climateIndex, QString::fromStdString(meteoPoint->id), clima->param1ClimateField(), myError);
clima->setParam1(paramValue);
}
else
Expand Down Expand Up @@ -573,7 +573,7 @@ bool climateTemporalCycle(QString *myError, Crit3DClimate* clima, std::vector<fl

if (climateIndex != NODATA)
{
paramValue = readElab(db, table, climateIndex, QString::fromStdString(meteoPoint->id), clima->param1ClimateField(), myError);
paramValue = readClimateElab(db, table, climateIndex, QString::fromStdString(meteoPoint->id), clima->param1ClimateField(), myError);
clima->setParam1(paramValue);
}
else
Expand Down Expand Up @@ -607,7 +607,7 @@ bool climateTemporalCycle(QString *myError, Crit3DClimate* clima, std::vector<fl
int climateIndex = getClimateIndexFromElab(getQDate(startD), clima->param1ClimateField());
if (climateIndex != NODATA)
{
paramValue = readElab(db, table, climateIndex, QString::fromStdString(meteoPoint->id), clima->param1ClimateField(), myError);
paramValue = readClimateElab(db, table, climateIndex, QString::fromStdString(meteoPoint->id), clima->param1ClimateField(), myError);
clima->setParam1(paramValue);
}
else
Expand Down
86 changes: 64 additions & 22 deletions agrolib/climate/crit3dClimateList.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -193,9 +193,9 @@ std::vector<bool> Crit3DClimateList::listDailyCumulated() const
return _listDailyCumulated;
}

void Crit3DClimateList::parserElaboration()
{

void Crit3DClimateList::parserElaboration(QString &errorStr)
{
for (int i = 0; i < _listClimateElab.size(); i++)
{
int pos = 0;
Expand All @@ -207,66 +207,95 @@ void Crit3DClimateList::parserElaboration()
if (words.isEmpty())
{
_listClimateElab.replace(i, "NULL");
continue;
}

// split years
QString periodElabList = words.at(pos);
QList<QString> myYearWords = periodElabList.split('-'); // ÷
QList<QString> myYearWords = periodElabList.split('-');

bool isOk = false;
int firstYear = myYearWords[0].toInt(&isOk);
if (! isOk)
{
errorStr += "Wrong year: " + myYearWords[0] + "\n";
_listClimateElab.replace(i, "NULL");
continue;
}

if (myYearWords[0].toInt() == false || myYearWords[1].toInt() == false)
int lastYear = myYearWords[1].toInt(&isOk);
if (! isOk)
{
_listClimateElab.replace(i, "NULL");
errorStr += "Wrong year: " + myYearWords[1] + "\n";
_listClimateElab.replace(i, "NULL");
continue;
}

_listYearStart.push_back(myYearWords[0].toInt());
_listYearEnd.push_back(myYearWords[1].toInt());
_listYearStart.push_back(firstYear);
_listYearEnd.push_back(lastYear);

pos = pos + 1;

if (words.size() == pos)
{
_listClimateElab.replace(i, "NULL");
errorStr += "Missing parameters in line: " + climateElab + "\n";
_listClimateElab.replace(i, "NULL");
continue;
}

meteoVariable var = noMeteoVar;
if (words[pos] != "")
QString varStr = words[pos];
if (varStr != "")
{
if (words[pos].contains("CUMULATED"))
if (varStr.contains("CUMULATED"))
{
_listDailyCumulated.push_back(true);
words[pos].remove("CUMULATED");
varStr.remove("CUMULATED");
}
else
{
_listDailyCumulated.push_back(false);
}
var = getKeyMeteoVarMeteoMap(MapDailyMeteoVarToString, words[pos].toStdString());
var = getKeyMeteoVarMeteoMap(MapDailyMeteoVarToString, varStr.toUpper().toStdString());
if (var == noMeteoVar)
{
var = getKeyMeteoVarMeteoMapWithoutUnderscore(MapDailyMeteoVarToString, words[pos].toStdString());
var = getKeyMeteoVarMeteoMapWithoutUnderscore(MapDailyMeteoVarToString, varStr.toUpper().toStdString());
}
}

_listVariable.push_back(var);
if (var == noMeteoVar)
{
errorStr += "Wrong variable: " + varStr + "\n";
_listClimateElab.replace(i, "NULL");
continue;
}
else
{
_listVariable.push_back(var);
}

pos = pos + 1;

if (words.size() == pos)
{
errorStr += "Missing parameters in line: " + climateElab + "\n";
_listClimateElab.replace(i, "NULL");
continue;
}

QString periodTypeStr = words[pos];

_listPeriodType.push_back(getPeriodTypeFromString(periodTypeStr));

pos = pos + 1; // pos = 3

if (words.size() == pos)
{
_listClimateElab.replace(i, "NULL");
errorStr += "Missing parameters in line: " + climateElab + "\n";
_listClimateElab.replace(i, "NULL");
continue;
}


if ( (_listPeriodType[i] == genericPeriod) && ( (words[pos].at(0)).isDigit() ) )
if ( (_listPeriodType[i] == genericPeriod) && ( (words[pos].at(0)).isDigit() ))
{
_listPeriodStr.push_back(words[pos]);
parserGenericPeriodString(i);
Expand All @@ -282,14 +311,22 @@ void Crit3DClimateList::parserElaboration()

if (words.size() == pos)
{
_listClimateElab.replace(i, "NULL");
errorStr += "Missing parameters in line: " + climateElab + "\n";
_listClimateElab.replace(i, "NULL");
continue;
}

QString elab = words[pos];
bool param1IsClimate;
QString param1ClimateField;

meteoComputation elabMeteoComputation = getMeteoCompFromString(MapMeteoComputation, elab.toStdString());
if (elabMeteoComputation == noMeteoComp)
{
errorStr += "Wrong elaboration: " + elab + "\n";
_listClimateElab.replace(i, "NULL");
continue;
}

float param = NODATA;
int nrParam = nParameters(elabMeteoComputation);
Expand Down Expand Up @@ -319,7 +356,6 @@ void Crit3DClimateList::parserElaboration()
}
else
{

param1IsClimate = false;
param1ClimateField = "";
param = words[pos].toFloat();
Expand All @@ -344,6 +380,14 @@ void Crit3DClimateList::parserElaboration()
elab1 = words[pos];
_listElab1.push_back(elab1);
elabMeteoComputation = getMeteoCompFromString(MapMeteoComputation, elab1.toStdString());

if (elabMeteoComputation == noMeteoComp)
{
errorStr += "Wrong elaboration: " + elab1 + "\n";
_listClimateElab.replace(i, "NULL");
continue;
}

nrParam = nParameters(elabMeteoComputation);

if (nrParam > 0)
Expand Down Expand Up @@ -398,9 +442,7 @@ void Crit3DClimateList::parserElaboration()
_listParam1IsClimate.push_back(param1IsClimate);
_listParam1ClimateField.push_back(param1ClimateField);
}

}

}


Expand Down
2 changes: 1 addition & 1 deletion agrolib/climate/crit3dClimateList.h
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@
std::vector<float> listParam2() const;
void setListParam2(const std::vector<float> &listParam2);

void parserElaboration();
void parserElaboration(QString &errorStr);
bool parserGenericPeriodString(int index);

void insertDailyCumulated(bool dailyCumulated);
Expand Down
28 changes: 17 additions & 11 deletions agrolib/climate/dbClimate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,30 +70,36 @@ bool deleteElab(QSqlDatabase db, QString *myError, QString table, QString elab)
}


float readElab(const QSqlDatabase &db, const QString &table, const int &timeIndex, const QString &id, const QString &elab, QString *myError)
float readClimateElab(const QSqlDatabase &db, const QString &table, const int &timeIndex,
const QString &id, const QString &elab, QString *myError)
{
*myError = "";
QSqlQuery qry(db);

QString statement = QString("SELECT * FROM `%1` ").arg(table);
qry.prepare( statement + " WHERE TimeIndex= :TimeIndex AND id_point = :id_point AND elab = :elab" );
if (table == "climate_annual" || table == "climate_generic")
{
qry.prepare( statement + " WHERE id_point = :id_point AND elab = :elab" );
}
else
{
qry.prepare( statement + " WHERE TimeIndex= :TimeIndex AND id_point = :id_point AND elab = :elab" );
qry.bindValue(":TimeIndex", timeIndex);
}

qry.bindValue(":TimeIndex", timeIndex);
qry.bindValue(":id_point", id);
qry.bindValue(":elab", elab);


float value = NODATA;
if( !qry.exec() )
if(! qry.exec() )
{
*myError = qry.lastError().text();
return NODATA;
}
else

float value = NODATA;
if (qry.next())
{
if (qry.next())
{
getValue(qry.value("value"), &value);
}
getValue(qry.value("value"), &value);
}

return value;
Expand Down
2 changes: 1 addition & 1 deletion agrolib/climate/dbClimate.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

bool deleteElab(QSqlDatabase db, QString *myError, QString table, QString elab);

float readElab(const QSqlDatabase &db, const QString &table, const int &timeIndex, const QString &id, const QString &elab, QString *myError);
float readClimateElab(const QSqlDatabase &db, const QString &table, const int &timeIndex, const QString &id, const QString &elab, QString *myError);
QList<QString> getIdListFromElab(QSqlDatabase db, QString table, QString *myError, QString elab);
QList<QString> getIdListFromElab(QSqlDatabase db, QString table, QString *myError, QString elab, int index);

Expand Down
35 changes: 35 additions & 0 deletions agrolib/dbMeteoPoints/dbMeteoPointsHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -686,6 +686,41 @@ std::vector<float> Crit3DMeteoPointsDbHandler::loadDailyVar(QString *myError, me
return dailyVarList;
}

std::vector<float> Crit3DMeteoPointsDbHandler::getAllDailyVar(QString *myError, meteoVariable variable, QString id, std::vector<QString> &dateStr)
{
QString date;
float value;
std::vector<float> dailyVarList;

int idVar = getIdfromMeteoVar(variable);


QSqlQuery myQuery(_db);

QString tableName = id + "_D";

QString statement = QString( "SELECT * FROM `%1` WHERE `%2` = %3")
.arg(tableName).arg(FIELD_METEO_VARIABLE).arg(idVar);

if( !myQuery.exec(statement) )
{
*myError = myQuery.lastError().text();
return dailyVarList;
}
else
{
while (myQuery.next())
{
date = myQuery.value(0).toString();
dateStr.push_back(date);
value = myQuery.value(2).toFloat();
dailyVarList.push_back(value);
}
}

return dailyVarList;
}

std::vector<float> Crit3DMeteoPointsDbHandler::loadHourlyVar(QString *myError, meteoVariable variable, Crit3DDate dateStart, Crit3DDate dateEnd, QDateTime* firstDateDB, Crit3DMeteoPoint *meteoPoint)
{
QString dateStr;
Expand Down
1 change: 1 addition & 0 deletions agrolib/dbMeteoPoints/dbMeteoPointsHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@
std::vector<float> loadDailyVar(QString *myError, meteoVariable variable,
Crit3DDate dateStart, Crit3DDate dateEnd,
QDate* firstDateDB, Crit3DMeteoPoint *meteoPoint);
std::vector<float> getAllDailyVar(QString *myError, meteoVariable variable, QString id, std::vector<QString> &dateStr);

bool loadHourlyData(const Crit3DDate &firstDate, const Crit3DDate &lastDate, Crit3DMeteoPoint *meteoPoint);

Expand Down
Loading

0 comments on commit 18e9010

Please sign in to comment.