本文收录了一些关于栅格的操作。GDAL对于影像的操作中,有很多需要注意的地方,可能由于影像的差异,所使用的的参数也存在一些差异,这里都进行了列举。希望能对大家有所帮助。
(1)获取影像信息
获取影像信息参数设置
public static string Gdal_Info(string filePath)
{
StringBuilder builder = new StringBuilder();
//builder.Append("-proj4 ");
//builder.Append("-nomd ");
return builder.ToString();
}
GDALInfo执行方法
var options = Gdal.ParseCommandLine(Gdal_Info(filePath));
GDALInfoOptions infoOptions = new GDALInfoOptions(options);
string info = Gdal.GDALInfo(ds, infoOptions);
(2)影像重投影
重投影参数设置
public static string Gdal_WarpOriImg()
{
StringBuilder builder = new StringBuilder();
builder.Append("-overwrite ");
//输出的空间参考为WGS84
builder.Append("-t_srs WGS84 ");
//输出的nodata值为0
builder.Append("-srcnodata 0 ");
//设置输出的影像长度为800,宽度自适应
builder.Append("-ts 800 0");
//只有具有rpc参数的影像才可以添加此参数,否则会报错。
//rpc参数信息可以通过GDALInfo方法来获取
builder.Append("-rpc");
//如果输入影像不具备投影信息,则需要添加下面两行
builder.Append("-to SRC_METHOD=NO_GEOTRANSFORM ");
builder.Append("-to DST_METHOD=NO_GEOTRANSFORM ");
//支持多线程,但是目前认为只添加-multi是没有意义的
builder.Append(" -multi" );
return builder.ToString();
}
GDALWarp执行方法
public static void ProcessWarp(string inPath, string outPath, string str)
{
var options = Gdal.ParseCommandLine(str);
Dataset inputDataset = Gdal.Open(inPath, Access.GA_ReadOnly);
IntPtr[] ptr = { Dataset.getCPtr(inputDataset).Handle };
GCHandle gcHandle = GCHandle.Alloc(ptr, GCHandleType.Pinned);
SWIGTYPE_p_p_GDALDatasetShadow dss = new SWIGTYPE_p_p_GDALDatasetShadow(gcHandle.AddrOfPinnedObject(), false, null);
Gdal.wrapper_GDALWarpDestName(outPath, 1, dss, new GDALWarpAppOptions(options), null, null);
inputDataset.FlushCache();
inputDataset.Dispose();
GC.Collect();
}
(3)影像配准
配准参数设置
public static string Translate(string srcPath, string dstPath, Dictionary<string, string> dic_xyValue)
{
Dataset ds = Gdal.Open(srcPa