Мне нужно использовать gdal в проекте C #. Мне нужно «преобразовать» простое растровое изображение в GeoTiff. Я прочитал некоторую документацию на сайте gdal, но мне не удалось заставить ее работать идеально. Фактически, мое растровое изображение успешно экспортируется в геотиф, но если я открываю геотиф с помощью программного обеспечения ГИС (например, QuantumGIS), 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.