注: APIのバージョンとバージョンを試したので、タグC
とタグの両方を追加しました。C++
C++
C
geotiff
車の軌跡に沿って表示するには、ファイルをロードする必要があります。まず、gdal C++
API を使用してファイルを開き、そこからいくつかの情報を抽出します。
double geo_transform[6];
GDALDataset* data = (GDALDataset*) GDALOpenShared( "MyRaster.tif", GA_ReadOnly );
if(data) {
size[0] = data->GetRasterXSize();
size[1] = data->GetRasterYSize();
qDebug() << "RASTER TOTAL BANDS:" << data->GetRasterCount();
if( CE_None == data->GetGeoTransform( geo_transform ) ) {
qDebug() << "RASTER TL:" << geo_transform[0] << geo_transform[3];
qDebug() << "RASTER SIZE:" << size[0] << size[1];
qDebug() << "RASTER ROTATIONS:" << geo_transform[2] << geo_transform[4];
qDebug() << "PIXEL SIZE:" << geo_transform[1] << geo_transform[5];
toret = true;
}
/*
* Retrieve the pixel size and top left corner and store it in a proper variable.
*/
GDALClose(data);
次に、別のスレッド ( 経由で起動) で、イメージを(ラスターをロードするクラスの変数です。コンストラクターでは、空のピックスマップに初期化されQThread
ます) に「ロード」します。QPixmap
temp_pixmap.load( "MyRaster.tif" );
ラスターが表示され、ズーム、パンなどができるので、これは機能しているようです。
問題は、同じファイルを一度しか開けないことです。ラスターを 2 つの異なるピックスマップにロードして、最初のピックスマップを軌跡にアタッチし、2 つ目のピックスマップを注釈の作成に使用できるようにする場合、2 つ目のピックスマップは空白でロードされます。
これらのバリエーションを試しましたが、成功しませんでした:
バリエーション 1:ポインタをクラスの変数として持ち、デストラクタGDALDataSource
で呼び出す。GDALClose
バリエーション 2:でラスターを開く代わりに、デストラクタでGDALOpen
試して閉じました。GDALOpenShared
バリエーション 3:C
バージョンの使用:
GDALDatasetH hDataset;
hDataset = GDALOpen( Element::getFilePath().c_str(), GA_ReadOnly );
if( hDataset != NULL ) {
GDALDriverH hDriver;
hDriver = GDALGetDatasetDriver( hDataset );
if( GDALGetGeoTransform( hDataset, geo_transform ) == CE_None ) {
// Get the size and top left corner...
}
}
GDALClose(hDataset);
API チュートリアルの「データセットを閉じる」セクションには、次のような記述があります。
Forgetting to call GDALClose on a dataset opened in update mode in a popular format like GTiff will likely result in being unable to open it afterwards
READ_ONLY
モードの場合はデータセットを開き、常に を呼び出すようにしましたClose
。Qt
ラスターをピックスマップにロードするときに問題が発生する可能性がありますか?
新着:
同じ問題を抱えていた同僚と話をした後gdal
、ラスターが適切に閉じられていないようで、API チュートリアルで説明されている動作が強制されるため、問題は の側にあると考えています。引き続き調査していきます…