GDAL проблемы с копирвоанием информации из шейп-файлов С++

Имеются два shx-файла, "Building.shx", заполненный некоторыми объектами и "target_dataset.shx" пустой соответственно... Хочу написать программу по копированию объектов из "Building.shx" в "target_dataset.shx", пробежав документацию пришла идея вот такой вот реализации:

#include <iostream>
#include <ogrsf_frmts.h>
#include <string>

int main() {
    GDALAllRegister();

     // Исходный шейп-файл
    GDALDataset *srcDS = static_cast<GDALDataset*>(
      GDALOpenEx("/home/user/Building.shx", GDAL_OF_READONLY | GDAL_OF_VECTOR, NULL, NULL, NULL));
    if (srcDS == NULL) {
        std::cerr << "Failed to open source shapefile" << std::endl;
        return 1;
    }

    // Целевой шейп-файл
    GDALDataset *dstDS = static_cast<GDALDataset*>(
     GDALOpenEx("/home/user/target_dataset.shp", GDAL_OF_UPDATE | GDAL_OF_VECTOR, NULL, NULL, NULL));
    if (dstDS == NULL) {
        std::cerr << "Failed to open destination shapefile" << std::endl;
        return 1;
    }
    for(auto layer : srcDS->GetLayers() ) {
        // Create new layer in destination shapefile
        OGRLayer *dstLayer = dstDS->CreateLayer(layer->GetName(),
                                                layer->GetSpatialRef(),
                                                layer->GetGeomType(),
                                                NULL);

        layer->ResetReading();
        OGRFeature *feature;
        while ((feature = layer->GetNextFeature()) != NULL) {
            OGRFeature *newFeature = OGRFeature::CreateFeature(layer->GetLayerDefn());
            newFeature->SetGeometry(feature->GetGeometryRef());
            OGRErr err = dstLayer->CreateFeature(newFeature);
            if (err != OGRERR_NONE) {
                std::cerr << "Failed to create feature" << std::endl;
            }

            OGRFeature::DestroyFeature(feature);
            OGRFeature::DestroyFeature(newFeature);
        }
    }

    // Очистка
    GDALClose(srcDS);
    GDALClose(dstDS);

    return 0;
}

При выполнении данного кода возникает некоторое количество ошибок следующего содержания:

ERROR 1: Error in fread() reading object of size 12 at offset 100 from .shp file
ERROR 1: Error in fread() reading object of size 12 at offset 112 from .shp file
ERROR 1: Error in fread() reading object of size 12 at offset 124 from .shp file
ERROR 1: Error in fread() reading object of size 12 at offset 136 from .shp file
ERROR 1: Error in fread() reading object of size 12 at offset 148 from .shp file
ERROR 1: Error in fread() reading object of size 12 at offset 160 from .shp file
ERROR 1: Error in fread() reading object of size 12 at offset 172 from .shp file
ERROR 1: Error in fread() reading object of size 12 at offset 184 from .shp file
ERROR 1: Error in fread() reading object of size 12 at offset 196 from .shp file
ERROR 1: Error in fread() reading object of size 12 at offset 208 from .shp file
ERROR 1: Error in fread() reading object of size 12 at offset 220 from .shp file
ERROR 1: Error in fread() reading object of size 12 at offset 232 from .shp file
ERROR 1: Error in fread() reading object of size 12 at offset 244 from .shp file

Кроме того, не смотря на отсутствие разрешения на запись - информация в файле "Building.shx" стирается после каждого выполнения программы. Кто-нибудь, кто сведущ в теме, подскажите, что я делаю не так, и как делать правильно? На всякий случай прикреплю тестовые файлы и файл CMakeLists.txt для желающих это проверить.


Ответы (0 шт):