CN112562040A - 一种基于Spark的海量二三调数据成果流量高性能计算方法 - Google Patents
一种基于Spark的海量二三调数据成果流量高性能计算方法 Download PDFInfo
- Publication number
- CN112562040A CN112562040A CN202011551015.9A CN202011551015A CN112562040A CN 112562040 A CN112562040 A CN 112562040A CN 202011551015 A CN202011551015 A CN 202011551015A CN 112562040 A CN112562040 A CN 112562040A
- Authority
- CN
- China
- Prior art keywords
- spot
- intersection
- tone
- minimum line
- pattern
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/20—Drawing from basic elements, e.g. lines or circles
- G06T11/206—Drawing of charts or graphs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/29—Geographical information databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/60—Editing figures and text; Combining figures or text
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Remote Sensing (AREA)
- Computing Systems (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明公开了一种基于Spark的海量二三调数据成果流量高性能计算方法,属于地理信息系统领域。本发明的方法步骤包括:S1、对二调地类图斑与三调地类图斑进行相交处理;S2、对二调零星地物进行处理;S3、对二调线状地物进行处理;S4、进行二调与三调数据成果流量分析。本发明采用了完全开源的技术栈,基于Postgresql数据库实现二调和三调数据的分布式存储,基于Java GIS工具包GeoTools进行空间数据处理,基于分布式的计算引擎Spark来保证海量矢量数据计算的高效性与准确性。
Description
技术领域
本发明属于地理信息系统领域,具体涉及一种基于Spark的海量二三调数据成果流量高性能计算方法。
背景技术
国土是生产之要、生存之本、生态之源、自然之基。国土调查是我国法定的一项重要制度,是全面查实查清土地资源的重要手段。开展第三次国土调查数据成果流量分析是为了准确把握国家土地利用变化总体趋势,为国家直接掌握翔实准确的全国土地利用现状和土地资源变化情况,进一步完善土地调查、监测和统计制度,实现成果信息化管理与共享,满足空间规划编制、供给侧结构性改革、国土空间用途管制等各项工作提供重要的数据支持。
目前市面上大多的地类流量分析模型都是基于ArcGIS应用程序来搭建的,但是,ArcGIS作为一个商业软件,使用者受限于开发公司的政策影响与权限控制,同时也无法看到底层实现数据计算的逻辑。因此如何基于开源平台实现二调与三调数据成果的流量分析,是目前亟待解决的技术问题。
发明内容
本发明的目的在于解决现有技术中存在的问题,并提供一种基于Spark的海量二三调数据成果流量高性能计算方法。
本发明所采用的具体技术方案如下:
一种基于Spark的海量二三调数据成果流量高性能计算方法,该方法步骤如下:
S1、按照S11~S14对二调地类图斑与三调地类图斑进行相交处理:
S11:分别对二调地类图斑与三调地类图斑进行相同的格网化操作,使空间位置相同的地类图斑赋予相同的格网编号;然后使用cogroup算子将两个格网中格网编号相同的图斑连接起来;
S12:针对S11中连接后的格网,遍历格网中的每一个格网,判断当前格网内的每一个三调地类图斑是否存在相交的二调地类图斑,若存在则新建一个对应的MultiPolygon类型的要素图层存储三调地类图斑和二调地类图斑的相交图斑,并在其属性表中记录原三调地类图斑和二调地类图斑的基本信息以及每个相交图斑的标识码bsm23和面积信息;
S13:对于要素图层中存储的每一个相交图斑,对该相交图斑进行负向缓冲区操作,将负向缓冲区操作后新的相交图斑与要素图层中存储的相交图斑进行对比,若二者外包矩形框长宽比变化范围超过阈值,则以新的相交图斑替换要素图层中原先存储的相交图斑,否则依然保留要素图层中原先存储的相交图斑;
S14:将存储了所有格网中的相交图斑的要素图层以及其属性表以Tuple2格式的元组形式输出,形成第一结果集;
S2、按照S21~S24对二调零星地物进行处理:
S21:将所述第一结果集和二调中的零星地物图层进行相同的格网化操作,使空间位置相同的相交图斑和二调零星地物赋予相同的格网编号;然后使用leftOuterJoin算子,将两个格网中格网编号相同的相交图斑和零星地物连接起来,返回的结果集包含了第一结果集的全部数据和两个图层中有交集的数据;
S22:针对S21中连接后的格网,使用mapToPair算子,遍历格网中的各个格网,如果格网内没有零星地物,则直接返回格网内的相交图斑及其标识码bsm23;如果格网内有零星地物,判断零星地物落在哪一个相交图斑中,并将该零星地物的信息记入该相交图斑的属性表中,返回相交图斑和零星地物以及由相交图斑标识码和零星地物标识码拼接成的组合标识码bsm23_lx;
S23:使用reduceByKey算子对S22中的返回结果进行去重操作,保证一个组合标识码bsm23_lx仅有一条返回数据,使同一组合标识码bsm23_lx仅对应一个相交图斑;
S24:使用mapToPair算子将S23处理后的所有返回数据内的组合标识码bsm23_lx替换成所属的相交图斑的标识码bsm23;再使用groupByKey算子将同一标识码的返回数据进行分类后,使用mapToPair算子将标识码bsm23相同的同一个相交图斑对应的所有零星地物信息合并,得到落入每一个相交图斑的所有零星地物;最后在所述第一结果集基础上,针对每一个相交图斑,将落入其中的所有零星地物要素更新至要素图层中,并将落入其中的所有零星地物信息以及相交图斑扣除所有内部零星地物后的面积信息更新至该相交图斑的属性表中,得到第二结果集;
S3、按照S31~S32对二调线状地物进行处理:
S31:将所述第二结果集中的相交图斑要素图层和二调中的线状地物图层通过格网连接后,将相交图斑边界和线状地物的交点作为分割点,在每个分割点处将线状地物分割断开,形成一系列最小线单元,每一段最小线单元只落在一个相交图斑中,每一段最小线单元重新计算其标识码和属性信息;
S32:将每一段最小线单元视为零星地物,按照S2中的处理方法确定每一个相交多边形中的所有最小线单元;并在所述第二结果集基础上,针对每一个相交图斑,将落入其中的所有最小线单元要素更新至要素图层中,并将落入其中的所有最小线单元信息以及相交图斑扣除所有内部最小线单元后的面积信息更新至该相交图斑的属性表中,得到第三结果集;
S4、按照S1~S3得到的结果,进行二调与三调数据成果流量分析:
基于所述第三结果集,以其中的每一个相交图斑为基本计算单元,统计基本计算单元的二调和三调土地利用类型和面积,合并输出不同土地利用类型的流量。
作为优选,所述的S31具体步骤如下:
S311:将所述第二结果集和二调中的线状地物图层进行相同的格网化操作,使空间位置相同的相交图斑和线状地物赋予相同的格网编号;然后使用cogroup算子将两个格网中格网编号相同的相交图斑和线状地物连接起来,返回的结果集为位于同一个格网编号内的第二结果集中相交图斑集合和线状地物集合所组合成的Tuple2元组;
S312:对于每一个格网中的相交图斑和线状地物,判断线状地物是否与相交图斑的边界重合,并根据判断结果进行处理:
若相交图斑和线状地物的边界重合,则先通过snap操作使相交图斑吸附至线状地物上,再重新通过snap操作使线状地物吸附至相交图斑上,在线状地物与相交图斑外边界相交位置形成分割点;
若相交图斑的边界和线状地物不重合,则将相交图斑与线状地物做intersect操作,若重合则通过snap操作使线状地物吸附至相交图斑上,在线状地物与相交图斑外边界相交位置形成分割点;
S313:对于同一条线状地物与不同相交图斑形成的分割点,对其进行合并操作;
S314:将增加分割点后的线状地物按照线上的分割点进行逐段分解,形成若干最小线单元;重新计算每一段最小线单元的属性信息以及赋予唯一的标识码;
S315:在每一段最小线单元的中点位置设置缓冲区,判断缓冲区是否与某一相交图斑相交,若相交则将该最小线单元视为落入该相交图斑中;
S316:针对每一个相交图斑,将落入其中的所有最小线单元要素输出至中间图层中,并为最小线单元要素赋予一个反映其坐落的相交图斑的键值。
作为优选,所述的S315中,在每一段最小线单元的中点位置设置半径为0.01的缓冲区。
作为优选,所述的S32具体步骤如下:
S321:将所述第二结果集和S31中得到的中间图层进行相同的格网化操作,使空间位置相同的相交图斑和线状地物赋予相同的格网编号;然后使用leftOuterJoin算子,将两个格网中格网编号相同的最小线单元和相交图斑连接起来,返回的结果集包含了第二结果集的全部数据和两个图层中有交集的数据;
S322:针对S321中连接后的格网,使用mapToPair算子,遍历格网中的各个格网,如果格网内没有最小线单元,则直接返回格网内的相交多图斑及其标识码bsm23;如果格网内有最小线单元,判断最小线单元落在哪一个相交图斑中,并将该最小线单元的信息记入该相交图斑的属性表中,返回相交图斑和最小线单元以及由相交图斑标识码和最小线单元标识码拼接成的组合标识码bsm23_bsmml;
S323:使用reduceByKey算子对S322中的返回结果进行去重操作,保证一个组合标识码bsm23_bsmml仅有一条返回数据,使同一组合标识码bsm23_bsmml仅对应一个相交图斑;
S324:使用mapToPair算子将S323处理后的所有返回数据内的组合标识码bsm23_bsmml替换成所属的相交图斑标识码bsm23;再使用groupByKey算子将同一标识码的返回数据进行分类后,使用mapToPair算子将标识码相同的同一个相交图斑对应的所有最小线单元信息合并,得到落入每一个相交图斑的所有最小线单元;最后在所述第二结果集基础上,针对每一个相交图斑,将落入其中的所有最小线单元要素更新至要素图层中,并将落入其中的所有最小线单元信息以及相交图斑扣除所有内部零星地物和最小线单元后的面积信息更新至该相交图斑的属性表中,得到第三结果集。
作为优选,所述的S322中,如果格网内有最小线单元,需先判断最小线单元落在哪一个相交图斑中,再判断最小线单元完全位于相交图斑内还是落在相交图斑的边界上,若完全位于相交图斑内则在属性表中记录其扣除比例为1;若落在相交图斑的边界上则在属性表中记录其扣除比例为0.5。
作为优选,所述的S322中,需从相交图斑中扣除的线状地物面积=线长度*线宽度*扣除比例。
作为优选,所述S4中,若土地利用类型为耕地,则计算耕地面积时需考虑田坎系数,图斑的扣除面积=图斑中耕地地类面积*田坎系数。
作为优选,所述S4中,所有相交图斑均统计完毕后,使用mapToPair算子整理结果并使用reduceByKey算子将同种流向即土地利用类型变化相同的计算结果合并。
作为优选,所述方法基于Spark计算引擎,以Postgresql数据库实现二调和三调数据的分布式存储,并调用RDD算子和Java GIS工具包GeoTools实现空间数据处理。
作为优选,二调数据为第二次全国土地调查获得的成果数据,采用mdb格式文件,包含点、线、面三个图层,分别代表零星地物、线状地物与地类图斑,各图层要素由各自的标识码唯一确定;三调数据为第三次全国土地调查获得的成果数据,采用shp格式文件,仅由一个面状图层构成,代表地类图斑。
本发明以二调和三调成果为数据基础,基于Spark的分布式计算引擎,运用GeoTools地理空间计算算子,通过格网索引优化计算过程,相比较基于传统ArcGIS的二次开发工具运行效率相比,基于Spark的流量分析计算算法效率得到了极大的提升。计算结果可高效满足省、市、县不同层级的二调和三调地类流量的流量需求,对于自然资源管理具有重要意义,有助于不同层级管理部门直接掌握翔实准确的所辖区土地利用现状和土地资源变化情况,为相关部门的宏观决策提供数据基础。
本发明相对于现有技术而言,具有以下有益效果:
1.相比传统的本地计算方法,本发明可基于Apache-Spark计算框架,在分布式集群上进行模型运算,将负载从一个节点转移到多个节点,使得系统拥有更高的计算效率与性能的同时,实现了pg数据库的分布式存储,通过分库分表将数据分散至各个计算节点,充分利用各节点的计算资源,百万级空间数据点选查询的效率近百倍。此外,分布式计算的技术方法提升了整体性价比,也提高了系统的容错性,避免了单一结点的实效导致整个系统崩溃的危险。
2.相比如今大部分行业内使用ArcGIS等商业化软件进行地理模型计算的方法,本系统采用了完全开源的技术栈,基于Postgresql数据库实现二调和三调数据的分布式存储,基于Java GIS工具包GeoTools进行空间数据处理,基于分布式的计算引擎Spark来保证海量矢量数据计算的高效性与准确性。这使得整个技术方案自主发挥空间大,不受到商业版权的控制与影响,且成本更低。
附图说明
图1为基于Spark的海量二三调数据成果流量高性能计算方法流程图。
图2为狭长图斑示意图。
图3为横跨格网导致的部分图斑冗余存储示意图。
图4为与面重合的线的分割点处理方式。
图5为一条线被格网两边的多边形裁切情况的处理方式。
图6为实施例中方法的总流程图。
图7为实施例中图斑相交算法流程图。
图8为实施例中零星地物处理模型流程。
图9为实施例中最小线单元模型流程。
图10为实施例中线状地物处理流程。
图11为实施例中流量算法流程。
图12为实施例中扣除面积示意图。
具体实施方式
下面结合附图和具体实施方式对本发明做进一步阐述和说明。本发明中各个实施方式的技术特征在没有相互冲突的前提下,均可进行相应组合。
本发明中,所说的二调数据为第二次全国土地调查获得的成果数据,采用mdb格式文件,包含点、线、面三个图层,分别代表零星地物、线状地物与地类图斑,各图层要素由各自的标识码唯一确定;三调数据为第三次全国土地调查获得的成果数据,采用shp格式文件,仅由一个面状图层构成,代表地类图斑。因此,二调和三调的成果数据其格式存在不同,需要对两者进行数据对齐后方可进行流量分析。
如图1所示,在本发明的一个较佳实施例中,提供了一种基于Spark的海量二三调数据成果流量高性能计算方法,方法步骤如下:
S1、按照S11~S14对二调地类图斑与三调地类图斑进行相交处理:
S11:分别对二调地类图斑与三调地类图斑进行相同的格网化操作,使空间位置相同的地类图斑赋予相同的格网编号;然后使用cogroup算子将两个格网中格网编号相同的图斑连接起来。
S12:针对S11中连接后的格网,遍历格网中的每一个格网,判断当前格网内的每一个三调地类图斑是否存在相交的二调地类图斑,若存在则新建一个对应的MultiPolygon类型的要素图层存储三调地类图斑和二调地类图斑之间的相交图斑,并在其属性表中记录原三调地类图斑和二调地类图斑的基本信息以及每个相交图斑的标识码bsm23和面积信息。所有的相交图斑可以存储在同一个要素图层中,但其标识码bsm23是唯一的。其中原三调地类图斑和二调地类图斑的基本信息可以从原始的二调数据和三调数据中获取,包括了该图斑的所有原始信息。
S13:对于要素图层中存储的每一个相交图斑,可能存在如图2所示的狭长图斑的情形,该情形下的相交图斑与线状地物相交时会导致线状地物流量增加,因此对该相交图斑进行负向缓冲区操作,将负向缓冲区操作后新的相交图斑与要素图层中存储的相交图斑进行对比,若二者外包矩形框长宽比变化范围超过阈值,则以负向缓冲区操作后新的相交图斑替换要素图层中原先存储的相交图斑,否则依然保留要素图层中原先存储的相交图斑。
以图2所示的狭长图斑为例,其下方区域属于面状地物相交出现的狭长图斑。其产生原因是由于geotools空间操作无法设置容差,精度过高,当面与面相交时,就会导致相交出狭长图斑与部分狭长图斑。这种狭长图斑在以相交得到的图斑去交线物时会导致线物流量增加,对流量分析准确性造成负面影响。而所谓的负向缓冲区操作即负向Buffer操作,常规的Buffer操作是将对象的边界向外扩张,而负向Buffer是将对象的边界向内收缩。对于图2下方的狭长部分,由于其宽度极小,因此负向Buffer将使得此部分直接被抹去,这会导致整个相交图斑的外包矩形框长宽比发生明显变化。基于该原理,通过合理设置外包矩形框长宽比变化阈值,就可以实现狭长图斑的去除。
当然,对于整个图斑均为狭长形式的图斑而言,亦可以通过面积小于一定值或面积周长比小于一定值的筛选条件进行过滤。
S14:当完成上述S11~S13步骤后,就得到了存储了所有格网中的相交图斑的要素图层以及其属性表,将两者以Tuple2格式的元组形式输出,即可形成第一结果集。在该第一结果集中,是以相交图斑作为基本单元的,后续也将以每个基本单元为基础,对二调零星地物和线状地物进行位置识别和划分。
S2、按照S21~S24对二调零星地物进行处理:
S21:将所述第一结果集和二调中的零星地物图层进行相同的格网化操作,使空间位置相同的相交图斑和二调零星地物赋予相同的格网编号;然后使用leftOuterJoin算子,将两个格网中格网编号相同的相交图斑和零星地物连接起来。由于此处采用了leftOuterJoin算子,因此其返回的结果集包含了第一结果集的全部数据和两个图层中有交集的数据,而不会导致第一结果集的数据丢失。
S22:针对S21中连接后的格网,使用mapToPair算子,遍历格网中的各个格网,如果格网内没有零星地物,则直接返回格网内的相交图斑及其标识码bsm23;如果格网内有零星地物,判断零星地物落在哪一个相交图斑中,并将该零星地物的信息记入该相交图斑的属性表中,返回相交图斑和零星地物以及由相交图斑标识码bsm23和零星地物标识码lx拼接成的组合标识码bsm23_lx,该组合标识码中即含有相交图斑的信息又含有零星地物的信息,可便于后续的信息处理和合并。
S23:本发明中不同格网下需要保持大量数据的唯一性,在保证运行效率的同时,还需要保证精度。在本技术方案中,将数据划分格网进行运算以提升运算效率,但是参见图3所示,存在部分图斑(如图斑mp2)横跨格网,导致出现冗余存储的现象,因此在模型计算过程中,需要通过对这些数据进行去重,以保持数据的唯一性。本步骤中,使用reduceByKey算子对S22中的返回结果进行去重操作,保证一个组合标识码bsm23_lx仅有一条返回数据,使同一组合标识码bsm23_lx仅对应一个相交图斑。
S24:使用mapToPair算子将S23处理后的所有返回数据内的组合标识码bsm23_lx替换成所属的相交图斑的标识码,即将组合标识码bsm23_lx中的后半部分“_lx”去除,进保留前半部分bsm23。然后,再使用groupByKey算子将同一标识码的返回数据进行分类后,使用mapToPair算子将标识码bsm23相同的同一个相交图斑对应的所有零星地物信息合并,由此得到落入每一个相交图斑的所有零星地物。
最后在前述S1得到的第一结果集基础上,针对每一个相交图斑,将落入其中的所有零星地物要素更新至要素图层中,并将落入其中的所有零星地物信息以及相交图斑扣除所有内部零星地物后的面积信息更新至该相交图斑的属性表中,得到第二结果集。此时的第二结果集相对于第一结果集而言,增加了落在各相交图斑内的零星地物信息,以便于对这些图斑进行扣除计算。
S3、按照S31~S32对二调线状地物进行处理:
S31:将前述的第二结果集中的相交图斑要素图层和二调中的线状地物图层通过格网连接后,将相交图斑边界和线状地物的交点作为分割点,在每个分割点处将线状地物分割断开,形成一系列最小线单元,每一段最小线单元只落在一个相交图斑中,每一段最小线单元重新计算其标识码和属性信息。将线状地物分割为落在一个相交图斑内的最小线单元的目的是使其能够明确所坐落的图斑,由此就可以按照和处理零星地物相同思路进行处理。
S32:将每一段最小线单元视为零星地物,按照S2中的处理方法确定每一个相交多边形中的所有最小线单元;并在所述第二结果集基础上,针对每一个相交图斑,将落入其中的所有最小线单元要素更新至要素图层中,并将落入其中的所有最小线单元信息以及相交图斑扣除所有内部最小线单元后的面积信息更新至该相交图斑的属性表中,得到第三结果集。
在本实施例中,上述S31的具体实现步骤如下:
S311:将所述第二结果集和二调中的线状地物图层进行相同的格网化操作,使空间位置相同的相交图斑和线状地物赋予相同的格网编号;然后使用cogroup算子将两个格网中格网编号相同的相交图斑和线状地物连接起来,返回的结果集为位于同一个格网编号内的第二结果集中相交图斑集合和线状地物集合所组合成的Tuple2元组。
S312:对于每一个格网中的相交图斑和线状地物,判断线状地物是否与相交图斑的边界重合,并根据判断结果进行1)或2)的处理:
1)若相交图斑和线状地物的边界重合,则先通过snap操作使相交图斑吸附至线状地物上,再重新通过snap操作使线状地物吸附至相交图斑上,在线状地物与相交图斑外边界相交位置形成分割点;
2)若相交图斑的边界和线状地物不重合,则将相交图斑与线状地物做intersect操作,若重合则通过snap操作使线状地物吸附至相交图斑上,在线状地物与相交图斑外边界相交位置形成分割点。
在上述1)步骤中,分两步进行snap操作的目的是解决在边界的线状地物与面状图斑不相交的问题。与前述狭长图斑出现的原因类似,GeoTools的空间操作精度很高但是无法设置容差,会出现理应与图斑边界重合的线状地物被夹在面状图斑之间,因而导致部分线状数据的丢失。因此,本发明采用了snap操作,将线状地物切割成最小线单元,从而进行后续的运算。但是直接将线状地物通过snap操作吸附(此处吸附即两个对象的边界处于贴合状态)至相交图斑上形成分割点,在实际试验中会导致线状地物出现弯折,导致计算出现误差。经过试验发现参见图4所示,先通过snap操作使相交图斑吸附至线状地物上,再重新通过snap操作使线状地物吸附至相交图斑上(此时线与图斑边界的交点即为分割点),就可以完美的解决该问题。但需要注意的是,通过snap操作使相交图斑吸附至线状地物上过程中,其容差不宜过大也不宜过小,优选按照0.001的容差进行snap操作实现吸附。
S313:对于同一条线状地物与不同相交图斑形成的分割点,对其进行合并操作。例如参见图5所示,如果存在一条线被格网两边的多边形裁切的情况,会出现图5情况,因此将其合并即可得到图5最右边的同一线上分割点合并结果。
S314:将增加分割点后的线状地物按照线上的分割点进行逐段分解,形成若干最小线单元。重新计算每一段最小线单元的属性信息(包括长度、宽度、面积等)以及赋予唯一的标识码。由此,每一段最小线单元由于是被相交图斑的边界分割的,因此其仅可能落在一个相交图斑中。本步骤的逐段分解过程可以使用flatMapToPair算子实现,将存储的线状地物数据按照分割点的划分结果分别写到新的结果中,可以无需进行几何意义上的分割。
S315:原先的被切割钱的线状地物本身存在表示其坐落在分割后图斑的唯一编号字段,但是由于该线状地物现在被insect切断了,因此不能再表示其坐落在哪一小块相交图斑,需要重新对每一段最小线单元所坐落的相交图斑进行定位。该步骤的做法是:在每一段最小线单元的中点位置设置缓冲区,判断缓冲区是否与某一相交图斑相交,若相交则将该最小线单元视为落入该相交图斑中。此处为了准确反映线单元所处的位置,缓冲区的半径不宜过大,优选在每一段最小线单元的中点位置设置半径为0.01的缓冲区。
S316:针对每一个相交图斑,将落入其中的所有最小线单元要素输出至一个中间图层中,并为最小线单元要素赋予一个反映其坐落的相交图斑的键值。后续即可根据该中间图层将最小线单元的信息加入第二结果集。该过程具体是通过S32步骤来实现的。
本实施例中,S32的具体步骤如下:
S321:将前述的第二结果集和S31中得到的中间图层进行相同的格网化操作,使空间位置相同的相交图斑和线状地物赋予相同的格网编号;然后使用leftOuterJoin算子,将两个格网中格网编号相同的最小线单元和相交图斑连接起来。由于使用的是leftOuterJoin算子,因此其返回的结果集包含了第二结果集的全部数据和两个图层中有交集的数据。
S322:针对S321中连接后的格网,使用mapToPair算子,遍历格网中的各个格网,如果格网内没有最小线单元,则直接返回格网内的相交多图斑及其标识码bsm23;如果格网内有最小线单元,判断最小线单元落在哪一个相交图斑中,并将该最小线单元的信息记入该相交图斑的属性表中,返回相交图斑和最小线单元以及由相交图斑标识码bsm23和最小线单元标识码bsmml拼接成的组合标识码bsm23_bsmml。
S323:同样的,因为在进行格网化的时候是冗余存储,需要使用reduceByKey算子对S322中的返回结果进行去重操作,保证一个组合标识码bsm23_bsmml仅有一条返回数据,使同一组合标识码bsm23_bsmml仅对应一个相交图斑。
S324:使用mapToPair算子将S323处理后的所有返回数据内的组合标识码bsm23_bsmml替换成所属的相交图斑标识码bsm23;再使用groupByKey算子将同一标识码的返回数据进行分类后,使用mapToPair算子将标识码相同的同一个相交图斑对应的所有最小线单元信息合并,得到落入每一个相交图斑的所有最小线单元。
最后在前述的第二结果集基础上,针对每一个相交图斑,将落入其中的所有最小线单元要素更新至要素图层中,并将落入其中的所有最小线单元信息以及相交图斑扣除所有内部零星地物和最小线单元后的面积信息更新至该相交图斑的属性表中,得到第三结果集。此时的第三结果集相对于第二结果集而言,进一步增加了落在各相交图斑内的线状地物信息,以便于对这些图斑进行扣除计算。
另外在S322中,一条最小线单元可能存在于两个图斑的边界上,这种情况需要将其对半折算至两个图斑的扣除面积中。因此如果格网内有最小线单元,需先判断最小线单元落在哪一个相交图斑中,再判断最小线单元完全位于相交图斑内还是落在相交图斑的边界上,若完全位于相交图斑内则在属性表中记录其扣除比例为1;若落在相交图斑的边界上则在属性表中记录其扣除比例为0.5。最终需从相交图斑中扣除的线状地物面积=线长度*线宽度*扣除比例。
S4、按照S1~S3得到的结果,进行二调与三调数据成果流量分析:
基于所述第三结果集,以其中的每一个相交图斑为基本计算单元,统计基本计算单元的二调和三调土地利用类型和面积,合并输出不同土地利用类型的流量。
由于第三结果集中的每一个相交图斑内已经含有了二调的零星地物和线状地物信息,因此可以计算出总的扣除面积,进而得到二调数据中每一种土地利用类型的面积。再结合三调数据中每一种土地利用类型的面积,就可以计算出每一种土地利用类型的面积之间的流向变化,例如类型A的土地有多少流入了类型B的土地。
此处,除耕地外其他土地利用类型可以直接计算其流量,但若土地利用类型为耕地,则计算耕地面积时需考虑田坎系数,图斑的扣除面积=图斑中耕地地类面积*田坎系数。
最后,当所有相交图斑均统计完毕后,可以使用mapToPair算子整理结果并使用reduceByKey算子将同种流向(即土地利用类型变化相同)的计算结果合并。
上述方法基于Spark计算引擎,以Postgresql数据库实现二调和三调数据的分布式存储,并调用RDD算子和Java GIS工具包GeoTools实现空间数据处理。该做法可以通过分库分表将数据分散至各个计算节点,充分利用各节点的计算资源,百万级空间数据点选查询的效率近百倍。
下面将上述方法应用至一个具体的实例中,以展示上述方法的具体实现形式以及实现效果。
实施例
本实施例中,基于开源的Postgresql数据库实现二调和三调数据的分布式存储,基于Java GIS工具包GeoTools进行空间数据处理,基于分布式的计算引擎Spark来保证海量矢量数据计算的高效性与准确性。
一、数据说明
二调数据:mdb格式文件;包含点、线、面三个图层,分别代表零星地物、线状地物与地类图斑,各图层要素由各自的标识码<BSM>唯一确定。
三调数据:shp格式文件;仅由一个面状图层构成。
图层分类说明如下:
地类图斑:单一地类地块,以及被行政区、城镇村庄等调查界线或土地所有权界线分割的单一地类地块为图斑。
零星地物:是指在土地利用现状调查中,按照成图比例尺因面积过小而不宜在图上依比例表示的土地利用现状图斑,其几何特征为点。
线状地物:是指土地调查时在地图上只能用线条标注的地面细长物体,如河流、道路、沟渠等。上图宽度一般小于5mm。
二调三调成果数据中要素图层字段说明如下:
三调成果数据字段如下:
地类图斑DLTB:
{OBJECTID:内码,BSM:标识码,YSDM:要素代码,TBYBH:图斑预编号,TBBH:图斑编号,DLBM:地类编码,DLMC:地类名称,QSXZ:权属性质,QSDWDM:权属单位代码,QSDWMC:权属单位名称,ZLDWDM:坐落单位代码,ZLDWMC:坐落单位名称,TBMJ:图斑面积,KCDLBM:扣除地类编码,KCXS:扣除地类系数,KCMJ:扣除地类面积,TBDLMJ:图斑地类面积,GDLX:耕地类型,GDPDJB:耕地坡度级别,XZDWKD:线状地物宽度,TBXHDM:图斑细化代码,TBXHMC:图斑细化名称,ZZSXDM:种植属性代码,ZZSXMC:种植属性名称,GDDB:耕地等别,FRDBS:飞入地标识,CZCSXM:城镇村属性码,SJNF:数据年份,BZ:备注,BGJLH:变更记录号,BGRQ:变更日期,MSSM:描述说明,HDMC:海岛名称}
二调成果数据字段如下:
地类图斑DLTB:
{BSM:标识码,YSDM:要素代码,TBYBH:图斑预编号,TBBH:图斑编号,DLBM:地类编码,DLMC:地类名称,QSXZ:权属性质,QSDWDM:权属单位代码,QSDWMC:权属单位名称,ZLDWDM:座落单位代码,ZLDWMC:座落单位名称,GDLX:耕地类型,GDPDJ:耕地坡度级,KCLX:扣除类型,KCDLBM:扣除地类编码,TKXS:扣除地类系数,TBMJ:图斑面积,XZDWMJ:线状地物面积,LXDWMJ:零星地物面积,TKMJ:扣除地类面积,TBDLMJ:图斑地类面积,GXCT:更新草图,DLBZ:地类备注,JSYDLX:建设用地类型,XZJSYDXHLX:新增建设用地细化类型,XZGDLY:新增耕地来源,ZZXZGDMJ:整治新增耕地面积,XZGDJFLY:新增耕地经费来源,PZWH:批准文号,PZWJ:批准文件,BGJLB:变更记录表,BGJLH:变更记录号,BGRQ:变更日期}
零星地物LXDW:
{OBJECTID:内码,BSM:标识码,YSDM:要素代码,LXDWBH:零星地物编号,MJ:面积,DLBM:地类编码,DLMC:地类名称,QSDWDM:权属单位代码,QSDWMC:权属单位名称,QSXZ:权属性质,ZLDWDM:座落单位代码,ZLDWMC:座落单位名称,ZLTBBH:座落图斑编号,GDLX:耕地类型,GDPDJ:耕地坡度级,JSYDLX:建设用地类型,XZGDLY:新增耕地来源,DLBZ:地类备注,BGJLB:变更记录表,BGJLH:变更记录号,BGRQ_SYS:变更日期}
线状地物XZDW:
{OBJECTID:内码,BSM:标识码,YSDM:要素代码,DLBM:地类编码,DLMC:地类名称,XZDWYBH:线状地物预编号,XZDWBH:线状地物编号,CD:长度,KD:宽度,XZDWMJ:线状地物面积,XZDWMC:线状地物名称,QSDWDM1:权属单位代码1,QSDWMC1:权属单位名称1,QSDWDM2:权属单位代码2,QSDWMC2:权属单位名称2,KCTBBH1:扣除图斑编号1,KCTBDWDM1:扣除图斑座落单位代码1,KCTBBH2:扣除图斑编号2,KCTBDWDM2:扣除图斑座落单位代码2,QSXZ:权属性质,KCBL:扣除比例,BGJLB:变更记录表,BGJLH:变更记录号,BGRQ:变更日期,JSYDLX:建设用地类型,XZGDLY:新增耕地来源,DLBZ:地类备注}。
二、Spark算子说明Spark算子的具体用法可参见Spark官方说明。为了便于理解,本实施例中,主要用到的Spark算子说明如下:
mapToPair算子:
该算子将原来RDD中的每个元素通过函数f转换为新的元素,并将生成的RDD的每个集合中的元素合并为一个集合。
flatMapToPair算子:
比mapToPair方法多了一个flat操作,将所有的<K2,V2>类型的元素合并成为一个Iterable<Tuple2<K2,V2>>类型的对象。
GroupByKey算子:
将元素通过函数生成相应的key,数据就转化为Key-Value格式,之后将Key相同的元素分为一组。原来RDD集合中key相同的元素背分在同一组中。
ReduceByKey算子:
对在两个RDD中的Key-Value类型的元素,该算子可以将元素按照key进行某种规则的合并,通过该算子计算返回了相同的key对应的value求和结果。
Cogroup算子:
cogroup函数将两个RDD进行协同划分,对在两个RDD中的Key-Value类型的元素,每个RDD相同Key的元素分别聚合为一个集合,并且返回两个RDD中对应Key的元素集合的迭代器。
Join算子:
对两个需要连接的RDD进行cogroup函数操作,将相同key的数据能够放到一个分区,在cogroup操作之后形成的新RDD对每个key下的元素进行笛卡尔积的操作,返回的结果再展平,对应key下的所有元组形成一个集合。最后返回RDD[(K,(V,W))]。
LeftOutJoin(左外连接)和RightOutJoin(右外连接)相当于在join的基础上先判断一侧的RDD元素是否为空,如果为空,则填充为空。如果不为空,则将数据进行连接运算,并返回结果。
三、基于Spark的海量二三调数据成果流量高性能计算流程
参见图6所示,为本实施例中基于Spark的海量二三调数据成果流量高性能计算方法的核心流程,其各步骤具体实现如下:
1、二调地类图斑与三调地类图斑相交处理
参见图7所示,本步骤流程如下:
(1)通过格网连接
思路:分别对二调地类图斑与三调地类图斑进行相同的格网化操作,使空间位置相同的地类图斑赋予相同的格网编号;然后使用cogroup算子将两个格网中格网编号相同的图斑连接起来。
算法实现:本实施例中,将二调和三调的地类图斑格网化,并使用cogroup算子将格网id相同的图斑连接起来。
输入:tb3dLayerPair和tb2dLayerPair(分别表示被格网划分的二调和三调地类图斑),格式为Tuple2<String格网id,MultiPolygon>
返回:Tuple2<String gridId,Tuple2<Iterable<MultiPolygon>tb3d,Iterable<MultiPolygon>tb2d>>
(2)相交操作
思路:针对连接后的格网,遍历格网中的每一个格网,判断当前格网内的每一个三调地类图斑是否存在相交的二调地类图斑,若存在则新建一个对应的MultiPolygon类型的要素图层存储三调地类图斑和二调地类图斑的相交图斑,并在其属性表中记录原三调地类图斑和二调地类图斑的基本信息以及每个相交图斑的标识码bsm23和面积信息;
算法实现:
输入:Tuple2<String gridId,Tuple2<Iterable<MultiPolygon>tb3d,Iterable<MultiPolygon>tb2d>>
返回:Tuple2<bsm3+_+bsm2+_+i,MultiPolygon inter>
其中bsm3+_+bsm2+_+i的标识码即存储了相交图斑的标识码bsm23形式,i为所在的格网编号。tb3d、tb2d分别表示三调地类图斑和二调地类图斑。
从每个格网开始遍历,从每一个三调面状图斑开始,遍历格网内的二调面状图斑,进行判断:如果不相交则跳过,相交则进行以下操作:
建立一个属性表LinkedHashMap<Field,Object>Attributes来储存每个图斑的相关信息,包括三调tkxs、二调tkxs、二调dlbz、三调zzsxdm、二调zldwdm、三调dlbm、二调dlbm等。
对图斑进行intersect操作,获取到相交部分,并将其通过i循环标号,新建一个MultiPolygon类型的要素图层inter,将geommetry信息加入其中,添加相交部分表面积等特征加入属性表Attributes。
(3)狭长图斑筛除
对于要素图层中存储的每一个相交图斑,对该相交图斑进行负向缓冲区操作,将负向缓冲区操作后新的相交图斑与要素图层中存储的相交图斑进行对比,若二者外包矩形框长宽比变化范围超过阈值,则以新的相交图斑替换要素图层中原先存储的相交图斑,否则依然保留要素图层中原先存储的相交图斑。
负向buffer大小可调整。通过调节buffer大小,可将大部分狭长图斑与部分狭长图斑过滤掉,但仍有可能存在部分未被过滤,且不同的数据可能需要不同的buffer设置。
(4)输出结果
思路:将存储了所有格网中的相交图斑的要素图层以及其属性表以Tuple2格式的元组形式输出,形成第一结果集。
算法实现:输出结果格式Tuple2<bsm3+_+bsm2+_+i,inter>,为二调三调地类图斑的所有相交的结果,将其作为流量计算基本单位,其中inter为相交部分的MultiPolygon格式,计算结果图层记为interLayer。
2、二调零星地物处理
零星地物为点状,可以认为一个点必然只在一块相交结果的面中。
参见图8所示,本步骤流程如下:
(1)通过格网连接
思路:将所述第一结果集和二调中的零星地物图层进行相同的格网化操作,使空间位置相同的相交图斑和二调零星地物赋予相同的格网编号;然后使用leftOuterJoin算子,将两个格网中格网编号相同的相交图斑和零星地物连接起来,返回的结果集包含了第一结果集的全部数据和两个图层中有交集的数据;
算法实现:把第一结果集中的计算结果图层interLayer和零星地物图层再次做格网的划分,并使用leftOuterJoin算子,如果格网id相同,即在同一个格网中,则会进行连接,返回interLayer的全部数据和其与二调零星地物有交集的数据,结果格式为:
Tuple2<String gridId,Tuple2<MultiPolygon,Optional<MultiPoint>>>
(2)判断点和面之间的关系
思路:针对前述连接后的格网,使用mapToPair算子,遍历格网中的各个格网,如果格网内没有零星地物,则直接返回格网内的相交图斑及其标识码bsm23;如果格网内有零星地物,判断零星地物落在哪一个相交图斑中,并将该零星地物的信息记入该相交图斑的属性表中,返回相交图斑和零星地物以及由相交图斑标识码和零星地物标识码拼接成的组合标识码bsm23_lx;
算法实现:使用mapToPair算子,遍历各个格网,如果格网内没有零星地物,interLayer中的MultiPolygon直接获取attributes中的bsm23属性,返回Tuple2<bsm23,mp>,其中bsm23是第一步相交得到的区域标识码,mp是增加了包含零星地物信息之后的面状地物(即相交图斑);
如果格网内有零星地物,判断其落在哪一个MultiPolygon中,列出LWMJ_LIST,计算零星地物面积LWMJ,并重新计算图斑地类面积TBDLMJ为TBDLMJ-LWMJ,都写入到MultiPolygon的attributes中。其中LWMJ_LIST为存储了零星地物的地类编码、标识码、面积等信息的Tuple列表。
返回结果为Tuple2<bsm23_lx,mp>
其中bsm23_lx=bsm_23+'##'+bsm,bsm表示零星地物自身的标识码lx。
(3)去除重复
使用reduceByKey算子对S22中的返回结果进行去重操作,保证一个组合标识码bsm23_lx仅有一条返回数据,使同一组合标识码bsm23_lx仅对应一个相交图斑;
(4)格式调整
思路:使用mapToPair算子将前一步处理后的所有返回数据内的组合标识码bsm23_lx替换成所属的相交图斑的标识码bsm23;再使用groupByKey算子将同一标识码的返回数据进行分类后,使用mapToPair算子将标识码bsm23相同的同一个相交图斑对应的所有零星地物信息合并,得到落入每一个相交图斑的所有零星地物。
算法实现:使用mapToPair将包含点信息的键值对bsm23_lx也换成bsm23;使用groupByKey算子将同一标识码的MultiPolygon进行分类;再使用mapToPair将每个bsm零星地物对应的零星地物信息合并,最后返回结果的attributes中包含了所有零星地物信息和经过处理过后的面状地物信息。
(5)输出结果
思路:最后在所述第一结果集基础上,针对每一个相交图斑,将落入其中的所有零星地物要素更新至要素图层中,并将落入其中的所有零星地物信息以及相交图斑扣除所有内部零星地物后的面积信息更新至该相交图斑的属性表中,得到第二结果集。
算法实现:输出结果为Tuple2<bsm23,mp>,其中此处的mp已经加入了零星地物的信息,其中的计算结果图层记为inter2Layer。3、二调线状地物处理
基本思路:线状地物和面状地物相交,会被面状地物的边缘划分为多段线,将每一段线作为最小线单元,一段最小线单元只落在一个面状地物中,就可以按照和处理零星地物相同思路进行处理。该过程需要分两步进行:
首先,需要将所述第二结果集中的相交图斑要素图层和二调中的线状地物图层通过格网连接后,将相交图斑边界和线状地物的交点作为分割点,在每个分割点处将线状地物分割断开,形成一系列最小线单元,每一段最小线单元只落在一个相交图斑中,每一段最小线单元重新计算其标识码和属性信息。
然后,将每一段最小线单元视为零星地物,按照S2中的处理方法确定每一个相交多边形中的所有最小线单元;并在所述第二结果集基础上,针对每一个相交图斑,将落入其中的所有最小线单元要素更新至要素图层中,并将落入其中的所有最小线单元信息以及相交图斑扣除所有内部最小线单元后的面积信息更新至该相交图斑的属性表中,得到第三结果集。
下面具体描述上述两步二调线状地物处理的具体实现。
3.1计算最小线单元
参见图9所示,本步骤流程如下:
(1)通过格网连接
思路:将所述第二结果集和二调中的线状地物图层进行相同的格网化操作,使空间位置相同的相交图斑和线状地物赋予相同的格网编号;然后使用cogroup算子将两个格网中格网编号相同的相交图斑和线状地物连接起来,返回的结果集为位于同一个格网编号内的第二结果集中相交图斑集合和线状地物集合所组合成的Tuple2元组。
算法实现:将零星地物处理的计算结果的结果和二调中的线状图层xz2dLayerPair再进行格网划分,并进行cogroup,将同一格网对应连接起来。输出了Tuple2<String,Tuple2<Iterable<MultiPolygon>,Iterable<MultiPolyLine>>>,再对其使用flatMapToPair算子,输出结果:<String,MultiPolygon>。
(2)将多边形边界吸附到线上
思路:对于每一个格网中的相交图斑和线状地物,判断线状地物是否与相交图斑的边界重合,并根据判断结果进行处理:
若相交图斑和线状地物的边界重合,则先通过snap操作使相交图斑吸附至线状地物上,再重新通过snap操作使线状地物吸附至相交图斑上,在线状地物与相交图斑外边界相交位置形成分割点;
若相交图斑的边界和线状地物不重合,则将相交图斑与线状地物做intersect操作,若重合则通过snap操作使线状地物吸附至相交图斑上,在线状地物与相交图斑外边界相交位置形成分割点。
算法实现:
1.处理与面状地物边界重合的线:将所有多边形的外环,按照0.001的容差,通过snap操作向线状地物吸附,再将线状地物通过snap操作吸附到多边形上,于是原来的线上被添加了新的节点。此时还没有对线进行分割,只是添加了新的节点。返回Tuple2<>(bsm_xz,mls),其中bsm_xz为相交图斑和线状地物的组合标识码,mls表示相交图斑和线状地物形成的分割点。
2.处理与面状地物边界不重合的线:将线与面状地物边界做intersect,如果相交,则将线做snap操作吸附至边界上,同样得到了分割点。
上述线吸附至面状地物边界的操作为在线状地物与相交图斑外边界相交位置形成分割点。
(3)合并跨格网的线状分割结果
思路:对于同一条线状地物与不同相交图斑形成的分割点,对其进行合并操作。
算法实现:如果存在一条线被格网两边的多边形裁切的情况,会出现图5情况,因此再进行吸附snap操作,得到图5最右边的线结果。
返回类型为Tuple2<bsm_xz,mls>,此时的mls为一条线上的所有分割点。
(4)切割最小线单元
思路:将增加分割点后的线状地物按照线上的分割点进行逐段分解,形成若干最小线单元;重新计算每一段最小线单元的属性信息以及赋予唯一的标识码。
算法实现:
使用flatMapToPair算子,将增加吸附点后的线状地物,根据节点的序号和坐标,将线逐段分解成最小线单元记为partLine,计算每一段最小线单元的CD、面积、新的标识码。此步骤中,通过分割的点来确定一条一条的最小线单元(两点确定一条),然后把这个新的最小线单元partLine的结果写入结果中,从而达到了切割的效果。
输出结果集合Tuple2<bsm_xz_partLine,mls>中。
(5)计算最小线单元所扣除图斑
思路:在每一段最小线单元的中点位置设置缓冲区,判断缓冲区是否与某一相交图斑相交,若相交则将该最小线单元视为落入该相交图斑中。
针对每一个相交图斑,将落入其中的所有最小线单元要素输出至中间图层中,并为最小线单元要素赋予一个反映其坐落的相交图斑的键值。
算法实现:
1.将表示线RDD集合的key从bsm改成kcdwdm+"_"+kctbbh。
读取每条线自带属性中的kctbbh1、kcdwdm1和kctbbh2、kcdwdm2,如果kctbbh2不为空,则此段线段同时坐落在了两个区域交界上,则返回两次结果,得到结果的名称为kctbbh:
Tuple2<kcdwdm1+"_"+kctbbh1,ml>,ml表示一条最小线单元
2.对面状数据进行处理,RDD集合的key从bsm改成zldwdm_9+"_"+tbbh,可以与1中线状地物的坐落kctbbh+kcdwdm编号一一对应,得到结果的名称为mztbbh。其中tbbh为图斑编号。
3.划分线单元所属图斑
kctbbh.cogroup(mztbbh).flatMapToPair
先做cogroup,同一个编号会对应多块面状图斑和多个坐落的线。向每段最小线单元的Attributes中增加了两个新的特征,kcbsm1和kcbsm2,表示其坐落在分割后的图斑唯一编号(原来只有二调与三调的坐落图斑编号,但是现在被intersect切开了,因此不能表示其坐落在哪一小块多边形)。此处取最小线单元的中点并用0.01做缓冲区,判断多边形是否与此缓冲区相交,如果相交且其zldwdm_9+"_"+tbbh属性等于kcdwdm+"_"+kctbbh,则说明该区域需要扣除该线段,将kcbsm属性赋值bsm23。
至此,将最小线单元所扣除的面状图斑进行了明确划分,返回结果
rebh<String,MultiLine>
3.3线状地物面积处理
参见图10所示,本步骤流程如下:
(1)通过格网连接
思路:将所述第二结果集和前述得到的中间图层进行相同的格网化操作,使空间位置相同的相交图斑和线状地物赋予相同的格网编号;然后使用leftOuterJoin算子,将两个格网中格网编号相同的最小线单元和相交图斑连接起来,返回的结果集包含了第二结果集的全部数据和两个图层中有交集的数据;
算法实现:将前述的结果rebh和零星地物处理的计算结果inter2Layer进行格网划分,然后leftOuterJoin,如果格网id相同,即在同一个格网中,则会进行连接,返回数据集左边的全部数据和数据集左边与二调线状地物有交集的数据,格式为:
Tuple2<String gridId,Tuple2<MultiPolygon,Optional<MultiPolyline>>>
(2)判断线和面之间的关系
思路:针对前述连接后的格网,使用mapToPair算子,遍历格网中的各个格网,如果格网内没有最小线单元,则直接返回格网内的相交多图斑及其标识码bsm23;如果格网内有最小线单元,判断最小线单元落在哪一个相交图斑中,并将该最小线单元的信息记入该相交图斑的属性表中,返回相交图斑和最小线单元以及由相交图斑标识码和最小线单元标识码拼接成的组合标识码bsm23_bsmml。
而且如果格网内有最小线单元,需先判断最小线单元落在哪一个相交图斑中,再判断最小线单元完全位于相交图斑内还是落在相交图斑的边界上,若完全位于相交图斑内则在属性表中记录其扣除比例为1;若落在相交图斑的边界上则在属性表中记录其扣除比例为0.5。需从相交图斑中扣除的线状地物面积=线长度*线宽度*扣除比例。
算法实现:
通过mapToPair算子,输入(1)中leftOuterJoin的结果,mp和ml一一对应。
判断此mp的bsm23是否等于线的attribute中的kcbsm1和kcbsm2,来判断是否需要加入计算,而且ml的KCBL属性中已经有了,所以可以直接计算面积。
如果mp的边界包含了线,即线刚好落在面与面之间,则面积扣除比例为0.5,若线落在面中扣除比例为1。线状地物的面积计算方法:area=cd*kd*kcbl,将计算结果存储至attribute中。
返回类型Tuple2<bsm23_bsmml,mp>
(3)去除重复
使用reduceByKey算子对上一步的返回结果进行去重操作,保证一个组合标识码bsm23_bsmml仅有一条返回数据,使同一组合标识码bsm23_bsmml仅对应一个相交图斑。
(4)格式调整
思路:使用mapToPair算子将前一步处理后的所有返回数据内的组合标识码bsm23_bsmml替换成所属的相交图斑标识码bsm23;再使用groupByKey算子将同一标识码的返回数据进行分类后,使用mapToPair算子将标识码相同的同一个相交图斑对应的所有最小线单元信息合并,得到落入每一个相交图斑的所有最小线单元。
算法实现:
使用mapToPair算子将包含线信息的键值对bsm23+bsm_ml也换成bsm23,使用groupBykey算子将同一标识码的MultiPolygon进行分类。mapToPair将每个bsm23对应的线状地物信息合并,最后返回结果的attributes中包含了所有线状地物的信息和经过处理过后的面状地物信息。
(5)输出结果
思路:最后在所述第二结果集基础上,针对每一个相交图斑,将落入其中的所有最小线单元要素更新至要素图层中,并将落入其中的所有最小线单元信息以及相交图斑扣除所有内部零星地物和最小线单元后的面积信息更新至该相交图斑的属性表中,得到第三结果集。
算法实现:
返回Tuple<bsm23,mp>,其中mp已经加入了线状地物的信息。
4、二调与三调数据成果流量分析
参见图11所示,本步骤流程如下:
思路:基于所述第三结果集,以其中的每一个相交图斑为基本计算单元,统计基本计算单元的二调和三调土地利用类型和面积,合并输出不同土地利用类型的流量。而且若土地利用类型为耕地,则计算耕地面积时需考虑田坎系数,图斑的扣除面积=图斑中耕地地类面积*田坎系数。
所有相交图斑均统计完毕后,使用mapToPair算子整理结果并使用reduceByKey算子将同种流向即土地利用类型变化相同的计算结果合并。
算法实现:
(1)根据土地利用类型计算流量
在不同的土地利用类型中,耕地需要进行特殊计算。因为计算耕地面积时需要田坎系数。扣除面积等于图斑地类面积*田坎系数,图斑地类面积要减去扣除面积。
如果二调的扣除面积大于三调的扣除面积,则说明二调的田坎(123)中,有一部分流向了三调的田坎,其余的流入了其他地类类型;
如果二调的扣除面积小于三调的扣除面积,则说明二调的田坎全部流入了三调的田坎中,且二调其他的土地利用类型也有部分流入了三调的田坎,先线、再点、再面。
例如,参见图12所示,二调的kcmj(扣除面积)计算为90单位,三调kcmj为100单位,则说明三调数据中的100单位田坎中,除了二调的田坎外,还有10单位的田坎来自原来的线、点、面。
其余土地利用类型可直接计算流向。
(2)输出结果
至此,所有的相交多边形地块都统计从qdlbm到hdlbm的流向和流入面积,再使用mapToPair算子整理结果并使用reduceByKey算子将同种流向的图斑合并。
结果的格式为:
dlbm2##dlbm3##zldwdm3##tbdlmj2##zzsxdm3##dlbz2
即:地类编码2##地类编码3##坐落单位代码##图斑地类面积2##种植属性代码3##地类备注2##
以上所述的实施例只是本发明的一种较佳的方案,然其并非用以限制本发明。有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型。因此凡采取等同替换或等效变换的方式所获得的技术方案,均落在本发明的保护范围内。
Claims (10)
1.一种基于Spark的海量二三调数据成果流量高性能计算方法,其特征在于,方法步骤如下:
S1、按照S11~S14对二调地类图斑与三调地类图斑进行相交处理:
S11:分别对二调地类图斑与三调地类图斑进行相同的格网化操作,使空间位置相同的地类图斑赋予相同的格网编号;然后使用cogroup算子将两个格网中格网编号相同的图斑连接起来;
S12:针对S11中连接后的格网,遍历格网中的每一个格网,判断当前格网内的每一个三调地类图斑是否存在相交的二调地类图斑,若存在则新建一个对应的MultiPolygon类型的要素图层存储三调地类图斑和二调地类图斑的相交图斑,并在其属性表中记录原三调地类图斑和二调地类图斑的基本信息以及每个相交图斑的标识码bsm23和面积信息;
S13:对于要素图层中存储的每一个相交图斑,对该相交图斑进行负向缓冲区操作,将负向缓冲区操作后新的相交图斑与要素图层中存储的相交图斑进行对比,若二者外包矩形框长宽比变化范围超过阈值,则以新的相交图斑替换要素图层中原先存储的相交图斑,否则依然保留要素图层中原先存储的相交图斑;
S14:将存储了所有格网中的相交图斑的要素图层以及其属性表以Tuple2格式的元组形式输出,形成第一结果集;
S2、按照S21~S24对二调零星地物进行处理:
S21:将所述第一结果集和二调中的零星地物图层进行相同的格网化操作,使空间位置相同的相交图斑和二调零星地物赋予相同的格网编号;然后使用leftOuterJoin算子,将两个格网中格网编号相同的相交图斑和零星地物连接起来,返回的结果集包含了第一结果集的全部数据和两个图层中有交集的数据;
S22:针对S21中连接后的格网,使用mapToPair算子,遍历格网中的各个格网,如果格网内没有零星地物,则直接返回格网内的相交图斑及其标识码bsm23;如果格网内有零星地物,判断零星地物落在哪一个相交图斑中,并将该零星地物的信息记入该相交图斑的属性表中,返回相交图斑和零星地物以及由相交图斑标识码和零星地物标识码拼接成的组合标识码bsm23_lx;
S23:使用reduceByKey算子对S22中的返回结果进行去重操作,保证一个组合标识码bsm23_lx仅有一条返回数据,使同一组合标识码bsm23_lx仅对应一个相交图斑;
S24:使用mapToPair算子将S23处理后的所有返回数据内的组合标识码bsm23_lx替换成所属的相交图斑的标识码bsm23;再使用groupByKey算子将同一标识码的返回数据进行分类后,使用mapToPair算子将标识码bsm23相同的同一个相交图斑对应的所有零星地物信息合并,得到落入每一个相交图斑的所有零星地物;最后在所述第一结果集基础上,针对每一个相交图斑,将落入其中的所有零星地物要素更新至要素图层中,并将落入其中的所有零星地物信息以及相交图斑扣除所有内部零星地物后的面积信息更新至该相交图斑的属性表中,得到第二结果集;
S3、按照S31~S32对二调线状地物进行处理:
S31:将所述第二结果集中的相交图斑要素图层和二调中的线状地物图层通过格网连接后,将相交图斑边界和线状地物的交点作为分割点,在每个分割点处将线状地物分割断开,形成一系列最小线单元,每一段最小线单元只落在一个相交图斑中,每一段最小线单元重新计算其标识码和属性信息;
S32:将每一段最小线单元视为零星地物,按照S2中的处理方法确定每一个相交多边形中的所有最小线单元;并在所述第二结果集基础上,针对每一个相交图斑,将落入其中的所有最小线单元要素更新至要素图层中,并将落入其中的所有最小线单元信息以及相交图斑扣除所有内部最小线单元后的面积信息更新至该相交图斑的属性表中,得到第三结果集;
S4、按照S1~S3得到的结果,进行二调与三调数据成果流量分析:
基于所述第三结果集,以其中的每一个相交图斑为基本计算单元,统计基本计算单元的二调和三调土地利用类型和面积,合并输出不同土地利用类型的流量。
2.如权利要求1所述的基于Spark的海量二三调数据成果流量高性能计算方法,其特征在于,所述的S31具体步骤如下:
S311:将所述第二结果集和二调中的线状地物图层进行相同的格网化操作,使空间位置相同的相交图斑和线状地物赋予相同的格网编号;然后使用cogroup算子将两个格网中格网编号相同的相交图斑和线状地物连接起来,返回的结果集为位于同一个格网编号内的第二结果集中相交图斑集合和线状地物集合所组合成的Tuple2元组;
S312:对于每一个格网中的相交图斑和线状地物,判断线状地物是否与相交图斑的边界重合,并根据判断结果进行处理:
若相交图斑和线状地物的边界重合,则先通过snap操作使相交图斑吸附至线状地物上,再重新通过snap操作使线状地物吸附至相交图斑上,在线状地物与相交图斑外边界相交位置形成分割点;
若相交图斑的边界和线状地物不重合,则将相交图斑与线状地物做intersect操作,若重合则通过snap操作使线状地物吸附至相交图斑上,在线状地物与相交图斑外边界相交位置形成分割点;
S313:对于同一条线状地物与不同相交图斑形成的分割点,对其进行合并操作;
S314:将增加分割点后的线状地物按照线上的分割点进行逐段分解,形成若干最小线单元;重新计算每一段最小线单元的属性信息以及赋予唯一的标识码;
S315:在每一段最小线单元的中点位置设置缓冲区,判断缓冲区是否与某一相交图斑相交,若相交则将该最小线单元视为落入该相交图斑中;
S316:针对每一个相交图斑,将落入其中的所有最小线单元要素输出至中间图层中,并为最小线单元要素赋予一个反映其坐落的相交图斑的键值。
3.如权利要求2所述的基于Spark的海量二三调数据成果流量高性能计算方法,其特征在于,所述的S315中,在每一段最小线单元的中点位置设置半径为0.01的缓冲区。
4.如权利要求2所述的基于Spark的海量二三调数据成果流量高性能计算方法,其特征在于,所述的S32具体步骤如下:
S321:将所述第二结果集和S31中得到的中间图层进行相同的格网化操作,使空间位置相同的相交图斑和线状地物赋予相同的格网编号;然后使用leftOuterJoin算子,将两个格网中格网编号相同的最小线单元和相交图斑连接起来,返回的结果集包含了第二结果集的全部数据和两个图层中有交集的数据;
S322:针对S321中连接后的格网,使用mapToPair算子,遍历格网中的各个格网,如果格网内没有最小线单元,则直接返回格网内的相交多图斑及其标识码bsm23;如果格网内有最小线单元,判断最小线单元落在哪一个相交图斑中,并将该最小线单元的信息记入该相交图斑的属性表中,返回相交图斑和最小线单元以及由相交图斑标识码和最小线单元标识码拼接成的组合标识码bsm23_bsmml;
S323:使用reduceByKey算子对S322中的返回结果进行去重操作,保证一个组合标识码bsm23_bsmml仅有一条返回数据,使同一组合标识码bsm23_bsmml仅对应一个相交图斑;
S324:使用mapToPair算子将S323处理后的所有返回数据内的组合标识码bsm23_bsmml替换成所属的相交图斑标识码bsm23;再使用groupByKey算子将同一标识码的返回数据进行分类后,使用mapToPair算子将标识码相同的同一个相交图斑对应的所有最小线单元信息合并,得到落入每一个相交图斑的所有最小线单元;最后在所述第二结果集基础上,针对每一个相交图斑,将落入其中的所有最小线单元要素更新至要素图层中,并将落入其中的所有最小线单元信息以及相交图斑扣除所有内部零星地物和最小线单元后的面积信息更新至该相交图斑的属性表中,得到第三结果集。
5.如权利要求4所述的基于Spark的海量二三调数据成果流量高性能计算方法,其特征在于,所述的S322中,如果格网内有最小线单元,需先判断最小线单元落在哪一个相交图斑中,再判断最小线单元完全位于相交图斑内还是落在相交图斑的边界上,若完全位于相交图斑内则在属性表中记录其扣除比例为1;若落在相交图斑的边界上则在属性表中记录其扣除比例为0.5。
6.如权利要求5所述的基于Spark的海量二三调数据成果流量高性能计算方法,其特征在于,所述的S322中,需从相交图斑中扣除的线状地物面积=线长度*线宽度*扣除比例。
7.如权利要求1所述的基于Spark的海量二三调数据成果流量高性能计算方法,其特征在于,所述S4中,若土地利用类型为耕地,则计算耕地面积时需考虑田坎系数,图斑的扣除面积=图斑中耕地地类面积*田坎系数。
8.如权利要求1所述的基于Spark的海量二三调数据成果流量高性能计算方法,其特征在于,所述S4中,所有相交图斑均统计完毕后,使用mapToPair算子整理结果并使用reduceByKey算子将同种流向即土地利用类型变化相同的计算结果合并。
9.如权利要求1所述的基于Spark的海量二三调数据成果流量高性能计算方法,其特征在于,所述方法基于Spark计算引擎,以Postgresql数据库实现二调和三调数据的分布式存储,并调用RDD算子和Java GIS工具包GeoTools实现空间数据处理。
10.如权利要求1所述的基于Spark的海量二三调数据成果流量高性能计算方法,其特征在于,二调数据为第二次全国土地调查获得的成果数据,采用mdb格式文件,包含点、线、面三个图层,分别代表零星地物、线状地物与地类图斑,各图层要素由各自的标识码唯一确定;三调数据为第三次全国土地调查获得的成果数据,采用shp格式文件,仅由一个面状图层构成,代表地类图斑。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011551015.9A CN112562040B (zh) | 2020-12-24 | 2020-12-24 | 一种基于Spark的海量二三调数据成果流量高性能计算方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011551015.9A CN112562040B (zh) | 2020-12-24 | 2020-12-24 | 一种基于Spark的海量二三调数据成果流量高性能计算方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112562040A true CN112562040A (zh) | 2021-03-26 |
CN112562040B CN112562040B (zh) | 2022-02-01 |
Family
ID=75033498
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011551015.9A Active CN112562040B (zh) | 2020-12-24 | 2020-12-24 | 一种基于Spark的海量二三调数据成果流量高性能计算方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112562040B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113706604A (zh) * | 2021-08-20 | 2021-11-26 | 苏州工业园区测绘地理信息有限公司 | 一种基于两个凸多边形交集求解算法的地类图斑分析方法 |
CN114677246A (zh) * | 2022-03-17 | 2022-06-28 | 广州市城市规划勘测设计研究院 | 学校招生单元划分方法、装置、设备及介质 |
CN117371819A (zh) * | 2023-10-27 | 2024-01-09 | 广州市城市规划设计有限公司 | 一种城市更新项目用地规划的刚性指标审查方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2980735A1 (en) * | 2009-07-31 | 2016-02-03 | Global Surface Intelligence Ltd | Greenhouse gas grid and tracking system |
CN110176018A (zh) * | 2019-04-18 | 2019-08-27 | 中国测绘科学研究院 | 一种保持结构化地物轮廓特征的图斑合并方法 |
CN110334168A (zh) * | 2019-06-28 | 2019-10-15 | 广东省国土资源测绘院 | 一种城镇村地类细化技术方法 |
-
2020
- 2020-12-24 CN CN202011551015.9A patent/CN112562040B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2980735A1 (en) * | 2009-07-31 | 2016-02-03 | Global Surface Intelligence Ltd | Greenhouse gas grid and tracking system |
CN110176018A (zh) * | 2019-04-18 | 2019-08-27 | 中国测绘科学研究院 | 一种保持结构化地物轮廓特征的图斑合并方法 |
CN110334168A (zh) * | 2019-06-28 | 2019-10-15 | 广东省国土资源测绘院 | 一种城镇村地类细化技术方法 |
Non-Patent Citations (2)
Title |
---|
丁派克等: "一种基于Spark的国产化海量数据预处理和计算技术", 《航天控制》 * |
黄彬: "基于spark的实时海量数据处理分析与优化", 《中国优秀博硕士学位论文全文数据库(硕士)信息科技辑》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113706604A (zh) * | 2021-08-20 | 2021-11-26 | 苏州工业园区测绘地理信息有限公司 | 一种基于两个凸多边形交集求解算法的地类图斑分析方法 |
CN113706604B (zh) * | 2021-08-20 | 2024-02-09 | 园测信息科技股份有限公司 | 一种基于两个凸多边形交集求解算法的地类图斑分析方法 |
CN114677246A (zh) * | 2022-03-17 | 2022-06-28 | 广州市城市规划勘测设计研究院 | 学校招生单元划分方法、装置、设备及介质 |
CN117371819A (zh) * | 2023-10-27 | 2024-01-09 | 广州市城市规划设计有限公司 | 一种城市更新项目用地规划的刚性指标审查方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112562040B (zh) | 2022-02-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112562040B (zh) | 一种基于Spark的海量二三调数据成果流量高性能计算方法 | |
CN106547853B (zh) | 基于一张图的林业大数据建设方法 | |
Dapporto et al. | Biogeography of western Mediterranean butterflies: combining turnover and nestedness components of faunal dissimilarity | |
García‐Roselló et al. | ModestR: a software tool for managing and analyzing species distribution map databases | |
CN103177103A (zh) | 一种三维地理信息系统管理平台 | |
CN113010620B (zh) | 基于地理多级网格的自然资源数据索引统计方法及系统 | |
Damiani et al. | Spatial data warehouse modelling | |
CN106951453A (zh) | 一种快速更新和数据共享的地理实体编码方法 | |
CN105354272A (zh) | 一种基于维度组合的指标计算方法和系统 | |
Sattorov et al. | Database in Land Resource Management. | |
CN106407468B (zh) | 一种描述事物空间属性并基于所述描述进行查找的方法 | |
CN100578499C (zh) | 一种联机分析处理系统中多维数据读写的方法和装置 | |
Painho | The effects of generalization on attribute accuracy in natural resource maps | |
CN116703132B (zh) | 共享车辆动态调度的管理方法、装置及计算机设备 | |
CN109977190B (zh) | 面向大规模矢量地图数据的面积查询处理方法及装置 | |
JP5281284B2 (ja) | 柔軟性のある地理格子を製造するためのシステムおよび方法 | |
CN102142000B (zh) | 一种多比例尺tin库耦合存储方法 | |
CN115903085A (zh) | 一种农业气象灾害预警方法、装置及存储介质 | |
Thiemann et al. | An automatic approach for generalization of land-cover data from topographic data | |
CN112380307A (zh) | 一种土地利用时空数据模型设计方法 | |
Schuurman et al. | Spatial/temporal mismatch: a conflation protocol for Canada Census spatial files | |
Choe et al. | Framework and workflows for spatial database generalization | |
Nelson et al. | The resilience of domestic transport networks in the context of food security–A multi-country analysis: Background paper for The State of Food and Agriculture 2021 | |
CN116975182A (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN117076582A (zh) | 道路数据处理方法、装置、计算机设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |