• gdal的矢量栅格化接口GDALRasterizeLayers使用(一)


    作者:朱金灿

    来源:http://blog.csdn.net/clever101

          

                gdal库提供了一个矢量栅格化接口函数GDALRasterizeLayers。今天让我们学习一下这个接口函数的使用。该函数的原型如下:

    CPLErr GDALRasterizeLayers 	( 	GDALDatasetH  	hDS,
    		int  	nBandCount,
    		int *  	panBandList,
    		int  	nLayerCount,
    		OGRLayerH *  	pahLayers,
    		GDALTransformerFunc  	pfnTransformer,
    		void *  	pTransformArg,
    		double *  	padfLayerBurnValues,
    		char **  	papszOptions,
    		GDALProgressFunc  	pfnProgress,
    		void *  	pProgressArg	 
    	) 	
    

    下面解释下该接口的参数:

    hDS  —— 输出的栅格数据,注意该数据必须以update模式打开

    nBandCount —— 栅格数据要更新的波段数

    panBandList  —— 要更新的波段列表

    nLayerCount —— 矢量图层数,对应参数矢量图层数组pahLayers的元素个数

    pahLayers  —— 矢量图层数组

    pfnTransformer —— 将几何图形转换为栅格图像的像素/行列的转换器,如果该参数为空,则在内部创建一个。

    pTransformArg ——将几何图形转换为栅格图像的像素/行列的转换器所用到的参数

    padfLayerBurnValues—— 指定各个输出波段的输出像素值,因此一定是nBandCount个

    papszOptions —— 控制栅格化的一系列选项值,是最复杂的一个参数,包括如下选项:

    "ATTRIBUTE":

        指定属性字段中的字段值作为栅格值写入栅格文件中,该值将输出到所有输出波段中。假如该值指定了,padfLayerBurnValues参数的值将失效并且padfLayerBurnValues参数可以设置为NULL。

    "CHUNKYSIZE":

    指定该运行操作的块的高度。该值越大所需的计算时间越小。如果该值没有设置或者设置为0则由GDAL的缓存大小根据公式:缓存所占的字节数/扫描函数的字节数得到。所以该值不会超出缓存的大小。

    "ALL_TOUCHED":

        设置为TRUE表示所有的像素接触到矢量中线或多边形(全部参与矢量化?),否则只是多边形中心或被brezenhams line algorithm算法(注:brezenhams line algorithm算法为一有名的矢量栅格化算法)选中的部分。默认值为FALSE。该选项暂时搞不明白,知道的同学请留言告诉我。

    "BURN_VALUE_FROM":

        gdal的函数说明说该参数是用于设置几何图形的Z值,就是高程值。我搞不明白设置该值对栅格化有何影响。

    "MERGE_ALG":

    设置重写或增加新值到栅格数据中。选择REPLACE为 重写,选择ADD为添加一个新值到已存在的栅格数据中。默认值为REPLACE。

    pfnProgress —— gdal的进度函数

    pProgressArg —— 传递给进度函数的参数值

    返回值:

    CE_None 表示处理成功,CE_Failure表示有错误发生。

            值得注意的是,gdal的命令行程序gdal_rasterize也可以实现矢量栅格化,但该程序并不是直接调用GDALRasterizeLayers函数的,有兴趣的朋友可以看看gdal_rasterize的实现。计划以后提供一个GDALRasterizeLayers的使用例子程序。

    参考文献:

    1. gdal_alg.hFile Reference

    2. GDAL源码剖析(四)之命令行程序说明二,作者李民录。



  • 相关阅读:
    ActiveMq C#客户端 消息队列的使用(存和取)
    .NET中RabbitMQ的使用
    如何写入和读取从 Microsoft 消息队列在 Visual C#
    完整的站内搜索Demo(Lucene.Net+盘古分词)
    最大熵,熵,MLE的解释,还行
    JavaScript是如何工作的: CSS 和 JS 动画底层原理及如何优化它们的性能
    Fundebug发布Vue插件,简化BUG监控接入代码
    Spring Boot统一异常处理实践
    预计2019年发布的Vue3.0到底有什么不一样的地方?
    开源前端脚本错误监控及跟踪解决项目BadJS试用
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6470505.html
Copyright © 2020-2023  润新知