1.一种基于Spark的地图相交区域面积计算方法,其特征在于,包括:
步骤1,根据经纬度和网格个数将地图划分成网格形式;
步骤2,读取地图数据,包括多边形区域的ID和多边形区域的顶点序列,根据网格编号规则确定多边形区域包含的第一类单元网格的编号,或根据多边形区域提取出最小外接矩形,利用四分树算法确定多边形区域属于的第二类单元网格的编码;将第一类单元网格的编号或第二类单元网格的编码,进行分块后存入Spark的分布式文件系统中;
步骤3,根据Spark的分布式文件系统中存储的第一类单元网格的编号或第二类单元网格的编码,确定包含相同第一类单元网格编号的多边形区域,或属于相同第二类单元网格编码的多边形区域,为可能存在相交的多边形区域;
步骤4,判断可能存在相交的多边形区域的相交关系,计算对应的相交区域的面积。
2.根据权利要求1所述的方法,其特征在于,根据网格编号规则确定多边形区域包含的第一类单元网格的编号,包括:根据多边形的顶点序列计算出多边形的第一类单元网格的编号,所述第一类单元网格的编号包括顶点网格编号、边经过的网格编号和完全包含的网格编号;首先计算顶点网格编号,对于坐标为(xi,yi)的顶点i,计算顶点i的网络编号为:其中xmin为地图的最小经度,ymin为地图的最小维度,sideLength为网格的边长;
再计算多边形的边经过的网格编号,依顶点序列顺序两两遍历所有顶点坐标,计算两坐标(xi,yi)和(xi+1,yi+1)的斜截式方程y=kx+b,计算两顶点X轴的变化范围 取整后带入斜截式方程中计算得到纵轴值y,若y<yi,则两坐标的连接直线经过了顶点xi左方的网格,若y≥yi,则直线经过xi上方的网格;
最后计算多边形完全包含的网格编号,计算顶点序列的最小外接矩形,去掉最小外接矩形最外层的网格,得到一个更小的矩形区域,将更小的矩形区域中的网格编号减去出现过的顶点网格编号和边网格编号后,得到完全包含的网格编号。
3.根据权利要求1所述的方法,其特征在于,根据多边形区域提取出最小外接矩形,利用四分树算法确定多边形区域属于的第二类单元网格的编码,包括:根据多边形区域提取出最小外接矩形,遍历多边形的顶点集合,提取出最大和最小的经纬度信息作为最小外接矩形的4个顶点,最小外接矩形的最小经度为Lonmin,最大经度为Lonmax,最小纬度为Latmin,最大纬度为Latmax,计算所述4个顶点在整个地图中所处网格的坐标,整形处理后转换成二进制形式,所述4个顶点的坐标为:最小经度Grid_xmin:
最大经度Grid_xmax:
最小纬度Grid_ymin:
最大纬度Grid_ymax:
其中xmin为地图的最小经度,xmax为地图的最大经度,ymin为地图的最小维度,ymax为地图的最大维度;
遍历二进制码的长度L,提取最小外接矩形的左下角顶点(Grid_xmin,Grid_ymin)对应长度的值XminLYminL,提取右上角顶点(Grid_xmax,Grid_ymax)对应长度的值XmaxLYmaxL,若两个顶点的长度的值相等表示该外接多边形4个顶点在一个网格内,且该网格已是其最小单位网格,若不相等,则重复上述步骤往上找,直至找到最小单元网格;对最小单元网格进行编码,得到多边形区域属于的第二类单元网格的编码。
4.根据权利要求1至3任一所述的方法,其特征在于,判断可能存在相交的多边形区域的相交关系,计算对应的相交区域的面积,包括:对于可能存在相交的两个多边形A和B,其顶点集合分别为A’和B’,遍历顶点集合B’,利用射线法判断各个顶点是否在多边形A中,若B存在任意一个顶点在A内,则A与B相交,若B所有顶点均在A内,则A包含B;
若A包含B,则计算被包含的多边形B的面积为相交区域的面积,若A与B相交,则提取出两多边形相交的顶点序列Z,根据顶点序列Z计算相交区域的面积。
5.一种基于Spark的地图相交区域面积计算系统,其特征在于,包括:
地图网格化模块,用于根据经纬度和网格个数将地图划分成网格形式;
单元网格编号码确定模块,用于读取地图数据,包括多边形区域的ID和多边形区域的顶点序列,根据网格编号规则确定多边形区域包含的第一类单元网格的编号,或根据多边形区域提取出最小外接矩形,利用四分树算法确定多边形区域属于的第二类单元网格的编码;
Spark的分布式文件存储模块,用于将第一类单元网格的编号或第二类单元网格的编码分块后,进行存储;
快速相交多边形区域确定模块,用于根据Spark的分布式文件系统中存储的第一类单元网格的编号或第二类单元网格的编码,确定包含相同第一类单元网格编号的多边形区域,或属于相同第二类单元网格编码的多边形区域,为可能存在相交的多边形区域;
相交区域面积计算模块,用于判断可能存在相交的多边形区域的相交关系,计算对应的相交区域的面积。
6.根据权利要求5所述的系统,其特征在于,单元网格编号码确定模块根据网格编号规则确定多边形区域包含的第一类单元网格的编号,包括:根据多边形的顶点序列计算出多边形的第一类单元网格的编号,所述第一类单元网格的编号包括顶点网格编号、边经过的网格编号和完全包含的网格编号;首先计算顶点网格编号,对于坐标为(xi,yi)的顶点i,计算顶点i的网络编号为:其中xmin为地图的最小经度,ymin为地图的最小维度,sideLength为网格的边长;
再计算多边形的边经过的网格编号,依顶点序列顺序两两遍历所有顶点坐标,计算两坐标(xi,yi)和(xi+1,yi+1)的斜截式方程y=kx+b,计算两顶点X轴的变化范围 取整后带入斜截式方程中计算得到纵轴值y,若y<yi,则两坐标的连接直线经过了顶点xi左方的网格,若y≥yi,则直线经过xi上方的网格;
最后计算多边形完全包含的网格编号,计算顶点序列的最小外接矩形,去掉最小外接矩形最外层的网格,得到一个更小的矩形区域,将更小的矩形区域中的网格编号减去出现过的顶点网格编号和边网格编号后,得到完全包含的网格编号。
7.根据权利要求5所述的方法,其特征在于,单元网格编号码确定模块根据多边形区域提取出最小外接矩形,利用四分树算法确定多边形区域属于的第二类单元网格的编码,包括:根据多边形区域提取出最小外接矩形,遍历多边形的顶点集合,提取出最大和最小的经纬度信息作为最小外接矩形的4个顶点,最小外接矩形的最小经度为Lonmin,最大经度为Lonmax,最小纬度为Latmin,最大纬度为Latmax,计算所述4个顶点在整个地图中所处网格的坐标,整形处理后转换成二进制形式,所述4个顶点的坐标为:最小经度Grid_xmin:
最大经度Grid_xmax:
最小纬度Grid_ymin:
最大纬度Grid_ymax:
其中xmin为地图的最小经度,xmax为地图的最大经度,ymin为地图的最小维度,ymax为地图的最大维度;
遍历二进制码的长度L,提取最小外接矩形的左下角顶点(Grid_xmin,Grid_ymin)对应长度的值XminLYminL,提取右上角顶点(Grid_xmax,Grid_ymax)对应长度的值XmaxLYmaxL,若两个顶点的长度的值相等表示该外接多边形4个顶点在一个网格内,且该网格已是其最小单位网格,若不相等,则重复上述步骤往上找,直至找到最小单元网格;对最小单元网格进行编码,得到多边形区域属于的第二类单元网格的编码。
8.根据权利要求5至7任一所述的方法,其特征在于,相交区域面积计算模块判断可能存在相交的多边形区域的相交关系,计算对应的相交区域的面积,包括:对于可能存在相交的两个多边形A和B,其顶点集合分别为A’和B’,遍历顶点集合B’,利用射线法判断各个顶点是否在多边形A中,若B存在任意一个顶点在A内,则A与B相交,若B所有顶点均在A内,则A包含B;
若A包含B,则计算被包含的多边形B的面积为相交区域的面积,若A与B相交,则提取出两多边形相交的顶点序列Z,根据顶点序列Z计算相交区域的面积。
9.一种计算机设备,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如权利要求1至4任一所述的方法。