⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qgsgrassmodule.cpp

📁 一个非常好的GIS开源新版本
💻 CPP
📖 第 1 页 / 共 5 页
字号:
        mItems.push_back(mi);      }       else if ( optionType == "field" )       {        QgsGrassModuleField *mi = new QgsGrassModuleField (           mModule, this, key, e,           gDocElem, gnode, mParent );        layout->addWidget ( mi );        mItems.push_back(mi);      }       else if ( optionType == "selection" )       {        QgsGrassModuleSelection *mi = new QgsGrassModuleSelection (           mModule, this, key, e,           gDocElem, gnode, mParent );        layout->addWidget ( mi );        mItems.push_back(mi);      }       else if ( optionType == "file" )       {        QgsGrassModuleFile *mi = new QgsGrassModuleFile (           mModule, key, e, gDocElem, gnode, mParent );        layout->addWidget ( mi );        mItems.push_back(mi);      }       else if ( optionType == "flag" )        {        QgsGrassModuleFlag *flag = new QgsGrassModuleFlag (           mModule, key, e, gDocElem, gnode, mParent );        layout->addWidget ( flag );        mItems.push_back(flag);      }    }    n = n.nextSibling();  }  // Create list of flags  n = gDocElem.firstChild();  while( !n.isNull() )   {    QDomElement e = n.toElement();    if( !e.isNull() )    {      QString optionType = e.tagName();      QgsDebugMsg("optionType = " + optionType);      if ( optionType == "flag" )      {        QString name = e.attribute("name").trimmed();        QgsDebugMsg("name = " + name);        mFlagNames.append( name );      }    }    n = n.nextSibling();  }  layout->addStretch();}QStringList QgsGrassModuleStandardOptions::arguments(){  QStringList arg;  for ( unsigned int i = 0; i < mItems.size(); i++ )   {    QStringList list = mItems[i]->options();    for ( QStringList::Iterator it = list.begin();       it != list.end(); ++it )     {      arg.append ( *it );    }  }   return arg;}QgsGrassModuleItem *QgsGrassModuleStandardOptions::item ( QString id ){  QgsDebugMsg("id = " + id);  for ( unsigned int i = 0; i < mItems.size(); i++ )  {    if ( mItems[i]->id() == id )     {      return mItems[i];    }  }  QMessageBox::warning( 0, tr("Warning"), tr("Item with id ") + id + tr(" not found" ) );  return 0;}QStringList QgsGrassModuleStandardOptions::checkOutput(){  QgsDebugMsg("called.");  QStringList list;  for ( unsigned int i = 0; i < mItems.size(); i++ )   {    if ( typeid(*(mItems[i])) != typeid (QgsGrassModuleOption) ) {      continue;    }    QgsGrassModuleOption *opt =       dynamic_cast<QgsGrassModuleOption *> ( mItems[i] );    QgsDebugMsg("opt->key() = " + opt->key());    if ( opt->isOutput() )    {      QString out = opt->outputExists();      if ( !out.isNull() )       {        list.append ( out );      }    }  }   return list;}void QgsGrassModuleStandardOptions::freezeOutput(){  QgsDebugMsg("called.");#ifdef WIN32  for ( unsigned int i = 0; i < mItems.size(); i++ )   {    if ( typeid(*(mItems[i])) != typeid (QgsGrassModuleOption) ) {      continue;    }    QgsGrassModuleOption *opt =       dynamic_cast<QgsGrassModuleOption *> ( mItems[i] );    QgsDebugMsg("opt->key() = " + opt->key());    if ( opt->isOutput()       && opt->outputType() == QgsGrassModuleOption::Vector )    {      QgsDebugMsg("freeze vector layers");      QChar sep = '/';      int nlayers = mCanvas->layerCount();      for ( int i = 0; i < nlayers; i++ )       {        QgsMapLayer *layer = mCanvas->getZpos(i);        if (  layer->type() != QgsMapLayer::VECTOR ) continue;        QgsVectorLayer *vector = (QgsVectorLayer*)layer;        if ( vector->providerType() != "grass" ) continue;        //TODO dynamic_cast ?        QgsGrassProvider *provider = (QgsGrassProvider *) vector->getDataProvider();        // TODO add map() mapset() location() gisbase() to grass provider        QString source = QDir::cleanPath ( provider->dataSourceUri() );        QgsDebugMsg("source = " + source);        // Check GISBASE and LOCATION        QStringList split = QStringList::split ( sep, source );        if ( split.size() < 4 ) continue;        split.pop_back(); // layer        QString map = split.last();        split.pop_back(); // map        QString mapset = split.last();        split.pop_back(); // mapset        QString loc =  source.remove ( QRegExp("/[^/]+/[^/]+/[^/]+$") );         loc = QDir(loc).canonicalPath();        QDir curlocDir ( QgsGrass::getDefaultGisdbase() + sep + QgsGrass::getDefaultLocation() );        QString curloc = curlocDir.canonicalPath();        if ( loc != curloc ) continue;        if ( mapset != QgsGrass::getDefaultMapset() ) continue;        if ( provider->isFrozen() ) continue;        provider->freeze();      }    }  } #endif}void QgsGrassModuleStandardOptions::thawOutput(){  QgsDebugMsg("called.");#ifdef WIN32  for ( unsigned int i = 0; i < mItems.size(); i++ )   {    if ( typeid(*(mItems[i])) != typeid (QgsGrassModuleOption) ) {      continue;    }    QgsGrassModuleOption *opt =       dynamic_cast<QgsGrassModuleOption *> ( mItems[i] );    QgsDebugMsg("opt->key() = " + opt->key());    if ( opt->isOutput()       && opt->outputType() == QgsGrassModuleOption::Vector )    {      QgsDebugMsg("thaw vector layers");      QChar sep = '/';      int nlayers = mCanvas->layerCount();      for ( int i = 0; i < nlayers; i++ )       {        QgsMapLayer *layer = mCanvas->getZpos(i);        if (  layer->type() != QgsMapLayer::VECTOR ) continue;        QgsVectorLayer *vector = (QgsVectorLayer*)layer;        if ( vector->providerType() != "grass" ) continue;        //TODO dynamic_cast ?        QgsGrassProvider *provider = (QgsGrassProvider *) vector->getDataProvider();        // TODO add map() mapset() location() gisbase() to grass provider        QString source = QDir::cleanPath ( provider->dataSourceUri() );        QgsDebugMsg("source = " + source);        // Check GISBASE and LOCATION        QStringList split = QStringList::split ( sep, source );        if ( split.size() < 4 ) continue;        split.pop_back(); // layer        QString map = split.last();        split.pop_back(); // map        QString mapset = split.last();        split.pop_back(); // mapset        QString loc =  source.remove ( QRegExp("/[^/]+/[^/]+/[^/]+$") );         loc = QDir(loc).canonicalPath();        QDir curlocDir ( QgsGrass::getDefaultGisdbase() + sep + QgsGrass::getDefaultLocation() );        QString curloc = curlocDir.canonicalPath();        if ( loc != curloc ) continue;        if ( mapset != QgsGrass::getDefaultMapset() ) continue;        if ( !provider->isFrozen() ) continue;        provider->thaw();      }    }  } #endif}QStringList QgsGrassModuleStandardOptions::output(int type ){  QgsDebugMsg("called.");  QStringList list;  for ( unsigned int i = 0; i < mItems.size(); i++ )   {    if ( typeid(*(mItems[i])) != typeid (QgsGrassModuleOption) ) {      continue;    }    QgsGrassModuleOption *opt =       dynamic_cast<QgsGrassModuleOption *> ( mItems[i] );    QgsDebugMsg("opt->key() = " + opt->key());    if ( opt->isOutput() )    {      if ( opt->outputType() == type )      {        QString out = opt->value();        list.append ( out );      }    }  }   return list;}QStringList QgsGrassModuleStandardOptions::ready(){  QgsDebugMsg("QgsGrassModuleStandardOptions::ready()");  QStringList list;  for ( unsigned int i = 0; i < mItems.size(); i++ )   {    QString err = mItems[i]->ready();    if ( !err.isNull() )     {      list.append ( err );    }  }   return list;}QStringList QgsGrassModuleStandardOptions::checkRegion(){  QgsDebugMsg("called.");  QStringList list;  struct Cell_head currentWindow;  if  ( !QgsGrass::region ( QgsGrass::getDefaultGisdbase(),     QgsGrass::getDefaultLocation(),     QgsGrass::getDefaultMapset(), &currentWindow ) )  {    QMessageBox::warning( 0, tr("Warning"), tr("Cannot get current region") );    return list;  }  for ( unsigned int i = 0; i < mItems.size(); i++ )   {    if ( typeid(*(mItems[i])) != typeid (QgsGrassModuleInput) ) {      continue;    }    struct Cell_head window;    QgsGrassModuleInput *item = dynamic_cast<QgsGrassModuleInput *>      (mItems[i]);    int mapType;    switch ( item->type() ) {  case QgsGrassModuleInput::Raster :    mapType = QgsGrass::Raster;    break;  case QgsGrassModuleInput::Vector :    mapType = QgsGrass::Vector;    break;    }    QStringList mm = item->currentMap().split("@");    QString map = mm.at(0);    QString mapset = QgsGrass::getDefaultMapset();    if  ( mm.size() > 1 ) mapset = mm.at(1);    if ( !QgsGrass::mapRegion ( mapType,       QgsGrass::getDefaultGisdbase(),      QgsGrass::getDefaultLocation(), mapset, map,      &window ) )    {      QMessageBox::warning( 0, tr("Warning"), tr("Cannot check region "        "of map ") + item->currentMap() );      continue;    }    if ( G_window_overlap ( &currentWindow ,      window.north, window.south, window.east, window.west) == 0 )    {      list.append ( item->currentMap() );    }  }   return list;}bool QgsGrassModuleStandardOptions::inputRegion ( struct Cell_head *window, bool all ){  QgsDebugMsg("called.");  // Get current resolution   if  ( !QgsGrass::region ( QgsGrass::getDefaultGisdbase(),     QgsGrass::getDefaultLocation(),     QgsGrass::getDefaultMapset(), window ) )  {    QMessageBox::warning( 0, tr("Warning"), tr("Cannot get current region" ) );    return false;  }  int rasterCount = 0;  int vectorCount = 0;  for ( unsigned int i = 0; i < mItems.size(); i++ )   {    if ( typeid(*(mItems[i])) != typeid (QgsGrassModuleInput) ) {      continue;    }    struct Cell_head mapWindow;    QgsGrassModuleInput *item = dynamic_cast<QgsGrassModuleInput *>      (mItems[i]);    if  ( !all && !item->useRegion() ) continue;    int mapType;    switch ( item->type() ) {    case QgsGrassModuleInput::Raster :      mapType = QgsGrass::Raster;      break;    case QgsGrassModuleInput::Vector :      mapType = QgsGrass::Vector;      break;    }    QStringList mm = item->currentMap().split("@");    QString map = mm.at(0);    QString mapset = QgsGrass::getDefaultMapset();    if  ( mm.size() > 1 ) mapset = mm.at(1);    if ( !QgsGrass::mapRegion ( mapType,       QgsGrass::getDefaultGisdbase(),      QgsGrass::getDefaultLocation(), mapset, map,      &mapWindow ) )    {      QMessageBox::warning( 0, tr("Warning"), tr("Cannot set region "        "of map ") + item->currentMap() );      return false;    }    // TODO: best way to set resolution ?    if ( item->type() == QgsGrassModuleInput::Raster      && rasterCount == 0 )     {      QgsGrass::copyRegionResolution ( &mapWindow, window );    }    if ( rasterCount + vectorCount == 0 )     {      QgsGrass::copyRegionExtent ( &mapWindow, window );    }    else    {      QgsGrass::extendRegion ( &mapWindow, window );    }    if ( item->type() == QgsGrassModuleInput::Raster )       rasterCount++;    else if ( item->type() == QgsGrassModuleInput::Vector )      vectorCount++;  }   G_adjust_Cell_head3 ( window, 0, 0, 0 );  return true;}bool QgsGrassModuleStandardOptions::requestsRegion(){  QgsDebugMsg("called.");  for ( unsigned int i = 0; i < mItems.size(); i++ )   {    if ( typeid(*(mItems[i])) != typeid (QgsGrassModuleInput) ) {      continue;    }    QgsGrassModuleInput *item = dynamic_cast<QgsGrassModuleInput *>      (mItems[i]);    if ( item->useRegion() ) return true;  }  return false;}bool QgsGrassModuleStandardOptions::usesRegion (){  QgsDebugMsg("called.");  for ( unsigned int i = 0; i < mItems.size(); i++ )   {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -