一种矢量多边形栅格化的算法及系统的制作方法_5

文档序号:9433576阅读:来源:国知局
、线段对象数组生成模块、边信息生成模块、索引集合生成模块和栅格化结果生成模块;
[0089]所述栅格化区域设置模块,其用于将待处理的区域进行网格分割,在网格区域内设置多边形生成多边形的栅格化区域;
[0090]所述线段对象数组生成模块,其用于生成多边形的边的线段对象数组;
[0091]所述边信息生成模块,其用于遍历组成多边形的每一条线段,并利用多边形的边的线段对象数组生成边信息;
[0092]所述索引集合生成模块,其用于根据生成的边信息计算每一行与多边形相交的线段的索引集合;
[0093]所述栅格化结果生成模块,其用于通过线段的索引集合,判断不在多边形上的网格点的内外性质生成栅格化结果。
[0094]在上述技术方案的基础上,本发明还可以做如下改进。
[0095]进一步,所述栅格化结果生成模块生成栅格化结果的具体步骤为,
[0096]S4.1,通过生成的线段的索引集合与网格区域中第i行平行直线相交,使得多边形的边的线段在第i行的网格点进行求交计算,得到一系列连续的未标记网格点和一系列连续的被标记的网格点;
[0097]S4.2,对每个未标记的网格点进行判断,判断预设的未标记的网格点的左边的网格点是不是未标记的网格点,若是,执行S4.3,若不是,执行S4.4 ;
[0098]S4.3,以预设的未标记的网格点的中心为一个端点沿X正轴做平行线段,平行线段的另一个端点为当前要处理的网格点的中心,记录与该平行线段相交的多边形线段的条数,如果是奇数条,则当前要处理的网格点与预设的未标记的网格点的内外性质相反,而若是偶数条,当前要处理的网格点与预设的未标记的网格点的内外性质相同,执行S4.5 ;
[0099]S4.4,继续往左寻找直到找到未标记的网格点或者是找到最左边的网格点,则取位于多边形的左边的任意一个在网格行中线上的未被标记的网格点为端点沿X正轴做平行线段,平行线段的另一个端点为当前要处理的网格点的中心,记录与该平行线段相交的多边形的线段的条数,如果是奇数条,则当前要处理的网格点与多边形的左边的当前行中任意一个未被标记的网格点的内外性质相反,而若是偶数条,则当前要处理的网格点与多边形的左边的当前行中任意一个未被标记的网格点的内外性质相同,执行S4.5 ;
[0100]S4.5,根据每行网格点的内外性质逐行进行数据填充生成栅格化结果。
[0101]以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【主权项】
1.一种矢量多边形栅格化的算法,其特征在于:包括以下步骤, SI,将待处理的区域进行网格分割,在网格区域内设置多边形,生成多边形的栅格化区域,并生成由多边形的边组成的线段对象数组; S2,遍历组成多边形的每一条线段,并利用线段对象数组生成边信息; S3,根据生成的边信息计算网格的每一行与多边形相交的线段的索引集合; S4,通过线段的索引集合,判断不在多边形上的网格点的内外性质生成栅格化结果。2.根据权利要求1所述的一种矢量多边形栅格化的算法,其特征在于:在步骤SI中,生成多边形的边的线段对象数组的方法为,根据多边形的边数建立一个边信息集合,通过为边信息集合分配内存并初始化生成长度为多边形的边数的线段对象数组。3.根据权利要求1所述的一种矢量多边形栅格化的算法,其特征在于:在步骤S2中,生成边信息的方法为,首先遍历组成多边形的每一条线段,计算每条线段的起始行索引和终止行索引,计算多边形的跨行数据,计算组成多边形的所有线段从起始行到终止行的方向与栅格行边界第一次相交的交点值X,计算每条线段与栅格行边界相交的相邻两个交点之间的X递增量,计算起始行所对应线段的端点值Xl和终止行所对应线段的端点值X2 ;然后将起始行索引、终止行索引、多边形的跨行数据、X、X递增量、Xl和X2存储在步骤SI中生成的线段对象数组中,生成边信息。4.根据权利要求1所述的一种矢量多边形栅格化的算法,其特征在于:所述步骤S3的具体实现为: S3.1,临时生成长度为M且存储有链表指针和链表的链表数组T,其中M代表网格的行数; S3.2,将S2中生成的边信息的起始行和终止行在链表数组T中找到相对应的链表,并在相对应的链表中添加起始行和终止行所对应的多边形线段的索引值; S3.3,生成长度为M的指针数组TP,并将链表数组T中的数据拷贝到指针数组TP指向的数组中; 53.4,删除链表数组T和链表占用的内存,得到每一行与多边形相交的线段的索引集入口 ο5.根据权利要求1至4任一项所述的一种矢量多边形栅格化的算法,其特征在于:步骤S4的具体实现为: 54.1,通过S3生成的线段的索引集合与网格区域中第i行平行直线相交,使得多边形的边的线段在第i行的网格点进行求交计算,得到一系列连续的未标记网格点和一系列连续的被标记的网格点; S4.2,对每个未标记的网格点进行判断,判断预设的未标记的网格点的左边的网格点是否为未标记的网格点,若是,执行S4.3,若不是,执行S4.4 ; S4.3,以预设的未标记的网格点的中心为一个端点沿X正轴做平行线段,平行线段的另一个端点为当前要处理的网格点的中心,记录与该平行线段相交的多边形线段的条数,如果是奇数条,则当前要处理的网格点与预设的未标记的网格点的内外性质相反,而若是偶数条,当前要处理的网格点与预设的未标记的网格点的内外性质相同,执行S4.5 ; S4.4,继续往左寻找直到找到未标记的网格点或者是找到最左边的网格点,则取位于多边形的左边的任意一个在网格行中线上的未被标记的网格点为端点沿X正轴做平行线段,平行线段的另一个端点为当前要处理的网格点的中心,记录与该平行线段相交的多边形的线段的条数,如果是奇数条,则当前要处理的网格点与多边形的左边的当前行中任意一个未被标记的网格点的内外性质相反,而若是偶数条,则当前要处理的网格点与多边形的左边的当前行中任意一个未被标记的网格点的内外性质相同,执行S4.5 ; S4.5,根据每行网格点的内外性质逐行进行数据填充生成栅格化结果。6.根据权利要求5所述的一种矢量多边形栅格化的算法,其特征在于:所述被标记的网格点为网格区域中的网格点与多边形的边相交的交点,所述未标记的网格点为网格区域中除被标记的网格点之外的网格点。7.根据权利要求5所述的一种矢量多边形栅格化的算法,其特征在于:在S4.3和S4.4中,若与该平行线段相交的多边形的线段的条数为O,则规定穿越的条数为偶数条。8.一种矢量多边形栅格化的系统,其特征在于:包括栅格化区域设置模块、线段对象数组生成模块、边信息生成模块、索引集合生成模块和栅格化结果生成模块; 所述栅格化区域设置模块,其用于将待处理的区域进行网格分割,在网格区域内设置多边形生成多边形的栅格化区域; 所述线段对象数组生成模块,其用于生成多边形的边的线段对象数组; 所述边信息生成模块,其用于遍历组成多边形的每一条线段,并利用多边形的边的线段对象数组生成边信息; 所述索引集合生成模块,其用于根据生成的边信息计算每一行与多边形相交的线段的索引集合; 所述栅格化结果生成模块,其用于通过线段的索引集合,判断不在多边形上的网格点的内外性质生成栅格化结果。9.根据权利要求8所述的一种矢量多边形栅格化的系统,其特征在于:所述栅格化结果生成模块生成栅格化结果的具体步骤为, S4.1,通过生成的线段的索引集合与网格区域中第i行平行直线相交,使得多边形的边的线段在第i行的网格点进行求交计算,得到一系列连续的未标记网格点和一系列连续的被标记的网格点; S4.2,对每个未标记的网格点进行判断,判断预设的未标记的网格点的左边的网格点是不是未标记的网格点,若是,执行S4.3,若不是,执行S4.4 ; S4.3,以预设的未标记的网格点的中心为一个端点沿X正轴做平行线段,平行线段的另一个端点为当前要处理的网格点的中心,记录与该平行线段相交的多边形线段的条数,如果是奇数条,则当前要处理的网格点与预设的未标记的网格点的内外性质相反,而若是偶数条,当前要处理的网格点与预设的未标记的网格点的内外性质相同,执行S4.5 ; S4.4,继续往左寻找直到找到未标记的网格点或者是找到最左边的网格点,则取位于多边形的左边的任意一个在网格行中线上的未被标记的网格点为端点沿X正轴做平行线段,平行线段的另一个端点为当前要处理的网格点的中心,记录与该平行线段相交的多边形的线段的条数,如果是奇数条,则当前要处理的网格点与多边形的左边的当前行中任意一个未被标记的网格点的内外性质相反,而若是偶数条,则当前要处理的网格点与多边形的左边的当前行中任意一个未被标记的网格点的内外性质相同,执行S4.5 ; S4.5,根据每行网格点的内外性质逐行进行数据填充生成栅格化结果。
【专利摘要】本发明涉及一种矢量多边形栅格化的算法,包括以下步骤,S1,将待处理的区域进行网格分割,在网格区域内设置多边形,生成多边形的栅格化区域,并生成由多边形的边组成的线段对象数组;S2,遍历组成多边形的每一条线段,并利用线段对象数组生成边信息;S3,根据生成的边信息计算网格的每一行与多边形相交的线段的索引集合;S4,通过线段的索引集合,判断不在多边形上的网格点的内外性质生成栅格化结果。本发明一种高效的矢量多边形高精度栅格化算法,支持大数据量、高精度的多边形栅格化图片应用场景,具有良好的扩展性。另外,本发明的算法的网格范围也可以是任意区域范围。
【IPC分类】G06T11/40
【公开号】CN105184837
【申请号】CN201510551191
【发明人】程曦, 史凤玲, 袁红念, 曹倩倩
【申请人】武汉云空间地理信息技术有限公司
【公开日】2015年12月23日
【申请日】2015年8月31日
当前第5页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1