GPKG 未被识别为受支持的文件格式

GPKG not recognized as a supported file format

我尝试读取 gpkg 文件以提取街道和建筑物等地理信息。

因此我从这段代码开始:

#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;
}

驱动列表包含GPKG,但读取失败并报错该文件未被识别为支持的文件格式。

执行 gdalinfo Building_LoD1.gpkg 会导致控制台出现同样的错误。但是我可以在QGIS中打开文件。

还有一个 gdalsrsinfo Building_LoD1.gpk 报告:

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"]]

有谁知道为什么 gpkg 文件可能被报告为不受支持?

gdal 版本是 2.3.2

我想通了。出现这个信息的原因不是gdal不支持文件格式,而是我用了错误的函数打开文件。

如果我想读入一个包含矢量信息的文件,那么我需要使用:

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