C# GDAL Tif图片转存geotiff(文件头写入投影信息)

感谢这篇文章c# - 使用 gdal 从 C# 中的现有位图创建 geotiff - IT工具网 (coder.work)

下载tif为cgcs2000,坐标信息未写入文件头,creatGeotiff函数实现tiff文件头写入投影信息。

tiffpath-原始tif路径;X1,Y1,左上角坐标;resolution 影像分辨率;savetiffpath geotif保存路径

private void CreatGeoTiff(string TifFilePath,double X1,double Y1,double Resolution,string SaveTifPath)

{

string WktProj = null;

//原始数据

Bitmap bmp = new Bitmap(TifFilePath);

Bitmap tmpBitmap = bmp.Clone(new Rectangle(0, 0, bmp.Width, bmp.Height),System.Drawing.Imaging.PixelFormat.Format24bppRgb);

string GeoPrj= "GEOGCS[\"GCS_China_Geodetic_Coordinate_System_2000\",DATUM[\"D_China_2000\",SPHEROID[\"CGCS2000\",6378137.0,298.257222101]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]";

Gdal.AllRegister();

//调用 GeoTiff引擎

OSGeo.GDAL.Driver TifDrv = Gdal.GetDriverByName("GTiff");

//打开原始tiff图片

OSGeo.GDAL.Dataset srcDs = Gdal.Open(TifFilePath, Access.GA_ReadOnly);

//写入新tiff

OSGeo.GDAL.Dataset destDs = TifDrv.CreateCopy(SaveTifPath, srcDs, 0, null, null, null);

Osr.GetWellKnownGeogCSAsWKT("EPSG:4490", out WktProj);

//destDs.SetProjection(GeoPrj);

destDs.SetProjection( WktProj);

//arg[0]:左上角像素经度

// arg[1]:影像宽度方向上的分辨率(经度范围 / 像素个数)

//arg[2] 旋转, 0表示上面为北方

//arg[3]:左上角像素纬度

//arg[4]:旋转, 0表示上面为北方

//arg[5]:影像宽度方向上的分辨率(纬度范围 / 像素个数)-tfw文件中的那个分辨率负值

double[] geoTransform = new double[] { X1, Resolution, 0, Y1, 0,Resolution*(-1)};

destDs.SetGeoTransform(geoTransform);

destDs.FlushCache();

destDs.Dispose();

srcDs.Dispose();

TifDrv.Dispose();

tmpBitmap.Dispose();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值