发明名称 基于扫描线法的多边形栅格化并行转换方法
摘要 本发明公开了基于扫描线法的多边形栅格化并行转换方法,属于地理信息系统领域。其包括输入命令行参数;MPI并行初始化,获取总的进程数和当前进程数,采用对等式并行模式,各进程分别解析命令行参数,分别收集引导符后的参数值,利用OGROpen方法读取矢量数据源,判断是否为0号进程;采用数据并行策略,划分栅格数据集合矢量多边形,然后分发各个进程,每个进程同时进行多边形的栅格化;写栅格数据,各进程分别更新栅格分块,并输出转换后的栅格数据。利用本发明进行大数据量的多边形栅格化的操作,可以得到较高的效率和满意的转换结果,充分提高了高性能服务器的多核/多处理器对多边形栅格化的转换处理速度,极大地缩小了多边形栅格化的转换时间。
申请公布号 CN102542035B 申请公布日期 2014.04.16
申请号 CN201110442351.4 申请日期 2011.12.27
申请人 南京大学 发明人 陈振杰;张帅;李飞雪;王亚飞;李满春;蒲英霞;王加胜;程亮
分类号 G06F17/30(2006.01)I 主分类号 G06F17/30(2006.01)I
代理机构 南京知识律师事务所 32207 代理人 蒋海军
主权项 基于扫描线法的多边形栅格化并行转换方法,包括以下步骤:步骤1:输入命令行参数:<b>mpirun</b><b>  ‑np</b> 8  hpgc_rasterize  ‑a GHDLDM  ‑l hpgc_data  ‑of HFA  ‑tr 20 20  ~/data/hpgc_data.shp  ~/data/test_result.img;其中,‘‑a’ ‘‑l’ ‘‑of’ ‘‑tr’ 均为命令行的引导符,‘mpirun’表示调用MPI 应用程序的声明参数;‘‑np 8’表示调用8 个进程数;‘ hpgc_rasterize’为本发明编译后生成的exe 运行程序文件名;‘‑a GHDLDM’用于像元填充的多边形图层的属性字段,属性字段名为GHDLDM ;‘‑l hpgc_data’用于待栅格化的矢量图层,矢量图层名称为hpgc_data ;‘‑of HFA’表示转换后的栅格格式,HFA 是常用栅格格式Erdas Imagine .img 的格式代码;‘‑tr 20 20’表示生成的栅格单元长和宽分别为20m*20m,~/data/hpgc_data.shp 为源数据,~/data/test_result.img 为栅格化后的输出文件;步骤2:(1) MPI并行初始化,获取总的进程数和当前进程数,并注册GDAL/OGR格式驱动;(2) 采用对等式并行模式,各进程分别进行解析命令行参数,分别收集引导符后的参数值;(3) 以GDAL为矢量数据读写工具,利用OGROpen方法读取矢量数据源;(4) 判断是否为0号进程,若是0号进程,进行以下操作:首先,判断栅格文件是否存在,若存在,以GDAL中的Update方式打开,若不存在就获取HFA格式驱动,创建目标栅格数据集;目标数据集是根据格式驱动类型、输出的栅格文件名、像元的长和宽、波段数、数据类型参数利用GDAL中GDALCreate方法创建;步骤3:采用数据并行策略,划分栅格数据集和矢量多边形:(1)划分生成的栅格数据集,根据对等式并行模式按总的进程数划分生成的栅格数据集,每个进程分别负责处理栅格分块范围内的多边形填充,即通过计算栅格数据的总行数RasterYSize,根据总的进程数np划分生成的栅格数据,每个进程处理的栅格分块行数为nYChunkSize =ceil[RasterYSize/np], ceil[n]表示不小于n的最小整数;每个栅格块的起始行坐标为iY=cp*nYChunkSize,对第i个进程的起始行坐标iY+nYChunkSize进行判断,iY+nYChunkSize &gt; RasterYSize时,第i+1号进程处理的栅格分块的行数为nYChunkSize = RasterYSize – iY;(2)按总的进程数划分矢量多边形,即基于划分的栅格数据分块的范围对所有矢量多边形按进程数进行划分,实现多边形划分的具体操作为:各进程分别进行空间查询,根据各栅格分块的左上角、右上角、左下角、右下角四个角点组成的矩形为查询范围,获取与该矩形区域相交的多边形,包括位于该矩形区域内的多边形和与该矩形区域的边界相交的多边形,同时获取用于填充像元的图层的属性字段GHDLDM;步骤4:读取栅格分块数据,即指定栅格分块数据的数据类型,计算每行栅格数据所需要的存储量,继而计算出每个栅格分块数据的总数据量,以GDAL为影像数据读写工具,利用GDALDataset.RasterIO方法读取生成的栅格数据;步骤5:(1) 定义数组获取所有多边形的顶点坐标并按单个多边形的顶点顺序一一存储到数组里;(2)将多边形的顶点坐标一一进行坐标转换,从地理坐标转换为行列坐标;(3)根据各栅格分块的矢量多边形最小外接矩形确定扫描线的起止行坐标,扫描线是像素中心点所在的直线;(4)然后逐行扫描,循环处理每个多边形的每一条边与扫描线的交点,然后逐行根据列坐标的大小对交点进行排序并两两组合,填充同一行中两交点间的栅格单元,依次扫描,直至所有扫描线扫描完毕;步骤6:以GDAL为影像数据读写工具,利用GDALDataset.RasterIO方法写栅格数据,各进程分别更新栅格分块,并输出转换后的栅格数据;步骤7:在IBM System x3500‑M3X系列服务器Openmpi并行环境下,编译并使用实验数据测试。2.根据权利要求1所述的基于扫描线法的多边形栅格化并行转换方法,其特征在于:所述步骤2中采用对等式并行模式,即首先指定一个进程创建一个初始像元值为0的栅格数据集,然后采用数据并行策略,划分栅格数据集和矢量多边形,最后每个进程分别完成各栅格分块范围内的多边形的填充,各进程间相对独立,避免了数据并行时的通信,同时也避免了栅格化后结果的拼接。3.根据权利要求2所述的基于扫描线法的多边形栅格化并行转换方法,其特征在于:所述步骤3中数据并行策略,采用基于划分栅格数据集进而对矢量数据进行划分的数据划分方式,即采用空间求交查询过滤的方式查询各栅格分块里的矢量多边形,完成对矢量多边形的划分。4.根据权利要求1或3所述的基于扫描线法的多边形栅格化并行转换方法,其特征在于:所述步骤5中为了保证栅格化的精度,多边形的所有顶点均以双精度字符类型进行存储,判读边缘像元采用中心点的方法,若该像素的中心点位于多边形内,该像素属于该多边形。
地址 210093 江苏省南京市鼓楼区汉口路22号