ac#プロジェクトでgdalを使用する必要があります。私がしなければならないことは、単純なビットマップをGeoTiffに「変換」することです。gdalのWebサイトでいくつかのドキュメントを読みましたが、完全に機能させることができませんでした。実際、私のビットマップはgeotiffに正常にエクスポートされますが、GISソフトウェア(QuantumGISなど)でgeotiffを開くと、GeoTiffはy軸で反転します。
:
元のビットマップは次のようになりますが:
これが私がしたことです:
まず、一時ファイル(つまりビットマップ)をディスクに書き込み、gdal関数(Gdal.Open(path))を使用してビットマップを含むデータセットを作成し、(GTiffドライバーを使用して)新しいデータセットを作成します。ビットマップデータセット、ジオ変換を設定し、ジオティフをディスクに書き込みます:
String wktProj = null;
String tmpPath = @"C:\tmp.bmp";
Bitmap tmpBitmap = bmp.Clone(new Rectangle(0, 0, bmp.Width, bmp.Height), pixFormat);
tmpBitmap.Save(tmpPath, ImageFormat.Bmp);
String[] options = null;
Gdal.AllRegister();
OSGeo.GDAL.Driver srcDrv = Gdal.GetDriverByName("GTiff");
Dataset srcDs = Gdal.Open(tmpPath, Access.GA_ReadOnly);
Dataset dstDs = srcDrv.CreateCopy(path, srcDs, 0, options, null, null);
//Set the map projection
Osr.GetWellKnownGeogCSAsWKT("WGS84", out wktProj);
dstDs.SetProjection(wktProj);
//Set the map georeferencing
double mapWidth = Math.Abs(latLongMap.listBounds.topRight.x - latLongMap.listBounds.bottomLeft.x);
double mapHeight = Math.Abs(latLongMap.listBounds.topRight.y - latLongMap.listBounds.bottomLeft.y);
double[] geoTransfo = new double[] { -5.14, mapWidth / bmp.Width, 0, 48.75, 0, mapHeight / bmp.Height };
dstDs.SetGeoTransform(geoTransfo);
dstDs.FlushCache();
dstDs.Dispose();
srcDs.Dispose();
srcDrv.Dispose();
tmpBitmap.Dispose();
File.Delete(tmpPath);
私が間違っていることについて何か考えはありますか?
編集それが重要かどうかはわかりませんが、ピクセルビットマップは8bppIndexedです。