Tôi phải sử dụng gdal trong một dự án C#. Điều tôi phải làm là "chuyển đổi" một bitmap đơn giản thành một GeoTiff. Tôi đọc một số tài liệu trên trang web gdal nhưng tôi đã không thành công để làm cho nó hoạt động hoàn hảo. Trong thực tế bitmap của tôi là successfuly xuất khẩu sang một GeoTIFF, nhưng nếu tôi mở GeoTiff với một phần mềm GIS (ví dụ QuantumGIS) các GeoTiff được đảo ngược trên trục y:Tạo một geotiff từ một bitmap hiện có trong C# với gdal
:
Trong khi bitmap gốc giống như thế này:
đây là những gì tôi đã thực hiện:
Trước tiên tôi viết một tập tin tạm thời vào đĩa (có nghĩa là bitmap), tôi tạo ra một tập dữ liệu chứa bitmap nhờ hàm gdal (Gdal.Open (đường dẫn)), và tôi tạo tập dữ liệu mới (với trình điều khiển GTiff) bằng cách sử dụng tập dữ liệu bitmap, tôi đặt chuyển đổi địa lý và tôi viết geotiff vào đĩa:
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);
Bất kỳ ý tưởng nào về những gì tôi đang làm sai?
Chỉnh sửa Tôi không biết điều đó có quan trọng hay không nhưng bitmap pixel là 8bppIndexed.
Bạn đã sử dụng lớp học nào cho latLongMap? Cảm ơn. –