使用过程踩坑无数啊,
去看其他博客大牛的文章,都是直说理论, 没有实际可参考的代码,
一个小问题用了一周的时间。
废话不多说,直接看。
1.首先,这是GDAL的官网:http://www.gdal.org/
全是英文,对于英文水平都一般的咱们来说,看到一些专业术语更是头疼。
但我还是耐心看了一下核心的内容。
我写这篇文章时,官网打不开了。
2.在主页中,有Download链接,http://trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries,里面包含各平台的库文件下载,
这里介绍C#下的使用方法,进入http://www.gisinternals.com/sdk/进行下载,
页面中有4种下载类型,其中第三种包含源代码,其它均只包含DLL及可执行文件,主要是版本不同
在该页面中,根据自己使用的Windows版本及VS版本下载相应的库文件。
我先写了一个例子来测试程序:
GdalConfiguration.ConfigureGdal();//注册
GDAL.Gdal.AllRegister();
string img_path = "Resource\\dolly.tif";
GDAL.Dataset ds = GDAL.Gdal.Open(crane_img_path, GDAL.Access.GA_ReadOnly);
int rasterX = ds.RasterXSize; //影像宽度
int rasterY = ds.RasterYSize; //影像高度
double[] transf = new double[6];
transf[0] = 0;//图像左上角X坐标
double craneWidth = 20.5;
double craneHigh = 10.5;
decimal transf1 = decimal.Round(Convert.ToDecimal(craneWidth) /
Convert.ToDecimal(rasterX), 16);
transf[1] = Convert.ToDouble(transf1);//图像东西方向(横向)分辨率
transf[2] = 0;//旋转角度,如果图像北方朝上,该值为0
transf[3] = Convert.ToDouble(craneHigh);//图像左上角的Y坐标,天车主站高度
transf[4] = 0;//旋转角度,如果图像北方朝上,该值为0
decimal transf5 = decimal.Round(Convert.ToDecimal(craneHigh) / Convert.ToDecimal(rasterX), 16);
transf[5] = -Convert.ToDouble(transf5);//图像南北方向分辨率
GDAL.Driver driver = GDAL.Gdal.GetDriverByName("GTiff");
string iconame = "dolly_4800.tif";
GDAL.Dataset GdalDataset = driver.CreateCopy("Resource\\" + iconame, ds, 0, null, null, null);
GdalDataset.SetGeoTransform(transf);//写入仿射矩阵参数
这个例子将没有坐标信息的tif图像添加位置信息,生成一个新的tif文件。里面有详细注释,如果有问题,欢迎在评论区评论。