Невозможно прочитать из & quot; / vsimem / & quot; используя vtkGDALVectorReader

Я пытаюсь визуализировать набор данных GDAL в VTK с помощью vtkGDALVectorReader …
Все отлично работает, если я использую файл на диске.
но когда я использую набор данных памяти (например, «/ vsimem / input.dat»), vtkGDALVectorReader сообщает о следующей ошибке.

ОШИБКА: в /opt/app/VTK-7.1.0/IO/GDAL/vtkGDALVectorReader.cxx, строка 643
vtkGDALVectorReader (0xb881b0):

Я отладил программу и обнаружил, что GDALOpenEx (в vtkGDALVectorReader) возвращает NULL …
Как мне это исправить?

Я использую VTK-7.1 и GDAL-2.1.2 на «RHEL Server 7.2»

код выглядит следующим образом ….

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

#include <vtkSmartPointer.h>
#include <vtkGDALVectorReader.h>
#include <vtkCompositeDataGeometryFilter.h>
#include <vtkCompositePolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkCamera.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>

#define MEMORY_FILENAME "/vsimem/example.dat"
int main(int argc, char *argv[])
{
GDALAllRegister();
VSIInstallMemFileHandler();

GDALDataset *shpDS = (GDALDataset*) GDALOpenEx(argv[1], GDAL_OF_VECTOR, NULL, NULL, NULL);
if(shpDS == NULL)
{
std::cerr << "Input ESRI Shapefile Open Failed..." << std::endl;
return -1;
}
GDALDriver *memDriver = GetGDALDriverManager()->GetDriverByName("Memory");
if(memDriver == NULL)
{
std::cerr << "GDAL Memory driver not available...." << std::endl;
return -1;
}
GDALDataset *memDS = memDriver->CreateCopy(MEMORY_FILENAME, shpDS, FALSE, NULL, NULL, NULL);
GDALClose(shpDS);

vtkSmartPointer<vtkGDALVectorReader> reader = vtkSmartPointer<vtkGDALVectorReader>::New();
reader->SetFileName(MEMORY_FILENAME);
//    reader->SetFileName(argv[1]);

vtkSmartPointer<vtkCompositeDataGeometryFilter> filter = vtkSmartPointer<vtkCompositeDataGeometryFilter>::New();
filter->SetInputConnection(reader->GetOutputPort());

vtkSmartPointer<vtkCompositePolyDataMapper> mapper = vtkSmartPointer<vtkCompositePolyDataMapper>::New();
mapper->SetInputConnection(filter->GetOutputPort());

vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);

vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(actor);
renderer->SetBackground(0.1, 0.2, 0.4);
renderer->ResetCamera();
renderer->GetActiveCamera()->Zoom(1.5);

vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->SetSize(500, 500);
renderWindow->AddRenderer(renderer);

vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
renderWindowInteractor->Start();

GDALClose(memDS);
return 0;
}

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]