GDALRasterize()解析
2023-02-27 本文已影响0人
NullUser
基本
在gdal_utils.h中提供GDALRasterize()
接口将矢量栅格化。函数原型:GDALRasterize()
/************************************************************************/
/* GDALRasterize() */
/************************************************************************/
/**
* Burns vector geometries into a raster
*
* This is the equivalent of the <a href="/programs/gdal_rasterize.html">gdal_rasterize</a> utility.
*
* GDALRasterizeOptions* must be allocated and freed with GDALRasterizeOptionsNew()
* and GDALRasterizeOptionsFree() respectively.
* pszDest and hDstDS cannot be used at the same time.
*
* @param pszDest the destination dataset path or NULL.
* @param hDstDS the destination dataset or NULL.
* @param hSrcDataset the source dataset handle.
* @param psOptionsIn the options struct returned by GDALRasterizeOptionsNew() or NULL.
* @param pbUsageError pointer to a integer output variable to store if any usage error has occurred or NULL.
* @return the output dataset (new dataset that must be closed using GDALClose(), or hDstDS is not NULL) or NULL in case of error.
*
* @since GDAL 2.1
*/
GDALDatasetH GDALRasterize( const char *pszDest, GDALDatasetH hDstDS,
GDALDatasetH hSrcDataset,
const GDALRasterizeOptions *psOptionsIn, int *pbUsageError );
参数
该接口除了输入输出等基本参数外,栅格化的具体参数都放入了形参const GDALRasterizeOptions *psOptionsIn
中(如分辨率、数据类型等),而参数形式同GDAL App中的gdal_rasterize相同(gdal_rasterize)
设置参数可参考:
char **papszArgv = nullptr;
papszArgv = CSLAddString(papszArgv, "-ts");
papszArgv = CSLAddString(papszArgv, "1277");
papszArgv = CSLAddString(papszArgv, "979");
papszArgv = CSLAddString(papszArgv, "-ot");
papszArgv = CSLAddString(papszArgv, "Byte");
GDALRasterizeOptions *psOptions = GDALRasterizeOptionsNew(papszArgv, nullptr);
CSLDestroy(papszArgv);
-
-b <band>
band,指定要将值转换到的波段,要转换进多个波段时,需要提供多个-b
参数。(如指定1、3波段:-b 1 -b 3
)
如果是创建新的栅格数据集,则不指定该参数。 -
-i
invert,反转栅格化。将固定的烧录值或与第一个要素相关联的烧录值烧录到所提供多边形之外的图像的所有部分中。 -
-at
AllTouch,启用ALL_TOUCH光栅化选项,以便所有被线或多边形触及的像素都将被更新,而不仅仅是那些在线渲染路径上的像素,或其中心点在多边形内的像素。对于普通渲染规则,默认为禁用 -
-burn <value>
写入到波段中所有对象的固定值,如果提供一个-burn
列表(如-burn 0 -burn 1 -burn 2
或-burn 0 1 2
),则每个波段写入一个。在创建新栅格时,指定了多个-burn
列表,则会创建多个波段。
注:-3d,-burn,-a 只能三选一。 -
-a <attribute_name>
指定要素的某个属性作为值进行烧录。 -
-3d
指示应从要素的“Z”值中提取刻录值。适用于点和线(沿每个线段的线性插值)。对于多边形,只有当多边形是平坦的(所有顶点的Z值相同)时才能正常工作。 -
-add
添加新值到已存在的栅格数据中,例如适用于热力图。 -
-l <layername>
指定输入源的图层名,可以多次指定,当输入源有多个图层时,必须用-l
或-sql
指定图层。输入源只有一个图层时,可以不指定,使用默认图层。 -
-where <expression>
SQL WHERE语句过滤输入源的要素。 -
-sql <select_statement>
可以通过SQL语句选择想要的要素进行烧录。 -
-dialect <dialect>
指定SQL语言。"SQLITE"可以用在任何数据源上(如:-dialect SQLITE
)。 -
-of <format>
Output Format,指定输出格式,从GDAL2.3开始,如果不指定,则自动通过拓展名匹配。指定格式后会默认创建输出。 -
-a_nodate <value>
分配指定的no_data值。 -
-init <value>
使用这些值预先初始化栅格波段。(如-init 1 -init 2
或-init 1 2
) -
-a_srs <srs_def>
指定输出栅格的投影,如果没有指定,则使用输入源的坐标系。<srs_def>可以使用WKT,PROJ.4,EPSG:n或者一个包含WKT的文件。 -
-to NAME=VALUE
Transformer Option,设置适合传递给GDALCreateGenImgProjTransformer2()
的转换设置。在将几何坐标系转到目标栅格的像素时使用。 -
-co <NAME=VALUE>
Create Options,部分栅格格式可以有创建选项,通过此参数传入,如GeoTIFF驱动支持创建选项用以控制压缩。 -
-te <xmin> <ymin> <xmax> <ymax>
Target Extents,设置目标范围,必须使用对应的地理单位,如果没有指定,则输出范围与输入的矢量图层范围相同。 -
-tr <xres> <yres>
Target Resolution,设置空间分辨率,都是正值。 -
-tap
Target Aligned Pixels,将输出文件范围的坐标与-tr的值对齐,以便对齐的范围包含最小范围。对齐意味着xmin/resx、ymin/resy、xmax/resx和ymax/resy是整数值。 -
-ts <width> <height>
Target Size,指定输出文件的宽高。
注:-ts
与-tr
不能一起使用。 -
-ot <type>
Output Type,设置输出的数据类型,默认是Float64
,如果未指定类型但指定了输入源的属性,则根据属性的类型确定,有如下类型:
switch( eDataType )
{
case GDT_Unknown:
return "Unknown";
case GDT_Byte:
return "Byte";
case GDT_UInt16:
return "UInt16";
case GDT_Int16:
return "Int16";
case GDT_UInt32:
return "UInt32";
case GDT_Int32:
return "Int32";
case GDT_UInt64:
return "UInt64";
case GDT_Int64:
return "Int64";
case GDT_Float32:
return "Float32";
case GDT_Float64:
return "Float64";
case GDT_CInt16:
return "CInt16";
case GDT_CInt32:
return "CInt32";
case GDT_CFloat32:
return "CFloat32";
case GDT_CFloat64:
return "CFloat64";
default:
return nullptr;
}
-
-optim {[AUTO]/VECTOR/RASTER}}
强制使用算法(运算结果是相同的),多数情况下使用栅格模式,并优化读/写操作。矢量模式在有大量输入要素和优化CPU的使用时有用。该模式与平铺图像一起使用才有效。默认是自动模式,根据输入输出选择算法。 -
-q
抑制进度监控和其他的non-error输出。