Alireza Ghalavand Ответов: 0

Ошибка Qgis “растровый слой не может создать экземпляр поставщика данных 'gdal'” в qt C++


Когда я пытаюсь добавить растровый слой, я получаю эту ошибку от QgsRasterLayer::IsValid()!!! Может ли кто-нибудь сказать мне, почему это происходит!? Я новичок в qgis, поэтому не могли бы вы объяснить подробнее. первый func "onAddLayer" используется для нажатия кнопки Add, а второй func определяется для добавления растрового слоя.

Примечание: Я использую QGis 2.18 и gdal 2.3.2 в fedora.

Что я уже пробовал:

void  MainWindow::onAddLayer()
{
  const auto  path = QFileDialog::getOpenFileName(this, "SELECT GIS MAP LAYER", QDir(
                                                    _lastMapDir).path());

  if (path.isEmpty() || path.isNull())
  {
    return;
  }

  addRasterLayer(path);
  _lastMapDir = QDir(path).canonicalPath();
}

void  MainWindow::addRasterLayer(const QFileInfo &info)
{
  LOG(QString("adding map layer %1").arg(info.filePath()));
  QString  errMsg;

//  if (!QgsRasterLayer::isValidRasterFileName(info.filePath(), errMsg))
//  {
//    LOG(errMsg);

//    return;
//  }

  QScopedPointer<QgsRasterLayer>  layer(new QgsRasterLayer(info.filePath(), info.baseName()));

  if (!layer->isValid())
  {
    LOG(QString("failed to add layer (%1)").arg(layer->error().message(
                                                  QgsErrorMessage::Format::Text)));

    return;
  }

  save("last_layer_path", info.filePath(), "gis");
  _rasterProvider = layer->dataProvider();
  _mapCanvas->freeze(true);
  auto  item = QgsMapCanvasLayer(layer.take(), true);
  _mapCanvas->setExtent(item.layer()->extent());
  QgsMapLayerRegistry::instance()->addMapLayer(item.layer(), true);
  _mapCanvas->setLayerSet(QList<QgsMapCanvasLayer>() << item);
  _mapCanvas->freeze(false);
  _mapCanvas->setVisible(true);
  _mapCanvas->refresh();
  statusBar()->showMessage(QString("%1 LOADED").arg(info.fileName()), 3000);
}

0 Ответов