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 для желающих это проверить.