Ошибка Qt gdal: «Открыть» не является членом «OGRSFDriverRegistrar» - PullRequest
0 голосов
/ 03 мая 2018

Я работаю над проектом Qt с библиотеками gdal.

Qt5.9.1. Ubuntu 16.10 LTS.

Я получаю сообщение об ошибке и понятия не имею, что происходит не так.

#include <QCoreApplication>
#include <QFile>
#include "ogrsf_frmts.h"

int main(int argc, char *argv[])
{
    OGRRegisterAll();
    OGRDataSource *source;

    source = OGRSFDriverRegistrar::Open( <path to s57 file>, FALSE );
    if( source == NULL )
    {
        printf( "Open failed.\n" );
        exit( 1 );
    }
}

Я получаю следующую ошибку:

main.cpp:11: error: 
'Open' is not a member of 'OGRSFDriverRegistrar';

source = OGRSFDriverRegistrar::Open( <path to s57 chart file>, FALSE );

Кто-нибудь может помочь мне в устранении ошибки?

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Найден учебник по OGR . Функции объяснены с примером здесь. Первоначальная помощь была оказана @Petar. При дальнейшем изучении сайта я нашел точные методы для работы.

GDALDataset *dataSet;
GDALAllRegister();
dataSet = (GDALDataset*)GDALOpenEx("ENCFILE.000",GDAL_OF_VECTOR,NULL,NULL,NULL);
if(dataSet == NULL)
{
    printf( "Open failed.\n" );
    exit( 1 );
}
else
{
    printf( "SUCCESS.\n" );
}
0 голосов
/ 03 мая 2018

Класс OGRSFDriverRegistrar помечен как устаревший класс и поэтому устарел.

В документах предлагается использовать GDALDriverManager () , как указано здесь:

Используйте GDALDriverManager в своем новом коде! Этот класс может быть удален в более поздняя версия.

Какую версию GDAL вы используете? Возможно, OGRSFDriverRegistrar уже удален.

В любом случае удалено или нет, я советую попробовать обновить код с помощью GDALDriverManager.

РЕДАКТИРОВАТЬ: Добавлен пример.

#include "gdal_priv.h"
#include "cpl_conv.h" // for CPLMalloc()
int main()
{
    GDALDataset  *poDataset;
    GDALAllRegister();
    poDataset = (GDALDataset *) GDALOpen( pszFilename, GA_ReadOnly );
    if( poDataset == NULL )
    {
        ...;
    }
}

взято из GDAL API учебник .

...