Beispiel #1
0
void CatchmentPolygonDlg::run()
{
  QgsProject *p = QgsProject::instance();
  QString projDir = p->readPath(p->readEntry("pihm", "projDir"));
  p->writeEntry("pihm", "catgrid", p->writePath(inputFileLineEdit->text())); // 20
  p->writeEntry("pihm", "catpoly", p->writePath(outputFileLineEdit->text())); // 21

  QDir dir = QDir::home();
  QString home = dir.homePath();
  QString logFileName(qPrintable(home+"/log.html"));
  ofstream log;
  log.open(qPrintable(logFileName));
  log<<"<html><body><font size=3 color=black><p> Verifying Files...</p></font></body></html>";
  log.close();
  messageLog->setSource(logFileName);
  messageLog->setFocus();
  messageLog->setModified(TRUE);


  QString inputFileName((inputFileLineEdit->text()));
  QString outputShpFileName((outputFileLineEdit->text()));
  QString outputDbfFileName; QString outputShxFileName, id;
  outputDbfFileName = outputShpFileName;
  outputDbfFileName.truncate(outputDbfFileName.length()-3); outputShxFileName=outputDbfFileName;
  outputDbfFileName.append("dbf");

  outputShxFileName.truncate(outputShxFileName.length()-1);
  id=outputShxFileName;
  id=id.right(id.length()-id.lastIndexOf("/",-1)-1);
  cout << "ID = "<<qPrintable(id) <<"\n";
  outputShxFileName.append(".shx");

  QString shpFile = projDir+"/VectorProcessing/"+id+".shp";
  QString dbfFile = projDir+"/VectorProcessing/"+id+".dbf";
  QString shxFile = projDir+"/VectorProcessing/"+id+".shx";

  ifstream inFile;      inFile.open(qPrintable(inputFileLineEdit->text()));
//  ofstream outFile;    outFile.open(qPrintable(outputFileLineEdit->text()));
  int runFlag = 1;

  log.open(qPrintable(logFileName), ios::app);
  if(inputFileName.length()==0) {
    log<<"<p><font size=3 color=red> Error! Please input Catchment Grid Input File</p>";
    runFlag = 0;
  }
  else{
    log<<"<p>Checking... "<<qPrintable(inputFileName)<<"... ";
    if(inFile == NULL) {
      log<<"<font size=3 color=red> Error!</p>";
      qWarning("\n%s doesn't exist!", qPrintable(inputFileLineEdit->text()));
      runFlag = 0;
    }
    else
      log<<"Done!</p>";
  }
  log.close();
  messageLog->reload();
  QApplication::processEvents();

  log.open(qPrintable(logFileName), ios::app);
  if(outputShpFileName.length()==0) {
    log<<"<p><font size=3 color=red> Error! Please input Catchment Polygon Output File</p>";
    runFlag = 0;
  }
  else{
    log<<"<p>Checking... "<<qPrintable(outputShpFileName)<<"... ";
/*    if(outFile == NULL) {
      log<<"<font size=3 color=red> Error!</p>";
      qWarning("\nCan not open output file name");
      runFlag = 0;
    }
    else*/
      log<<"Done!</p>";
  }
  log.close();
  messageLog->reload();
  QApplication::processEvents();


  if(runFlag == 1) {

    log.open(qPrintable(logFileName), ios::app);
    log<<"<p>Running...";
    log.close();
    messageLog->reload();
    QApplication::processEvents();

    Convert(inputFileName, outputShpFileName);

    char err = 0;
    if (QFile::exists(shpFile) && !QFile::remove(shpFile)) err |= 1;
    if (QFile::exists(dbfFile) && !QFile::remove(dbfFile)) err |= 2;
    if (QFile::exists(shxFile) && !QFile::remove(shxFile)) err |= 4;
    const char* msg[] = {" shp", " dbf", " shx"};
    QString s("Failed to remove old:");
    char idx = 0;
    for(; err; err>>=1, ++idx)
      if (err & 1) {
        s += msg[idx];
      }
    if (idx)
      QMessageBox::warning(this, "Failed to remove old files", s);

    QFile::copy(outputShpFileName, shpFile);
    QFile::copy(outputDbfFileName, dbfFile);
    QFile::copy(outputShxFileName, shxFile);

    p->writeEntry("pihm", "catpoly", shpFile); //21

    log.open(qPrintable(logFileName), ios::app);
    log<<" Done!</p>";
    log.close();
    messageLog->reload();
    QApplication::processEvents();

    if(showSG_DFrame->isChecked() == 1) {
      QString myFileNameQString = outputShpFileName;
      QFileInfo myFileInfo(myFileNameQString);
      QString myBaseNameQString = myFileInfo.baseName();
      QString provider = "OGR";
      cout<<"\n"<<myFileNameQString.ascii()<<"\n"<<myBaseNameQString.ascii()<<"\n"<<provider.ascii()<<"\n";
      //getchar(); getchar();
      applicationPointer->addVectorLayer(myFileNameQString, myBaseNameQString, "ogr");
      //QgsRasterLayer *tempLayer = new QgsRasterLayer("/backup/pihm/RasterProcessing/FillPits", "morgedem.asc");
//??			applicationPointer->addLayer(QStringList(outputShpFileName), NULL);
    }
  }
Beispiel #2
0
void paraFileDlg::run()
{
    QgsProject *p = QgsProject::instance();
    QString projDir = p->readPath(p->readEntry("pihm", "projDir"));

    p->writeEntry("pihm", "/model/para", p->writePath(paraFileLineEdit->text())); // 82

    QDir dir = QDir::home();
    QString home = dir.homePath();
    QString logFileName(home+"/log.html");
    ofstream log;
    log.open(qPrintable(logFileName));
    log<<"<html><body><font size=3 color=black><p> Verifying Files...</p></font></body></html>";
    log.close();
    MessageLog->setSource(logFileName);
    MessageLog->setFocus();
    MessageLog->setModified(TRUE);

    ofstream parameters;
    parameters.open(qPrintable((paraFileLineEdit->text())), ios::out);

    int runFlag = 1;

    /*
          if(parameters==NULL){
            qWarning("\nPlease input para file name");
            runFlag=0;
          }*/

    log.open(qPrintable(logFileName), ios::app);
    if((paraFileLineEdit->text()).length()==0) {
        log<<"<p><font size=3 color=red> Error! Please input .para Output File</p>";
        runFlag = 0;
    }
    else {
        log<<"<p>Checking... "<<qPrintable((paraFileLineEdit->text()))<<"... ";
        if(parameters == NULL) {
            log<<"<font size=3 color=red> Error!</p>";
            //qWarning("\nCan not open output file name");
            runFlag = 0;
        }
        else
            log<<"Done!</p>";
    }
    log.close();
    MessageLog->reload();
    QApplication::processEvents();


    log.open(qPrintable(logFileName), ios::app);
    log<<"<p><font size=3 color=black>Checking Krylov Dimension...";
    if(KDlineEdit->text().length()==0) {
        log<<"<font size=3 color=red>Error!</p>";
        runFlag=0;
        qWarning("\nPlease enter Krylov Dimension");
        //out<<"<p><font size=2 color=red>Please enter Krylov Dimension</font></p>";
    }
    else
        log<<"Done</p>";
    log.close();
    MessageLog->reload();
    QApplication::processEvents();

    log.open(qPrintable(logFileName), ios::app);
    log<<"<p><font size=3 color=black>Checking Convergence Threshold...";
    if(CTlineEdit->text().length()==0) {
        log<<"<font size=3 color=red>Error!</p>";
        runFlag=0;
        qWarning("\nPlease enter Convergence Tolerance");
        //out<<"<p><font size=2 color=red>Please enter Convergence Tolerance</font></p>";
    }
    else
        log<<"Done</p>";
    log.close();
    MessageLog->reload();
    QApplication::processEvents();

    log.open(qPrintable(logFileName), ios::app);
    log<<"<p><font size=3 color=black>Checking Absolute Tolerance...";
    if(ATlineEdit->text().length()==0) {
        log<<"<font size=3 color=red>Error!</p>";
        runFlag=0;
        qWarning("\nPlease enter Absolute Tolerance");
        //out<<"<p><font size=2 color=red>Please enter Absolute Tolerance</font></p>";
    }
    else
        log<<"Done</p>";
    log.close();
    MessageLog->reload();
    QApplication::processEvents();


    log.open(qPrintable(logFileName), ios::app);
    log<<"<p><font size=3 color=black>Checking Relative Tolerance...";
    if(RTlineEdit->text().length()==0) {
        log<<"<font size=3 color=red>Error!</p>";
        runFlag=0;
        qWarning("\nPlease enter Relative Tolerance");
        //out<<"<p><font size=2 color=red>Please enter Relative Tolerance</font></p>";
    }
    else
        log<<"Done</p>";
    log.close();
    MessageLog->reload();
    QApplication::processEvents();

    log.open(qPrintable(logFileName), ios::app);
    log<<"<p><font size=3 color=black>Checking Initial Step...";
    if(ISlineEdit->text().length()==0) {
        log<<"<font size=3 color=red>Error!</p>";
        runFlag=0;
        qWarning("\nPlease enter Initial Time Step");
        //out<<"<p><font size=2 color=red>Please enter Initial Time Step</font></p>";
    }
    else
        log<<"Done</p>";
    log.close();
    MessageLog->reload();
    QApplication::processEvents();

    log.open(qPrintable(logFileName), ios::app);
    log<<"<p><font size=3 color=black>Checking Maximum Step...";
    if(MSlineEdit->text().length()==0) {
        log<<"<font size=3 color=red>Error!</p>";
        runFlag=0;
        qWarning("\nPlease enter Maximum Time Step");
        //out<<"<p><font size=2 color=red>Please enter Maximum Time Step</font></p>";
    }
    else
        log<<"Done</p>";
    log.close();
    MessageLog->reload();
    QApplication::processEvents();


    log.open(qPrintable(logFileName), ios::app);
    log<<"<p><font size=3 color=black>Checking Start Time...";
    if(STlineEdit->text().length()==0) {
        log<<"<font size=3 color=red>Error!</p>";
        runFlag=0;
        qWarning("\nPlease enter Start Time");
        //out<<"<p><font size=2 color=red>Please enter Start Time</font></p>";
    }
    else
        log<<"Done</p>";
    log.close();
    MessageLog->reload();
    QApplication::processEvents();


    log.open(qPrintable(logFileName), ios::app);
    log<<"<p><font size=3 color=black>Checking End Time...";
    if(ETlineEdit->text().length()==0) {
        log<<"<font size=3 color=red>Error!</p>";
        runFlag=0;
        qWarning("\nPlease enter End Time");
        //out<<"<p><font size=2 color=red>Please enter End Time</font></p>";
    }
    else
        log<<"Done</p>";
    log.close();
    MessageLog->reload();
    QApplication::processEvents();


    log.open(qPrintable(logFileName), ios::app);
    log<<"<p><font size=3 color=black>Checking Step Size...";
    if(a_lineEdit->text().length()==0) {
        log<<"<font size=3 color=red>Error!</p>";
        runFlag=0;
        qWarning("\nPlease enter Step Size Factor (a)");
        //out<<"<p><font size=2 color=red>Please enter Step Size Factor (a)</font></p>";
    }
    else
        log<<"Done</p>";
    log.close();
    MessageLog->reload();
    QApplication::processEvents();


    log.open(qPrintable(logFileName), ios::app);
    log<<"<p><font size=3 color=black>Checking Base Step Size...";
    if(b_lineEdit->text().length()==0) {
        log<<"<font size=3 color=red>Error!</p>";
        runFlag=0;
        qWarning("\nPlease enter Base Step Size (b)");
        //out<<"<p><font size=2 color=red>Please enter Base Step Size (b)</font></p>";
    }
    else
        log<<"Done</p>";
    log.close();
    MessageLog->reload();
    QApplication::processEvents();


    if(runFlag == 1) {

        log.open(qPrintable(logFileName), ios::app);
        log<<"<p>Writing .para file...";
        log.close();
        MessageLog->reload();
        QApplication::processEvents();


        if(verboseCheckBox->isChecked())
            parameters<<"1\t";
        else
            parameters<<"0\t";

        if(debugCheckBox->isChecked())
            parameters<<"1\t";
        else
            parameters<<"0\t";

        if(imComboBox->currentIndex() == 0)
            parameters<<"3\n";
        else if(imComboBox->currentIndex() == 1)
            parameters<<"1\n";
        else
            parameters<<"0\n";
        /*
              if(resFileCheckBox->isChecked())
                      parameters<<"1\t";
              else
                      parameters<<"0\t";

              if(fluxFileCheckBox->isChecked())
                      parameters<<"1\t";
              else
                      parameters<<"0\t";

              if(qFileCheckBox->isChecked())
                      parameters<<"1\t";
              else
                      parameters<<"0\t";

              if(etFileCheckBox->isChecked())
                      parameters<<"1\n";
              else
                      parameters<<"0\n";
        */

        if(checkBox1->isChecked())
            parameters<<"1\t";
        else
            parameters<<"0\t";
        if(checkBox2->isChecked())
            parameters<<"1\t";
        else
            parameters<<"0\t";
        if(checkBox3->isChecked())
            parameters<<"1\t";
        else
            parameters<<"0\t";
        if(checkBox4->isChecked())
            parameters<<"1\n";
        else
            parameters<<"0\n";
        ////
        if(checkBox5->isChecked())
            parameters<<"1\t";
        else
            parameters<<"0\t";
        if(checkBox6->isChecked())
            parameters<<"1\t";
        else
            parameters<<"0\t";
        if(checkBox7->isChecked())
            parameters<<"1\n";
        else
            parameters<<"0\n";
        ////
        if(checkBox8->isChecked())
            parameters<<"1\t";
        else
            parameters<<"0\t";
        if(checkBox9->isChecked())
            parameters<<"1\t";
        else
            parameters<<"0\t";
        if(checkBox10->isChecked())
            parameters<<"1\n";
        else
            parameters<<"0\n";
        ////
        if(checkBox11->isChecked())
            parameters<<"1\t";
        else
            parameters<<"0\t";
        if(checkBox12->isChecked())
            parameters<<"1\t";
        else
            parameters<<"0\t";
        if(checkBox13->isChecked())
            parameters<<"1\t";
        else
            parameters<<"0\t";
        if(checkBox14->isChecked())
            parameters<<"1\t";
        else
            parameters<<"0\t";
        if(checkBox15->isChecked())
            parameters<<"1\t";
        else
            parameters<<"0\t";
        if(checkBox16->isChecked())
            parameters<<"1\t";
        else
            parameters<<"0\t";
        if(checkBox17->isChecked())
            parameters<<"1\t";
        else
            parameters<<"0\t";
        if(checkBox18->isChecked())
            parameters<<"1\t";
        else
            parameters<<"0\t";
        if(checkBox19->isChecked())
            parameters<<"1\t";
        else
            parameters<<"0\t";
        if(checkBox20->isChecked())
            parameters<<"1\n";
        else
            parameters<<"0\n";
        ///
        int multiplier = comboBoxTime2->currentIndex()==0 ? 1 : comboBoxTime2->currentIndex()==1 ? 60 : 24*60;
        if(checkBox1->isChecked())
            parameters<<(lineEdit1->text()).toDouble()*multiplier<<"\t";
        else
            parameters<<"0\t";
        if(checkBox2->isChecked())
            parameters<<(lineEdit2->text()).toDouble()*multiplier<<"\t";
        else
            parameters<<"0\t";
        if(checkBox3->isChecked())
            parameters<<(lineEdit3->text()).toDouble()*multiplier<<"\t";
        else
            parameters<<"0\t";
        if(checkBox4->isChecked())
            parameters<<(lineEdit4->text()).toDouble()*multiplier<<"\n";
        else
            parameters<<"0\n";

        ////
        if(checkBox5->isChecked())
            parameters<<(lineEdit5->text()).toDouble()*multiplier<<"\t";
        else
            parameters<<"0\t";
        if(checkBox6->isChecked())
            parameters<<(lineEdit6->text()).toDouble()*multiplier<<"\t";
        else
            parameters<<"0\t";
        if(checkBox7->isChecked())
            parameters<<(lineEdit7->text()).toDouble()*multiplier<<"\t";
        else
            parameters<<"0\t";
        if(checkBox8->isChecked() || checkBox9->isChecked() || checkBox10->isChecked())
            parameters<<(lineEdit8->text()).toDouble()*multiplier<<"\t";
        else
            parameters<<"0\t";
        if(checkBox11->isChecked() || checkBox12->isChecked() || checkBox13->isChecked() || checkBox14->isChecked() || checkBox15->isChecked() || checkBox16->isChecked() || checkBox17->isChecked() || checkBox18->isChecked() || checkBox19->isChecked() || checkBox20->isChecked())
            parameters<<(lineEdit11->text()).toDouble()*multiplier<<"\n";
        else
            parameters<<"0\n";

        ////

        if(umComboBox->currentIndex() == 0)
            parameters<<"1\t";
        else
            parameters<<"2\t";

        if(smComboBox->currentIndex() == 0)
            parameters<<"2\t";
        else if(smComboBox->currentIndex() == 1)
            parameters<<"1\t";
        else
            parameters<<"3\t";

        if(rmComboBox->currentIndex() == 0)
            parameters<<"2\n";
        else if(rmComboBox->currentIndex() == 1)
            parameters<<"1\n";
        else
            parameters<<"3\n";

        /************************************************/

        if(DDradioButton->isChecked())
            parameters<<"1\t";
        else
            parameters<<"2\t";

        if(GScomboBox->currentIndex() == 0)
            parameters<<"1\t";
        else
            parameters<<"2\t";

        parameters<<qPrintable((KDlineEdit->text()))<<"\t";

        parameters<<qPrintable((CTlineEdit->text()))<<"\n";

        /*************************************************/

        parameters<<qPrintable((ATlineEdit->text()))<<"\t";

        parameters<<qPrintable((RTlineEdit->text()))<<"\t";

        parameters<<qPrintable((ISlineEdit->text()))<<"\t";

        parameters<<qPrintable((MSlineEdit->text()))<<"\t";

        parameters<<qPrintable((ETSlineEdit->text()))<<"\n";

        /***********/
        multiplier = comboBoxTime1->currentIndex()==0 ? 1 : comboBoxTime1->currentIndex()==1 ? 60 : 24*60;
        parameters<<(STlineEdit->text()).toDouble()*multiplier<<"\t";

        parameters<<(ETlineEdit->text()).toDouble()*multiplier<<"\t";

        if(SScomboBox->currentIndex() == 0)
            parameters<<"0\n";
        else
            parameters<<"1\n";

        parameters<<qPrintable((a_lineEdit->text()))<<"\t";
        parameters<<qPrintable((b_lineEdit->text()))<<"\n";

        if(checkBoxFillSurf->isChecked())
            parameters<<"1\t";
        else
            parameters<<"0\t";

        if(checkBoxFillSub->isChecked())
            parameters<<"1\n";
        else
            parameters<<"0\n";

        log.open(qPrintable(logFileName), ios::app);
        log<<" Done!</p>";
        log.close();
        MessageLog->reload();
        QApplication::processEvents();

    }
}
Beispiel #3
0
void LinkGridDlg::run()
{
  QgsProject *p = QgsProject::instance();
  QString projDir = p->readPath(p->readEntry("pihm", "projDir"));

  p->writeEntry("pihm", "strgrid", p->writePath(inputSTRFileLineEdit->text())); // 11
  p->writeEntry("pihm", "fdr", p->writePath(inputFDRFileLineEdit->text())); // 12
  p->writeEntry("pihm", "lnk", p->writePath(outputFileLineEdit->text())); // 13

  QDir dir = QDir::home();
  QString home = dir.homePath();
  QString logFileName(qPrintable(home+"/log.html"));
  ofstream log;
  log.open(qPrintable(logFileName));
  log<<"<html><body><font size=3 color=black><p> Verifying Files...</p></font></body></html>";
  log.close();
  messageLog->setSource(logFileName);
  messageLog->setFocus();
  messageLog->setModified(TRUE);

  QString inputSTRFileName((inputSTRFileLineEdit->text()));
  QString inputFDRFileName((inputFDRFileLineEdit->text()));
  QString outputFileName((outputFileLineEdit->text()));

  ifstream STRinFile;      STRinFile.open(qPrintable(inputSTRFileLineEdit->text()));
  ifstream FDRinFile;      FDRinFile.open(qPrintable(inputFDRFileLineEdit->text()));
  ofstream outFile;    outFile.open(qPrintable(outputFileLineEdit->text()));
  int runFlag = 1;

  log.open(qPrintable(logFileName), ios::app);
  if(inputSTRFileName.length()==0) {
    log<<"<p><font size=3 color=red> Error! Please input Stream Grid Input File</p>";
    runFlag = 0;
  }
  else{
    log<<"</p><p>Checking... "<<qPrintable(inputSTRFileName)<<"... ";
    if(STRinFile == NULL) {
      log<<"<font size=3 color=red> Error!</p>";
      qWarning("\n%s doesn't exist!", qPrintable(inputSTRFileLineEdit->text()));
      runFlag = 0;
    }
    else
      log<<"Done!</p>";
  }
  log.close();
  messageLog->reload();
  QApplication::processEvents();

  log.open(qPrintable(logFileName), ios::app);
  if(inputFDRFileName.length()==0) {
    log<<"<p><font size=3 color=red> Error! Please input Flow Dir. Grid Input File</p>";
    runFlag = 0;
  }
  else{
    log<<"</p><p>Checking... "<<qPrintable(inputFDRFileName)<<"... ";
    if(FDRinFile == NULL) {
      log<<"<font size=3 color=red> Error!</p>";
      qWarning("\n%s doesn't exist!", qPrintable(inputFDRFileLineEdit->text()));
      runFlag = 0;
    }
    else
      log<<"Done!</p>";
  }
  log.close();
  messageLog->reload();
  QApplication::processEvents();

  log.open(qPrintable(logFileName), ios::app);
  if(outputFileName.length()==0) {
    log<<"<p><font size=3 color=red> Error! Please input Link Grid Output File</p>";
    runFlag = 0;
  }
  else{
    log<<"</p><p>Checking... "<<qPrintable(outputFileName)<<"... ";
    if(outFile == NULL) {
      log<<"<font size=3 color=red> Error!</p>";
      qWarning("\nCan not open output file name");
      runFlag = 0;
    }
    else
      log<<"Done!</p>";
  }
  log.close();
  messageLog->reload();
  QApplication::processEvents();

  if(runFlag == 1) {

    log.open(qPrintable(logFileName), ios::app);
    log<<"<p>Running...";
    log.close();
    messageLog->reload();
    QApplication::processEvents();

    int err1 = streamSegmentation((char *)qPrintable(inputSTRFileName), (char *)qPrintable(inputFDRFileName), (char *)qPrintable(outputFileName), "node.dat" );

    log.open(qPrintable(logFileName), ios::app);
    log<<" Done!</p>";
    log.close();
    messageLog->reload();
    QApplication::processEvents();

    if(showSG_DFrame->isChecked() == 1) {
      //QgsRasterLayer *tempLayer = new QgsRasterLayer("/backup/pihm/RasterProcessing/FillPits", "morgedem.asc");
      //??
      applicationPointer->addRasterLayer(outputFileName);
    }
  }
}
Beispiel #4
0
void GeolFile::on_pushButtonRun_clicked()
{
  QgsProject *p = QgsProject::instance();
  QString projDir = p->readPath(p->readEntry("pihm", "projDir"));

  p->writeEntry("pihm", "geol", p->writePath(ui->lineEditGeolTexture->text())); // 89
  p->writeEntry("pihm", "/model/geol", p->writePath(ui->lineEditGeolFile->text())); // 90

  int RunFlag=1;
  ifstream inFile;
  ofstream outFile;
  inFile.open((ui->lineEditGeolTexture->text()).toAscii());
  outFile.open((ui->lineEditGeolFile->text()).toAscii());

  ofstream logFile;
  QDir dir = QDir::home();
  QString home = dir.homePath();
  QString logFileName(home+"/log.html");
  logFile.open(qPrintable(logFileName));
  logFile<<"<html><body><font size=3 color=black> Verifying Files...<br>";
  logFile.close();
  ui->textBrowser->setSource(logFileName);
  ui->textBrowser->setFocus();
  ui->textBrowser->setModified(TRUE);

  logFile.open(qPrintable(logFileName), ios::app);
  logFile<<"Checking Geol Texture File... ";
  if (inFile == NULL) {
    logFile<<"could NOT open file.  ERROR<br>";
    RunFlag = 0;
  }
  else
    logFile<<"Done!<br>";
  logFile<<"Checking .Geol File... ";
  if (outFile == NULL) {
    logFile<<"could NOT open file to write.  ERROR<br>";
    RunFlag = 0;
  }
  else
    logFile<<"Done!<br>";
  logFile.close();
  ui->textBrowser->reload();

  if(RunFlag == 1) {

    logFile.open(qPrintable(logFileName), ios::app);
    logFile<<"Generating .GEOL file... ";

    char tempS[500];
    int count=0;
    double data[1000][6];
    // (1) MUKEY (2) SILT (3) CLAY (4) ORGANIC_MATTER (5) BULK_DENSITY //<(6) TOPSOIL>
    //inFile>>tempS; inFile>>tempS; inFile>>tempS; inFile>>tempS; inFile>>tempS; //<inFile>>tempS;>
    inFile.getline(tempS, 500);
    while(inFile) {
      inFile>>data[count][0];       //MUKEY
      inFile>>data[count][1];       //SILT
      inFile>>data[count][2];       //CLAY
      inFile>>data[count][3]; if(data[count][3]<0) data[count][3]=2.5;       //ORGANIC MATTER
      inFile>>data[count][4]; if(data[count][4]<0) data[count][4]=1.3;      // BULK DENSITY (g/cm3)
      //inFile>>data[count][5]; // TOP SOIL
      data[count][5] = 0;       // Forced for GEOL i.e. TOPSOIL = 0
      //? outFile<<"-$ "<<data[count][0]<<"\t"<<data[count][1]<<"\t"<<data[count][2]<<"\t"<<data[count][3]<<"\t"<<data[count][4]<<"\t"<<data[count][5]<<" $-  \n";
      count++;
    }
    count--;
    outFile<<count<<"\n";

    double S, C, OM, D;     //S=SILT, C=CLAY, OM=ORGANIC MATTER, D=BULK DENSITY,
    int topsoil;     //TOPSOIL
    double **outData;
    outData = (double **)malloc(count*sizeof(double *));
    for(int i=0; i<count; i++) {
      outData[i] = (double *)malloc(10*sizeof(double));
      for(int j=0; j<10; j++)
        outData[i][j]=0.0;

      S = data[i][1];
      C = data[i][2];
      OM = data[i][3];
      D = data[i][4];
      topsoil = (int) data[i][5];

      //Index
      outData[i][0]=i+1;
      outFile<<outData[i][0]<<"\t";
      //Ksat
      //outData[i][1]= (7.755+0.03252*S+0.93*topsoil-0.967*D*D-0.000484*C*C-0.000322*S*S+0.001/S-0.0748/OM-0.643*log(S)-0.01398*D*C-0.1673*D*OM+0.02986*topsoil*C-0.03305*topsoil*S);
      outData[i][1]=exp(7.755+0.03252*S+0.93*topsoil-0.967*D*D-0.000484*C*C-0.000322*S*S+0.001/S-0.0748/OM-0.643*log(S)-0.01398*D*C-0.1673*D*OM+0.02986*topsoil*C-0.03305*topsoil*S);
      outData[i][1]=outData[i][1]/100;       //[cm per d] to [m per d]
      outFile<<outData[i][1]*10<<"\t";       //KsatH = KsatV * 10
      //Ksat
      outFile<<outData[i][1]<<"\t";       //KsatV
      //ThetaS
      //outData[i][2]=(0.7919+0.001691*C-0.29619*D-0.000001491*S*S+0.0000821*OM*OM+0.02427/C+0.01113/S+0.01472*log(S)-0.0000733*OM*C-0.000619*D*C-0.001183*D*OM-0.0001664*topsoil*S);
      outData[i][2]=  (0.7919+0.001691*C-0.29619*D-0.000001491*S*S+0.0000821*OM*OM+0.02427/C+0.01113/S+0.01472*log(S)-0.0000733*OM*C-0.000619*D*C-0.001183*D*OM-0.0001664*topsoil*S);
      outFile<<outData[i][2]<<"\t";
      //ThetaR
      outData[i][3]=0.01;
      outFile<<outData[i][3]<<"\t";
      //InfD
      //outData[i][4]=0.10;
      //outFile<<outData[i][4]<<"\t";
      //Alpha
      //outData[i][5]=log(-14.96+0.03135*C+0.0351*S+0.646*OM+15.29*D-0.192*topsoil-4.671*D*D-0.000781*C*C-0.00687*OM*OM+0.0449/OM+0.0663*log(S)+0.1482*log(OM)-0.04546*D*S-0.4852*D*OM+0.00673*topsoil*C);
      outData[i][5]=  exp(-14.96+0.03135*C+0.0351*S+0.646*OM+15.29*D-0.192*topsoil-4.671*D*D-0.000781*C*C-0.00687*OM*OM+0.0449/OM+0.0663*log(S)+0.1482*log(OM)-0.04546*D*S-0.4852*D*OM+0.00673*topsoil*C);
      outData[i][5]= 100*outData[i][5]; //UNIT CONVERSION 1/cm TO 1/m
      outFile<<outData[i][5]<<"\t";
      //Beta
      outData[i][6]=1+exp(-25.23-0.02195*C+0.0074*S-0.1940*OM+45.5*D-7.24*D*D+0.0003658*C*C+0.002885*OM*OM-12.81/D-0.1524/S-0.01958/OM-0.2876*log(S)-0.0709*log(OM)-44.6*log(D)-0.02264*D*C+0.0896*D*OM+0.00718*topsoil*C);
      outFile<<outData[i][6]<<"\t";
      //hAreaF
      outData[i][7]=0.01;
      outFile<<outData[i][7]<<"\t";
      //macKsatV
      outData[i][8]=100000*outData[i][1];
      outFile<<outData[i][8]<<"\t";
      //macD
      outData[i][9]=1.0;
      outFile<<outData[i][9]<<"\n";
    }
    logFile<<"Done!<br>";
    logFile<<"GeolFile Module - COMPLETE";
    logFile.close();
    ui->textBrowser->reload();
    QApplication::processEvents();
  }
Beispiel #5
0
void PIHMgis::runImportProject(){
  QString projFile = QFileDialog::getOpenFileName(NULL, "Choose pihmgis project file to import", QString::null, "PIHM GIS project (*.pihmgis)");
  if (!projFile.isEmpty()) {
  typedef enum {Skip, Vector, Raster, Path, String, Int, Double} What;
  typedef struct {
    What what;
    const char* prop;
  } Action;
  Action lines[] = {  //{Skip, "/model/mesh" }; // Excel semi-generated
    {Skip, NULL},   // date
    { Skip, "projDir"},   // line 2,
    { Raster, "dem" },   // line 3, source DEM
    { Raster, "fill" },   // line 4, sink filled DEM
    { Skip, "fill" },   // line 5,
    { Raster, "fdr" },   // line 6,
    { Raster, "fac" },   // line 7,
    { Skip, "fac" },   // line 8, See 7
    { Raster, "strgrid" },   // line 9, Streams raster
    { Int, "facThreshold" },   // line 10, Threshold for stream acc
    { Skip, "strgrid" },   // line 11, See 9
    { Skip, "fdr" },   // line 12, See 6
    { Raster, "lnk" },   // line 13,
    { Skip, "strgrid" },   // line 14, See 11
    { Skip, "fdr" },   // line 15, See 6
    { Vector, "strline" },   // line 16, Streams shapefile
    { Skip, "lnk" },   // line 17,
    { Skip, "fdr" },   // line 18,
    { Raster, "catgrid" },   // line 19,
    { Skip, "catgrid" },   // line 20,
    { Vector, "catpoly" },   // line 21,
    { Skip, "catpoly" },   // line 22, See 21
    { Vector, "catdiss" },   // line 23,
    { Skip, "catdiss" },   // line 24, See 23
    { Vector, "catline" },   // line 25,
    { Skip, "catline" },   // line 26,
    { Vector, "catsimple" },   // line 27,
    { Double, "cattol" },   // line 28, line simplification tolerance for diss polylines?
    { Vector, "strline" },   // line 29,
    { Vector, "strsimple" },   // line 30,
    { Double, "strtol" },   // line 31, line simplification tolerance for streams?
    { Skip, "catsimple" },   // line 32,
    { Vector, "catsplit" },   // line 33,
    { Skip, "strsimple" },   // line 34,
    { Vector, "strsplit" },   // line 35,
    { Skip, "catsplit" },   // line 36, See 33
    { Skip, "strsplit" },   // line 37, See 35
    { Vector, "merge" },   // line 38,
    { Skip, "merge" },   // line 39,
    { Skip, "merge" },   // line 40,
    { Path, "pslg" },   // line 41, Planar Straight Line Graph
    { Skip, "pslg" },   // line 42,
    { Double, "triangle/angle" },   // line 43, triangulation parameter
    { Double, "triangle/area" },   // line 44, triangulation parameter
    { String, "triangle/other" },   // line 45, triangulation parameter
    { Path, "ele" },   // line 46,
    { Path, "node" },   // line 47,
    { Vector, "TIN" },   // line 48, TIN/ele shp file
    { Path, "/model/mesh" },   // line 49,
    { String, "ID" },   // line 50, file ID
    { Skip, NULL },   // line 51,
    { Skip, NULL },   // line 52,
    { Skip, NULL },   // line 53,
    { Path, "Precip" },   // line 54,
    { Path, "Temp" },   // line 55,
    { Path, "Humid" },   // line 56,
    { Path, "Wind" },   // line 57,
    { Path, "G" },   // line 58,
    { Path, "Rn" },   // line 59,
    { Path, "P" },   // line 60,
    { Path, "Soil" },   // line 61,
    { Path, "Geol" },   // line 62,
    { Path, "LC" },   // line 63,
    { Path, "MF" },   // line 64,
    { Path, "MP" },   // line 65,
    { Path, "ISIC" },   // line 66,
    { Path, "SnowIC" },   // line 67,
    { Path, "OverlandIC" },   // line 68,
    { Path, "UnSatIC" },   // line 69,
    { Path, "SatIC" },   // line 70,
    { Path, "BC" },   // line 71,
    { Path, "Source" },   // line 72,
    { Skip, NULL },   // line 73,
    { Path, "/model/att" },   // line 74,
    { Skip, "strsplit" },   // line 75, input stream
    { Skip, "ele" },   // line 76,
    { Skip, "node" },   // line 77,
    { Path, "neigh" },   // line 78,
    { Skip, NULL },   // line 79,
    { Path, "/model/riv" },   // line 80, .riv file
    { Path, "rivdec" },   // line 81, For spatial plots
    { Path, "/model/para" },   // line 82,
    { Skip, NULL },   // line 83,
    { Skip, NULL },   // line 84,
    { Skip, NULL },   // line 85,
    { Skip, NULL },   // line 86,
    { Path, "soil" },   // line 87, in
    { Path, "/model/soil" },   // line 88, out
    { Path, "geol" },   // line 89, in
    { Path, "/model/geol" },   // line 90, out
    { Path, "nlcd" },   // line 91, NLCD source?
    { Path, "/model/lc" },   // line 92,
    { Path, "/model/calib" },   // line 93,
    { Path, "/model/init" },   // line 94,
    { Skip, NULL },   // line 95,
    { Skip, NULL },   // line 96,
    { Skip, NULL },   // line 97,
    { Skip, NULL },   // line 98,
    { Skip, NULL },   // line 99,
    { Double, "res" },   // line 100, DEM resolution
    { Double, "step0" },   // line 101, prep steps, adjustments
    { Double, "step1" },   // line 102,
    { Double, "step2" },   // line 103,
    { Double, "step3" },   // line 104,
    { Double, "step4" },   // line 105,
    { Double, "step5" },   // line 106,
    { Double, "step6" },   // line 107,
    { Double, "step7" },   // line 108,
    { Double, "step8" },   // line 109, adjustments
    { Double, "scale" },   // line 110,
    { Double, "start" },   // line 111, from .para file
    { Double, "finish" },   // line 112, from .para file
    { Skip, NULL },   // line 113,
    { Skip, NULL },   // line 114,
    { Skip, NULL },   // line 115,
    { Skip, NULL },   // line 116,
    { Skip, NULL },   // line 117,
    { Skip, NULL },   // line 118,
    { Skip, NULL },   // line 119,
    { Skip, NULL },   // line 120,
    { Skip, NULL },   // line 121,
  };
  int lines_size = sizeof(lines)/sizeof(lines[0]);
  QFile file(projFile);
  if (file.open(QFile::ReadOnly)) {
    QTextStream in(&file);
    in.readLine();   // date
    QString oldDir = in.readLine();
    QRegExp rx("[\\/]"); // file could have been created on other platform, can't rely on QFileInfo
    qDebug("oldDir = %s", qPrintable(oldDir));
    oldDir = oldDir.left(oldDir.lastIndexOf(rx));
    int oldDirLength = oldDir.length();
    qDebug("oldDir = %s, oldDirLength = %d", qPrintable(oldDir), oldDirLength);
    QFileInfo fi(projFile);
    QString projDir = fi.absoluteDir().absPath();
    qDebug("new projDir is %s", qPrintable(projDir));
    QgsProject *p = QgsProject::instance();
    QString s = projFile.left(projFile.length() - 7) + "qgs";
    p->setFileName(s);   // instead of pihmgis
    p->writeEntry("Paths", "/Absolute", false);
    p->writeEntry("pihm", "projDir", QString("."));
    bool ok;
    double d;
    int i;
    for( int idx=2; idx<lines_size && !in.atEnd(); ++idx) {
      s = in.readLine();
      switch (lines[idx].what) {
      case Int:
        i = s.toInt(&ok);
        if (ok)
          p->writeEntry("pihm", lines[idx].prop, i);
        break;
      case Double:
        d = s.toDouble(&ok);
        if (ok)
          p->writeEntry("pihm", lines[idx].prop, d);
        break;
      case Path:
      {
        qDebug("Path Was %s", qPrintable(s));
        s = ".." + s.mid(oldDirLength);
        qDebug("Truncated version is %s", qPrintable(s));
        QFileInfo fi(projDir, s);
        s = p->writePath(fi.canonicalFilePath());
        qDebug("Became %s", qPrintable(s));
      }       // no break!! Don't move
      case String:
        p->writeEntry("pihm", lines[idx].prop, s);
        break;
      case Raster:
      {
        qDebug("Raster Was %s", qPrintable(s));
        s = ".." + s.mid(oldDirLength);
        qDebug("Truncated version is %s", qPrintable(s));
        QFileInfo fi(projDir, s);
        s = fi.canonicalFilePath();
        qDebug("Became %s", qPrintable(s));
      }
        p->writeEntry("pihm", lines[idx].prop, p->writePath(s));
        mQGisIface->addRasterLayer(s);
        break;
      case Vector:
      {
        qDebug("Vector Was %s", qPrintable(s));
        QFileInfo fi(projDir, ".." + s.mid(oldDirLength));
        s = fi.canonicalFilePath();
        qDebug("Became %s", qPrintable(s));
      }
        p->writeEntry("pihm", lines[idx].prop, p->writePath(s));
        mQGisIface->addVectorLayer(s, QString::null, "ogr");
        break;
      }
    }
  }
  }
}
Beispiel #6
0
void InitFile::on_pushButton_Run_clicked()
{
  QgsProject *p = QgsProject::instance();
  QString projDir = p->readPath(p->readEntry("pihm", "projDir"));

  p->writeEntry("pihm", "/model/init", p->writePath(ui->lineEditInitFile->text())); // 94

  int RunFlag=1;
  ifstream inFileMesh, inFileRiv;
  ofstream outFile;
  inFileMesh.open((ui->lineEditMeshFile->text()).toAscii());
  inFileRiv.open((ui->lineEditRivFile->text()).toAscii());
  outFile.open((ui->lineEditInitFile->text()).toAscii());

  ofstream logFile;
  QDir dir = QDir::home();
  QString home = dir.homePath();
  QString logFileName(home+"/log.html");
  logFile.open(qPrintable(logFileName));
  logFile<<"<html><body><font size=3 color=black> Verifying Files...<br>";
  logFile.close();
  ui->textBrowser->setSource(logFileName);
  ui->textBrowser->setFocus();
  ui->textBrowser->setModified(TRUE);

  logFile.open(qPrintable(logFileName), ios::app);
  logFile<<"Checking Mesh File... ";
  if (inFileMesh == NULL) {
    logFile<<"could NOT open file.  ERROR<br>";
    RunFlag = 0;
  }
  else
    logFile<<"Done!<br>";
  logFile<<"Checking Riv File... ";
  if (inFileRiv == NULL) {
    logFile<<"could NOT open file.  ERROR<br>";
    RunFlag = 0;
  }
  else
    logFile<<"Done!<br>";
  logFile<<"Checking Init File... ";
  if (outFile == NULL) {
    logFile<<"could NOT open file to write.  ERROR<br>";
    RunFlag = 0;
  }
  else
    logFile<<"Done!<br>";
  logFile.close();
  ui->textBrowser->reload();

  if(RunFlag == 1) {
    logFile.open(qPrintable(logFileName), ios::app);
    logFile<<"Generating INIT file... ";
    int NumEle, NumRiv;
    inFileMesh >> NumEle;
    inFileRiv  >> NumRiv;

    for(int i=0; i<NumEle; i++) {
      outFile<<ui->interception->text().toFloat()<<"\t";
      outFile<<ui->snow->text().toFloat()<<"\t";
      outFile<<ui->surface->text().toFloat()<<"\t";
      outFile<<ui->unsaturated->text().toFloat()<<"\t";
      outFile<<ui->saturated->text().toFloat()<<"\n";
    }
    for(int i=0; i<NumRiv; i++) {
      outFile<<ui->river->text().toFloat()<<"\t";
      outFile<<ui->riverBed->text().toFloat()<<"\n";
    }
    logFile<<"Done!<br>";
    logFile<<"InitFile Module - COMPLETE";
    logFile.close();
    ui->textBrowser->reload();
    QApplication::processEvents();
  }