c++gdal

GPKG not recognized as a supported file format


I try to read in a gpkg file to extract geo informations like streets and buildings.

Therefor I started with this code:

#include "gdal_priv.h"
#include <iostream>

int main() {
    GDALDataset* poDataset;
    GDALAllRegister();

    std::cout << "driver# " << GetGDALDriverManager()->GetDriverCount()
              << std::endl;

    for (int i = 0; i < GetGDALDriverManager()->GetDriverCount(); i++) {
        auto driver = GetGDALDriverManager()->GetDriver(i);
        auto info = driver->GetDescription();
        std::cout << "driver " << i << ": " << info << std::endl;
    }

    auto driver = GetGDALDriverManager()->GetDriverByName("GPKG");

    poDataset = (GDALDataset*)GDALOpen("Building_LoD1.gpkg", GA_ReadOnly);

    if (poDataset == NULL) {
        //  ...;
    }

    return 0;
}

The driver list contains GPKG, but the reading fails with an error that the file is not recognized as supported file format.

Doing a gdalinfo Building_LoD1.gpkg leads to the same error in the console. But I can open the file in QGIS.

And a gdalsrsinfo Building_LoD1.gpk reports:

PROJ.4 : +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs 

OGC WKT :
PROJCS["CH1903+ / LV95",
    GEOGCS["CH1903+",
        DATUM["CH1903+",
            SPHEROID["Bessel 1841",6377397.155,299.1528128,
                AUTHORITY["EPSG","7004"]],
            TOWGS84[674.374,15.056,405.346,0,0,0,0],
            AUTHORITY["EPSG","6150"]],
        PRIMEM["Greenwich",0,
            AUTHORITY["EPSG","8901"]],
        UNIT["degree",0.0174532925199433,
            AUTHORITY["EPSG","9122"]],
        AUTHORITY["EPSG","4150"]],
    PROJECTION["Hotine_Oblique_Mercator_Azimuth_Center"],
    PARAMETER["latitude_of_center",46.95240555555556],
    PARAMETER["longitude_of_center",7.439583333333333],
    PARAMETER["azimuth",90],
    PARAMETER["rectified_grid_angle",90],
    PARAMETER["scale_factor",1],
    PARAMETER["false_easting",2600000],
    PARAMETER["false_northing",1200000],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]],
    AXIS["Easting",EAST],
    AXIS["Northing",NORTH],
    AUTHORITY["EPSG","2056"]]

Does anyone know why a gpkg file might be reported as not supported?

The gdal version is 2.3.2.


Solution

  • I figured out the problem. The reason for the message is not that the file format is not support by gdal, but that I used the wrong function to open the file.

    If I want to read in a file that has vector information then I need to use:

    GDALDataset* poDS;
    poDS = (GDALDataset*)GDALOpenEx( "Building_LoD1.gpkg", GDAL_OF_VECTOR, NULL, NULL, NULL);