一种面向时空大数据计算的分布式空间对象组织方法与流程

    专利2022-07-08  121


    本发明属于地理信息系统领域,涉及一种面向时空大数据计算的分布式空间对象组织方法。



    背景技术:

    近年来,随着城市信息化的快速发展,传感器网络、移动互联网、全球定位系统等技术得到了广泛应用,数据的空间分辨率和时间分辨率显著提高,具有时间和空间维度的数据呈指数级爆炸式增长。目前,时空大数据的量级已经达到了pb级甚至eb级,给存储和处理都带来了巨大的压力。随着摩尔定律失效,计算技术开始向多核多cpu、通用gpu计算、集群环境、分布式处理架构方向发展,时空大数据的分布式组织和管理是分布式处理、维护与共享的基础,是目前时空大数据管理的主要技术手段,也是未来发展的必然趋势,同时运用分布式并行计算方式来解决日趋庞大的时空大数据的处理、计算与分析成为必由之路。



    技术实现要素:

    因而为解决上述问题,本发明提供了一种面向时空大数据计算的分布式空间对象组织方法,基于spark弹性分布式数据集,结合开放地理空间信息联盟提出的简单要素空间数据模型和传感网观测数据模型,实现了针对海量空间点、线、面、观测对象的分布式组织和处理。

    本发明所采用的技术方案是一种面向时空大数据计算的分布式空间对象组织方法,实现方式包括以下步骤:

    步骤1,构建空间弹性分布式数据集模型;

    步骤2,将空间弹性分布式数据集转化为空间点弹性分布式数据集;

    步骤3,将空间弹性分布式数据集转化为空间线弹性分布式数据集;

    步骤4,将空间弹性分布式数据集转化为转化为空间面弹性分布式数据集;

    步骤5,基于spark弹性分布式数据集结构rdd和开放地理空间信息联盟传感网观测数据模型,设计空间观测弹性分布式数据集;

    作为优选,步骤1所述构建空间弹性分布式数据集为:

    geometryrdd={spatialgeometrypartitionp},p∈{1,2,…,p}

    spatialgeometrypartitionp={<sgeometryindexcodenp,geometrynp>},np∈{1,2,…,np}

    其中,空间弹性分布式数据集由p个时空大数据分区组成,spatialgeometrypartitionp表示第p个时空大数据分区;

    每个时空大数据分区单独在分布式系统的不同节点进行管理,spatialgeometrypartitionp由np个二元组组成;

    <sgeometryindexcodenp,geometrynp>表示第p个二元组;

    geometrynp为第p个二元组中基础空间对象,由唯一编码、坐标串、属性表组成,定义为:

    geometrynp={geoidnp,geocoordsnp,geoatrributesnp}

    其中,geoidnp为第p个二元组中基础空间对象中唯一编码,geocoordsnp为第p个二元组中基础空间对象中空间坐标串,geoatrributesnp为第p个二元组中基础空间对象中属性表;

    sgeometryindexcodenp为第p个二元组中基础空间对象中空间坐标串与第p个二元组中基础空间对象中唯一编码计算得到的空间索引编码,定义为:

    sgeometryindexcodenp=spacefillingcurvecoding(geocoordsnp,geoidnp)

    其中,spacefillingcurvecoding函数通过输入geometrynp对象的空间坐标串geocoordsnp与唯一编码geoidnp,通过空间填充曲线编码算法获取geometrynp对象的空间坐标串geocoordsnp所处的空间网格编码并与geometrynp对象的唯一编码geoidnp组合生成空间索引编码sgeometryindexcodenp;

    而且,步骤1中,geometryrdd能够将时空大数据文件作为输入,读取其中存储的每个空间对象转换为geometrynp对象,并根据其计算得到的sgeometryindexcodenp在对应的时空大数据分区spatialgeometrypartitionp中进行管理,定义为:

    geometryrdd=readfrombigdatafile(bigdatafilepath)

    其中bigdatafilepath为存储时空大数据的文件路径,readfrombigdatafile获取文件路径后将文件中的内容进行解析,生成geometryrdd对象;

    而且,步骤1中,geometryrdd可以在各个分区中并行地执行相同的geometry数据处理算法并汇总处理结果,实现时空大数据的分布式处理,定义为:

    geometryrddresult=geometryrdd.process(geoalgorithm)

    其中,geoalgorithm为针对geometryrdd执行的算法,geometryrdd.process方法将geoalgorithm作为输入,将其分发到各个分区中对所有geometrynp对象进行处理,并将所有处理结果进行汇总,geometryrddresult为汇总后的处理结果;

    作为优选,步骤2所述空间点弹性分布式数据集为:

    pointrdd=trans2point(geometryrdd)

    pointrdd={sptialpointpartitionp},p∈{1,2,…,p}

    spatialpointpartitionp={<spointindexcodenp,pointnp>},np∈{1,2,…,np}

    其中,方法trans2point将空间弹性分布式数据集作为输入,将其中每个分区中的geometry对象的类型强制转换为其子类point类型,从而将空间弹性分布式数据集转化为空间点弹性分布式数据集;

    pointrdd由p个空间点弹性时空点大数据分区组成,每个空间点弹性时空点大数据分区单独在分布式系统的不同节点进行管理;

    第p个空间点弹性时空点大数据分区即spatialpointpartitionp由np个空间点弹性二元组组成;

    所述空间点弹性二元组为:<spointindexcodenp,pointnp>;

    第p个空间点弹性二元组中空间点对象,由唯一编码、横坐标、纵坐标、属性表组成,定义为:

    pointnp={ptidnp,ptxnp,ptynp,ptatrributesnp}

    其中,ptidnp为第p个空间点弹性二元组中对象的唯一编码,ptxnp为第p个空间点弹性二元组中的空间横坐标,ptynp为第p个空间点弹性二元组中的空间纵坐标,ptatributesnp为第p个空间点弹性二元组中的属性表;

    spointindexcodenp为第p个二元组中空间点对象中空间坐标串与第p个二元组中空间点对象中唯一编码计算得到的空间索引编码,定义为:

    spointindexcodenp=spacefillingcurvecoding(ptxnp,ptynp,ptidnp)

    其中,spacefillingcurvecoding函数通过输入pointnp对象的空间横坐标ptxnp、纵坐标ptynp与唯一编码ptidnp,通过空间填充曲线编码算法获取pointnp对象所处的空间网格编码并与point对象的唯一编码ptidnp组合生成空间索引编码spointindexcodenp;

    而且,步骤2中,pointrdd可以在各个分区中并行地执行相同的point数据处理算法并汇总处理结果,实现时空点大数据的分布式处理,定义为:

    pointrddresult=pointrdd.process(pointalgorithm)

    其中,pointalgorithm为针对pointrdd执行的算法,pointrdd.process方法将pointalgorithm作为输入,将其分发到各个分区中对所有pointnp对象进行处理,并将所有处理结果进行汇总,pointrddresult为汇总后的处理结果;

    作为优选,步骤3所述空间线弹性分布式数据集,定义为:

    linestringrdd=trans2linestring(geometryrdd)

    linestringrdd={spatiallinepartitionp},p∈{1,2,…,p}

    spatiallinepartitionp={<slineindexcodenp,linestringnp>},np∈{1,2,…,np}

    其中,方法trans2linestring将空间弹性分布式数据集作为输入,将其中每个分区中的geometry对象的类型强制转换为其子类linestring类型,从而将空间弹性分布式数据集转化为空间线弹性分布式数据集;

    空间线弹性分布式数据集由p个空间线弹性时空大数据分区组成,每个空间线弹性时空大数据分区可以单独在分布式系统的不同节点进行管理;

    第p个空间线弹性时空大数据分区由np个空间线弹性二元组组成;

    所述空间线弹性二元组定义为<slineindexcodenp,linestringnp>;

    linestringnp为第p个空间线弹性对象,由唯一编码、坐标串、属性表组成,定义为:

    linestringnp={lsidnp,lscoordsnp,lsatrributesnp}

    其中,lsidnp为第p个空间线弹性二元组中linestringnp对象的唯一编码,lscoordsnp为为第p个空间线弹性二元组的空间坐标串,lsatributesnp为为第p个空间线弹性二元组的属性表;

    slineindexcodenp为第p个二元组中空间线对象中空间坐标串与第p个二元组中空间线对象中唯一编码计算得到的空间索引编码,定义为:

    slineindexcodenp=spacefillingcurvecoding(lscoordsnp,lsidnp)

    其中,spacefillingcurvecoding函数通过输入linestring对象的空间坐标串lscoordsnp与唯一编码lsidnp,通过空间填充曲线编码算法获取linestringnp对象的空间坐标串lscoordsnp所处的空间网格编码并与linestringnp对象的唯一编码lsidnp组合生成空间索引编码slineindexcodenp;

    而且,步骤3中,linestringrdd可以在各个分区中并行地执行相同的point数据处理算法并汇总处理结果,实现时空线大数据的分布式处理,定义为:

    linestringrddresult=linestringrdd.process(linestringalgorithm)

    其中,linestringalgorithm为针对linestringrdd执行的算法,linestringrdd.process方法将linestringalgorithm作为输入,将其分发到各个分区中对所有linestringnp对象进行处理,并将所有处理结果进行汇总,linestringrddresult为汇总后的处理结果;

    作为优选,步骤4所述空间面弹性分布式数据集为:

    polygonrdd=trans2polygon(polygonrdd)

    polygonrdd={spatialpolygonpartitionp},p∈{1,2,…,p}

    spatialpolygonpartitionp={<spolygonindexcodenp,polygonnp>},np∈{1,2,…,np}

    其中,方法trans2polygon将空间弹性分布式数据集作为输入,将其中每个分区中的geometry对象的类型强制转换为其子类polygon类型,从而将空间弹性分布式数据集转化为空间面弹性分布式数据集;

    空间面弹性分布式数据集由p个空间面弹性时空大数据分区组成,每个空间面弹性时空大数据分区单独在分布式系统的不同节点进行管理;

    第p个空间面弹性时空大数据分区由np个空间面弹性二元组组成;

    所述第p个空间面弹性二元组定义为<spolygonindexcodenp,polygonnp>;

    polygon为空间面弹性对象,由唯一编码、坐标串、属性表组成,定义为:

    polygonnp={pgidnp,pgcoordsnp,pgatrributesnp}

    其中,pgidnp为第p个空间面弹性二元组的唯一编码,pgcoordsnp为第p个空间面弹性二元组的空间坐标串,pgatributesnp为第p个空间面弹性二元组的属性表;

    spolygonindexcodenp为第p个二元组中空间面对象中空间坐标串与第p个二元组中空间面对象中唯一编码计算得到的空间索引编码,定义为:

    spolygonindexcodenp=spacefillingcurvecoding(pgcoordsnp,pgidnp)

    其中,spacefillingcurvecoding函数通过输入polygonnp对象的空间坐标串pgcoordsnp与唯一编码pgidnp,通过空间填充曲线编码算法获取polygon对象的空间坐标串pgcoordsnp所处的空间网格编码并与polygon对象的唯一编码pgidnp组合生成空间索引编码spolygonindexcode;

    而且,步骤4中,polygonrdd可以在各个分区中并行地执行相同的polygon数据处理算法并汇总处理结果,实现时空面大数据的分布式处理,定义为:

    polygonrddresult=polygonrdd.process(polygonalgorithm)

    其中,polygonalgorithm为针对polygonrdd执行的算法,polygonrdd.process方法将polygonalgorithm作为输入,将其分发到各个分区中对所有polygonnp对象进行处理,并将所有处理结果进行汇总,polygonrddresult为汇总后的处理结果;

    作为优选,步骤5所述空间观测弹性分布式数据集表示为:

    observationrdd={fromtime,untiltime,{spatialobservationpartitionp}},p∈{1,2,…,p}

    spatialobservationpartitionp={<sobservationindexcodenp,observationnp>},np∈{1,2,…,np}

    其中,空间观测弹性分布式数据集observationrdd由表示所有观测对象的最早生成时间的起始时间fromtime、表示所有观测对象的最晚生成时间的截止时间untiltime、以及p个时空观测大数据分区spatialobservationpartition组成,每个时空观测大数据分区可以单独在分布式系统的不同节点进行管理,第p个spatialobservationpartitionp由np个<sobservationindexcodenp,observationnp>空间观测弹性二元组组成,observation为开放地理空间信息联盟传感网观测与测量模型定义的观测对象,由唯一编码、坐标串、属性表组成,定义为:

    observationnp={obidnp,resultnp,phenomenontime,featureofinterest,observedpropertynp,procedurenp}

    其中,obidnp为第p个空间观测弹性二元组中observationnp对象的唯一编码;resultnp为第p个空间观测弹性二元组中observationnp对象的观测结果,是观测过程获取的测量结果,可以是任何数据类型;phenomenontimenp为第p个空间观测弹性二元组中observationnp对象的观测时间,表示观测发生的时间,用时间对象表示;featureofinterestnp为第p个空间观测弹性二元组中observationnp对象的感兴趣的空间要素,即在现实世界中观测的空间要素目标,为geometry类型;observedpropertynp为第p个空间观测弹性二元组中observationnp对象的观测属性,描述观测结果的属性类型对象;(5)procedurenp为第p个空间观测弹性二元组中observationnp对象的观测程序,可以是传感器、仪器或计算过程;

    sobservationindexcodenp为第p个二元组中空间观测对象中的featureofinterestnp与第p个二元组中空间观测对象中唯一编码计算得到的空间索引编码,定义为:

    sobservationindexcodenp=spacefillingcurvecoding(featureofinterestnp,obidnp)

    其中,spacefillingcurvecoding函数通过输入observationnp对象的featureofinterestnp与唯一编码obidnp,通过空间填充曲线编码算法获取observationnp对象的featureofinterestnp所处的空间网格编码并与observationnp对象的唯一编码obidnp组合生成空间索引编码sobservationindexcodenp;

    而且,步骤5中,observationrdd能够将时空观测大数据文件作为输入,读取其中存储的每个空间观测对象转换为observationnp对象,并根据其计算得到的sobservationindexcodenp在对应的时空大数据分区spatialobservationpartitionp中进行管理,定义为:

    observationrdd=readfrombigobservationdatafile(bigobservationdatafilepath)

    其中bigobservationdatafilepath为存储时空观测大数据的文件路径,readfrombigobservationdatafile获取文件路径后将文件中的内容进行解析,生成observationrdd对象;

    而且,步骤5中,observationrdd可以在各个分区中并行地执行相同的observationrdd数据处理算法并汇总处理结果,包括统计观测数量countobservations、过滤观测对象filterobservations、处理事件processevent,实现时空观测大数据的分布式处理,定义为:

    countresult=observationrdd.countobservations()

    filteredobservationrdd=observationrdd.filterobservations(filter)

    eventresult=observationrdd.processevent(event)

    其中,统计观测数量observationrdd.countobservations并行地在所有时空观测大数据分区统计其包含的observation对象数并进行合并,获取observationrdd包含的所有观测对象总数countresult;过滤观测对象observationrdd.filterobservations,基于观测对象过滤条件filter并行地在所有时空观测大数据分区对其包含的observation对象进行过滤,并获得过滤后的filteredobservationrdd对象;处理事件observationrdd.processevent,基于事件处理模型event将observationrdd包含的所有时空观测大数据分区的所有obsevation对象作为输入进行处理,返回对应的模型输出结果eventresult。

    本发明的优点是:

    提出了一套分布式空间对象组织方法,能够对海量空间数据进行高效的组织和处理;

    在空间点、线、面对象的基础上进一步引入了空间观测对象,能够兼容对传感网观测数据进行高效的组织和处理;

    所有空间对象的组织模型遵循国际开放地理信息联盟标准,具有良好的可互操作性。

    运用了先进的分布式处理架构(spark)为空间数据的组织及计算带来高性能与高可用的特色,具有重要的市场价值。

    附图说明

    图1:是本发明实施例的空间点、线、面弹性分布式数据集对象设计类图。

    图2:是本发明实施例的空间观测弹性分布式数据集对象设计类图。

    图3:是本发明方法流程图。

    具体实施方式

    为了便于本领域普通技术人员理解和实施本发明,下面结合实例对本发明作进一步详细描述,应当理解,此处所描述的实施案例仅用于说明和解释本发明,并不用于限定本发明。

    本发明提供了一种面向时空大数据计算的分布式空间对象组织方法,从分布式空间对象组织结构的设计与实现出发,针对其中分布式空间内存对象设计等关键问题,基于spark弹性分布式数据集结构,结合开放地理空间信息联盟提出的简单要素空间数据模型和传感网观测数据模型,实现了针对海量空间点、线、面、观测对象的分布式组织和处理,从而为组织和处理时空大数据提供一种较为全面的解决方案。

    下面结合图1、图2介绍本发明的具体实施方式,实施例包括以下步骤:

    步骤1,构建弹性分布式数据集模型;

    步骤1所述构建空间弹性分布式数据集为:

    geometryrdd={spatialgeometrypartitionp},p∈{1,2,…,p}

    spatialgeometrypartitionp={<sgeometryindexcodenp,geometrynp>},np∈{1,2,…,np}

    其中,空间弹性分布式数据集由p个时空大数据分区组成,spatialgeometrypartitionp表示第p个时空大数据分区;

    每个时空大数据分区单独在spark分布式系统的不同计算机节点的内存中进行管理,spatialgeometrypartitionp由np个二元组组成;

    <sgeometryindexcodenp,geometrynp>表示第p个二元组;

    geometrynp为第p个二元组中基础空间对象,可以为任意空间点、线、面、多点、多线、多面对象,由唯一编码、坐标串、属性表组成,定义为:

    geometrynp={geoidnp,geocoordsnp,geoatrributesnp}

    其中,geoidnp为第p个二元组中基础空间对象中唯一编码,geocoordsnp为第p个二元组中基础空间对象中空间坐标串,geoatrributesnp为第p个二元组中基础空间对象中属性表;

    sgeometryindexcodenp为第p个二元组中基础空间对象中空间坐标串与第p个二元组中基础空间对象中唯一编码计算得到的空间索引编码,定义为:

    sgeometryindexcodenp=spacefillingcurvecoding(geocoordsnp,geoidnp)

    其中,spacefillingcurvecoding函数通过输入geometrynp对象的空间坐标串geocoordsnp与唯一编码geoidnp,通过空间填充曲线编码算法获取geometrynp对象的空间坐标串geocoordsnp所处的空间网格编码并与geometrynp对象的唯一编码geoidnp组合生成空间索引编码sgeometryindexcodenp,具体实施时可以选用z填充曲线、hilbert空间填充曲线等算法;

    而且,步骤1中,geometryrdd能够将时空大数据文件作为输入,包括shapefile、wkt、geojson等格式,读取其中存储的每个空间对象转换为geometrynp对象,并根据其计算得到的sgeometryindexcodenp在对应的时空大数据分区spatialgeometrypartitionp中进行管理,定义为:

    geometryrdd=readfrombigdatafile(bigdatafilepath)

    其中bigdatafilepath为存储时空大数据的文件路径,readfrombigdatafile获取文件路径后将文件中的内容进行解析,生成geometryrdd对象;

    而且,步骤1中,geometryrdd可以在各个分区中并行地执行相同的geometry数据处理算法并汇总处理结果,实现时空大数据的分布式处理,定义为:

    geometryrddresult=geometryrdd.process(geoalgorithm)

    其中,geoalgorithm为针对geometryrdd执行的算法,geometryrdd.process方法将geoalgorithm作为输入,如空间范围查询、缓冲区分析、叠置分析等算法,将其分发到各个分区中对所有geometrynp对象进行处理,并将所有处理结果进行汇总,geometryrddresult为汇总后的处理结果;

    步骤2,将空间弹性分布式数据集转化为空间点弹性分布式数据集;

    步骤2所述空间点弹性分布式数据集为:

    pointrdd=trans2point(geometryrdd)

    pointrdd={sptialpointpartitionp},p∈{1,2,…,p}

    spatialpointpartitionp={<spointindexcodenp,pointnp>},np∈{1,2,…,np}

    其中,方法trans2point将空间弹性分布式数据集作为输入,将其中每个分区中的geometry对象的类型强制转换为其子类point类型,从而将空间弹性分布式数据集转化为空间点弹性分布式数据集;

    pointrdd由p个空间点弹性时空点大数据分区组成,每个空间点弹性时空点大数据分区单独在spark分布式系统的不同计算机节点的内存中进行管理;

    第p个空间点弹性时空点大数据分区即spatialpointpartitionp由np个空间点弹性二元组组成;

    所述空间点弹性二元组为:<spointindexcodenp,pointnp>;

    第p个空间点弹性二元组中空间点对象,由唯一编码、横坐标、纵坐标、属性表组成,定义为:

    pointnp={ptidnp,ptxnp,ptynp,ptatrributesnp}

    其中,ptidnp为第p个空间点弹性二元组中对象的唯一编码,ptxnp为第p个空间点弹性二元组中的空间横坐标,ptynp为第p个空间点弹性二元组中的空间纵坐标,ptatributesnp为第p个空间点弹性二元组中的属性表;

    spointindexcodenp为第p个二元组中空间点对象中空间坐标串与第p个二元组中空间点对象中唯一编码计算得到的空间索引编码,定义为:

    spointindexcodenp=spacefillingcurvecoding(ptxnp,ptynp,ptidnp)

    其中,spacefillingcurvecoding函数通过输入pointnp对象的空间横坐标ptxnp、纵坐标ptynp与唯一编码ptidnp,通过空间填充曲线编码算法获取pointnp对象所处的空间网格编码并与point对象的唯一编码ptidnp组合生成空间索引编码spointindexcodenp,具体实施时可以选用z填充曲线、hilbert空间填充曲线等算法;

    而且,步骤2中,pointrdd可以在各个分区中并行地执行相同的point数据处理算法并汇总处理结果,实现时空点大数据的分布式处理,定义为:

    pointrddresult=pointrdd.process(pointalgorithm)

    其中,pointalgorithm为针对pointrdd执行的算法,pointrdd.process方法将pointalgorithm作为输入,如空间范围查询、缓冲区分析、叠置分析、核密度分析、k邻近查询等算法,将其分发到各个分区中对所有pointnp对象进行处理,并将所有处理结果进行汇总,pointrddresult为汇总后的处理结果;

    步骤3,将空间弹性分布式数据集转化为空间线弹性分布式数据集;

    步骤3所述空间线弹性分布式数据集,定义为:

    linestringrdd=trans2linestring(geometryrdd)

    linestringrdd={spatiallinepartitionp},p∈{1,2,…,p}

    spatiallinepartitionp={<slineindexcodenp,linestringnp>},np∈{1,2,…,np}

    其中,方法trans2linestring将空间弹性分布式数据集作为输入,将其中每个分区中的geometry对象的类型强制转换为其子类linestring类型,从而将空间弹性分布式数据集转化为空间线弹性分布式数据集;

    空间线弹性分布式数据集由p个空间线弹性时空大数据分区组成,每个空间线弹性时空大数据分区可以单独在spark分布式系统的不同计算机节点的内存中进行管理;

    第p个空间线弹性时空大数据分区由np个空间线弹性二元组组成;

    所述空间线弹性二元组定义为<slineindexcodenp,linestringnp>;

    linestringnp为第p个空间线弹性对象,由唯一编码、坐标串、属性表组成,定义为:

    linestringnp={lsidnp,lscoordsnp,lsatrributesnp}

    其中,lsidnp为第p个空间线弹性二元组中linestringnp对象的唯一编码,lscoordsnp为为第p个空间线弹性二元组的空间坐标串,lsatributesnp为为第p个空间线弹性二元组的属性表;

    slineindexcodenp为第p个二元组中空间线对象中空间坐标串与第p个二元组中空间线对象中唯一编码计算得到的空间索引编码,定义为:

    slineindexcodenp=spacefillingcurvecoding(lscoordsnp,lsidnp)

    其中,spacefillingcurvecoding函数通过输入linestring对象的空间坐标串lscoordsnp与唯一编码lsidnp,通过空间填充曲线编码算法获取linestringnp对象的空间坐标串lscoordsnp所处的空间网格编码并与linestringnp对象的唯一编码lsidnp组合生成空间索引编码slineindexcodenp,具体实施时可以选用z填充曲线、hilbert空间填充曲线等算法;

    而且,步骤3中,linestringrdd可以在各个分区中并行地执行相同的point数据处理算法并汇总处理结果,实现时空线大数据的分布式处理,定义为:

    linestringrddresult=linestringrdd.process(linestringalgorithm)

    其中,linestringalgorithm为针对linestringrdd执行的算法,linestringrdd.process方法将linestringalgorithm作为输入,如空间范围查询、缓冲区分析、叠置分析、长度统计等算法,将其分发到各个分区中对所有linestringnp对象进行处理,并将所有处理结果进行汇总,linestringrddresult为汇总后的处理结果;

    步骤4,将空间弹性分布式数据集转化为转化为空间面弹性分布式数据集;

    步骤4所述空间面弹性分布式数据集为:

    polygonrdd=trans2polygon(polygonrdd)

    polygonrdd={spatialpolygonpartitionp},p∈{1,2,…,p}

    spatialpolygonpartitionp={<spolygonindexcodenp,polygonnp>},np∈{1,2,…,np}

    其中,方法trans2polygon将空间弹性分布式数据集作为输入,将其中每个分区中的geometry对象的类型强制转换为其子类polygon类型,从而将空间弹性分布式数据集转化为空间面弹性分布式数据集;

    空间面弹性分布式数据集由p个空间面弹性时空大数据分区组成,每个空间面弹性时空大数据分区单独在spark分布式系统的不同计算机节点的内存中进行管理;

    第p个空间面弹性时空大数据分区由np个空间面弹性二元组组成;

    所述第p个空间面弹性二元组定义为<spolygonindexcodenp,polygonnp>;

    polygon为空间面弹性对象,由唯一编码、坐标串、属性表组成,定义为:

    polygonnp={pgidnp,pgcoordsnp,pgatrributesnp}

    其中,pgidnp为第p个空间面弹性二元组的唯一编码,pgcoordsnp为第p个空间面弹性二元组的空间坐标串,pgatributesnp为第p个空间面弹性二元组的属性表;

    spolygonindexcodenp为第p个二元组中空间面对象中空间坐标串与第p个二元组中空间面对象中唯一编码计算得到的空间索引编码,定义为:

    spolygonindexcodenp=spacefillingcurvecoding(pgcoordsnp,pgidnp)

    其中,spacefillingcurvecoding函数通过输入polygonnp对象的空间坐标串pgcoordsnp与唯一编码pgidnp,通过空间填充曲线编码算法获取polygon对象的空间坐标串pgcoordsnp所处的空间网格编码并与polygon对象的唯一编码pgidnp组合生成空间索引编码spolygonindexcode,具体实施时可以选用z填充曲线、hilbert空间填充曲线等算法;

    而且,步骤4中,polygonrdd可以在各个分区中并行地执行相同的polygon数据处理算法并汇总处理结果,实现时空面大数据的分布式处理,定义为:

    polygonrddresult=polygonrdd.process(polygonalgorithm)

    其中,polygonalgorithm为针对polygonrdd执行的算法,polygonrdd.process方法将polygonalgorithm作为输入,如空间范围查询、缓冲区分析、叠置分析、面积统计、周长统计等算法,将其分发到各个分区中对所有polygonnp对象进行处理,并将所有处理结果进行汇总,polygonrddresult为汇总后的处理结果;

    步骤5,基于spark弹性分布式数据集结构rdd和开放地理空间信息联盟传感网观测数据模型,设计空间观测弹性分布式数据集;

    所述空间观测弹性分布式数据集表示为:

    observationrdd={fromtime,untiltime,{spatialobservationpartitionp}},p∈{1,2,…,p}

    spatialobservationpartitionp={<sobservationindexcodenp,observationnp>},np∈{1,2,…,np}

    其中,空间观测弹性分布式数据集observationrdd由表示所有观测对象的最早生成时间的起始时间fromtime、表示所有观测对象的最晚生成时间的截止时间untiltime、以及p个时空观测大数据分区spatialobservationpartition组成,每个时空观测大数据分区可以单独在spark分布式系统的不同计算机节点的内存中进行管理,第p个spatialobservationpartitionp由np个<sobservationindexcodenp,observationnp>空间观测弹性二元组组成,observation为开放地理空间信息联盟传感网观测与测量模型定义的观测对象,由唯一编码、坐标串、属性表组成,定义为:

    observationnp={obidnp,resultnp,phenomenontime,featureofinterest,observedpropertynp,procedurenp}

    其中,obidnp为第p个空间观测弹性二元组中observationnp对象的唯一编码;resultnp为第p个空间观测弹性二元组中observationnp对象的观测结果,是观测过程获取的测量结果,可以是任何数据类型;phenomenontimenp为第p个空间观测弹性二元组中observationnp对象的观测时间,表示观测发生的时间,用时间对象表示;featureofinterestnp为第p个空间观测弹性二元组中observationnp对象的感兴趣的空间要素,即在现实世界中观测的空间要素目标,为geometry类型;observedpropertynp为第p个空间观测弹性二元组中observationnp对象的观测属性,描述观测结果的属性类型对象;(5)procedurenp为第p个空间观测弹性二元组中observationnp对象的观测程序,可以是传感器、仪器或计算过程;

    sobservationindexcodenp为第p个二元组中空间观测对象中的featureofinterestnp与第p个二元组中空间观测对象中唯一编码计算得到的空间索引编码,定义为:

    sobservationindexcodenp=spacefillingcurvecoding(featureofinterestnp,obidnp)

    其中,spacefillingcurvecoding函数通过输入observationnp对象的featureofinterestnp与唯一编码obidnp,通过空间填充曲线编码算法获取observationnp对象的featureofinterestnp所处的空间网格编码并与observationnp对象的唯一编码obidnp组合生成空间索引编码sobservationindexcodenp,具体实施时可以选用z填充曲线、hilbert空间填充曲线等算法;

    而且,步骤5中,observationrdd能够将时空观测大数据文件作为输入,可以为csv、tsv格式,读取其中存储的每个空间观测对象转换为observationnp对象,并根据其计算得到的sobservationindexcodenp在对应的时空大数据分区spatialobservationpartitionp中进行管理,定义为:

    observationrdd=readfrombigobservationdatafile(bigobservationdatafilepath)

    其中bigobservationdatafilepath为存储时空观测大数据的文件路径,readfrombigobservationdatafile获取文件路径后将文件中的内容进行解析,生成observationrdd对象;

    而且,步骤5中,observationrdd可以在各个分区中并行地执行相同的observationrdd数据处理算法并汇总处理结果,包括统计观测数量countobservations、过滤观测对象filterobservations、处理事件processevent,实现时空观测大数据的分布式处理,定义为:

    countresult=observationrdd.countobservations()

    filteredobservationrdd=observationrdd.filterobservations(filter)

    eventresult=observationrdd.processevent(event)

    其中,统计观测数量observationrdd.countobservations并行地在所有时空观测大数据分区统计其包含的observation对象数并进行合并,获取observationrdd包含的所有观测对象总数countresult;过滤观测对象observationrdd.filterobservations,基于观测对象过滤条件filter,如空间范围过滤条件、时间范围过滤条件,并行地在所有时空观测大数据分区对其包含的observation对象进行过滤,并获得过滤后的filteredobservationrdd对象;处理事件observationrdd.processevent,基于事件处理模型event,如降雨洪涝事件模型,将observationrdd包含的所有时空观测大数据分区的所有obsevation对象作为输入进行处理,返回对应的模型输出结果eventresult。

    具体实施时,以上流程可采用计算机软件技术实现。

    应当理解的是,本申请书未详细阐述的部分均属于现有技术。

    应当理解的是,上述针对较佳实施例的描述较为详细,并不能因此而认为是对本申请专利保护范围的限制,本领域的普通技术人员在本发明的启示下,在不脱离本申请权利要求所保护的范围情况下,还可以做出替换或变形,均落入本申请的保护范围之内,本申请的请求保护范围应以所附权利要求为准。


    技术特征:

    1.一种面向时空大数据计算的分布式空间对象组织方法,实现方式包括以下步骤:

    步骤1,构建空间弹性分布式数据集模型;

    步骤2,将空间弹性分布式数据集转化为空间点弹性分布式数据集;

    步骤3,将空间弹性分布式数据集转化为空间线弹性分布式数据集;

    步骤4,将空间弹性分布式数据集转化为转化为空间面弹性分布式数据集;

    步骤5,基于spark弹性分布式数据集结构rdd和开放地理空间信息联盟传感网观测数据模型,设计空间观测弹性分布式数据集。

    2.根据权利要求1所述的面向时空大数据计算的分布式空间对象组织方法,其特征在于:

    步骤1所述构建空间弹性分布式数据集为:

    geometryrdd={spatialgeometrypartitionp},p∈{1,2,…,p}

    spatialgeometrypartitionp={<sgeometryindexcodenp,geometrynp>},np∈{1,2,…,np}

    其中,空间弹性分布式数据集由p个时空大数据分区组成,spatialgeometrypartitionp表示第p个时空大数据分区;

    每个时空大数据分区单独在分布式系统的不同节点进行管理,spatialgeometrypartitionp由np个二元组组成;

    <sgeometryindexcodenp,geometrynp>表示第p个二元组;

    geometrynp为第p个二元组中基础空间对象,由唯一编码、坐标串、属性表组成,定义为:

    geometrynp={geoidnp,geocoordsnp,geoatrributesnp}

    其中,geoidnp为第p个二元组中基础空间对象中唯一编码,geocoordsnp为第p个二元组中基础空间对象中空间坐标串,geoatrributesnp为第p个二元组中基础空间对象中属性表;

    sgeometryindexcodenp为第p个二元组中基础空间对象中空间坐标串与第p个二元组中基础空间对象中唯一编码计算得到的空间索引编码,定义为:

    sgeometryindexcodenp=spacefillingcurvecoding(geocoordsnp,geoidnp)

    其中,spacefillingcurvecoding函数通过输入geometrynp对象的空间坐标串geocoordsnp与唯一编码geoidnp,通过空间填充曲线编码算法获取geometrynp对象的空间坐标串geocoordsnp所处的空间网格编码并与geometrynp对象的唯一编码geoidnp组合生成空间索引编码sgeometryindexcodenp;

    而且,步骤1中,geometryrdd能够将时空大数据文件作为输入,读取其中存储的每个空间对象转换为geometrynp对象,并根据其计算得到的sgeometryindexcodenp在对应的时空大数据分区spatialgeometrypartitionp中进行管理,定义为:

    geometryrdd=readfrombigdatafile(bigdatafilepath)

    其中bigdatafilepath为存储时空大数据的文件路径,readfrombigdatafile获取文件路径后将文件中的内容进行解析,生成geometryrdd对象;

    而且,步骤1中,geometryrdd可以在各个分区中并行地执行相同的geometry数据处理算法并汇总处理结果,实现时空大数据的分布式处理,定义为:

    geometryrddresult=geometryrdd.process(geoalgorithm)

    其中,geoalgorithm为针对geometryrdd执行的算法,geometryrdd.process方法将geoalgorithm作为输入,将其分发到各个分区中对所有geometrynp对象进行处理,并将所有处理结果进行汇总,geometryrddresult为汇总后的处理结果。

    3.根据权利要求1所述的面向时空大数据计算的分布式空间对象组织方法,其特征在于:

    步骤2所述空间点弹性分布式数据集为:

    pointrdd=trans2point(geometryrdd)

    pointrdd={sptialpointpartitionp},p∈{1,2,…,p}

    spatialpointpartitionp={<spointindexcodenp,pointnp>},np∈{1,2,…,np}

    其中,方法trans2point将空间弹性分布式数据集作为输入,将其中每个分区中的geometry对象的类型强制转换为其子类point类型,从而将空间弹性分布式数据集转化为空间点弹性分布式数据集;

    pointrdd由p个空间点弹性时空点大数据分区组成,每个空间点弹性时空点大数据分区单独在分布式系统的不同节点进行管理;

    第p个空间点弹性时空点大数据分区即spatialpointpartitionp由np个空间点弹性二元组组成;

    所述空间点弹性二元组为:<spointindexcodenp,pointnp>;

    第p个空间点弹性二元组中空间点对象,由唯一编码、横坐标、纵坐标、属性表组成,定义为:

    pointnp={ptidnp,ptxnp,ptynp,ptatrributesnp}

    其中,ptidnp为第p个空间点弹性二元组中对象的唯一编码,ptxnp为第p个空间点弹性二元组中的空间横坐标,ptynp为第p个空间点弹性二元组中的空间纵坐标,ptatributesnp为第p个空间点弹性二元组中的属性表;

    spointindexcodenp为第p个二元组中空间点对象中空间坐标串与第p个二元组中空间点对象中唯一编码计算得到的空间索引编码,定义为:

    spointindexcodenp=spacefillingcurvecoding(ptxnp,ptynp,ptidnp)

    其中,spacefillingcurvecoding函数通过输入pointnp对象的空间横坐标ptxnp、纵坐标ptynp与唯一编码ptidnp,通过空间填充曲线编码算法获取pointnp对象所处的空间网格编码并与point对象的唯一编码ptidnp组合生成空间索引编码spointindexcodenp;

    而且,步骤2中,pointrdd可以在各个分区中并行地执行相同的point数据处理算法并汇总处理结果,实现时空点大数据的分布式处理,定义为:

    pointrddresult=pointrdd.process(pointalgorithm)

    其中,pointalgorithm为针对pointrdd执行的算法,pointrdd.process方法将pointalgorithm作为输入,将其分发到各个分区中对所有pointnp对象进行处理,并将所有处理结果进行汇总,pointrddresult为汇总后的处理结果。

    4.根据权利要求1所述的面向时空大数据计算的分布式空间对象组织方法,其特征在于:

    步骤3所述空间线弹性分布式数据集,定义为:

    linestringrdd=trans2linestring(geometryrdd)

    linestringrdd={spatiallinepartitionp},p∈{1,2,…,p}

    spatiallinepartitionp={<slineindexcodenp,linestringnp>},np∈{1,2,…,np}

    其中,方法trans2linestring将空间弹性分布式数据集作为输入,将其中每个分区中的geometry对象的类型强制转换为其子类linestring类型,从而将空间弹性分布式数据集转化为空间线弹性分布式数据集;

    空间线弹性分布式数据集由p个空间线弹性时空大数据分区组成,每个空间线弹性时空大数据分区可以单独在分布式系统的不同节点进行管理;

    第p个空间线弹性时空大数据分区由np个空间线弹性二元组组成;

    所述空间线弹性二元组定义为<slineindexcodenp,linestringnp>;

    linestringnp为第p个空间线弹性对象,由唯一编码、坐标串、属性表组成,定义为:

    linestringnp={lsidnp,lscoordsnp,lsatrributesnp}

    其中,lsidnp为第p个空间线弹性二元组中linestringnp对象的唯一编码,lscoordsnp为为第p个空间线弹性二元组的空间坐标串,lsatributesnp为为第p个空间线弹性二元组的属性表;

    slineindexcodenp为第p个二元组中空间线对象中空间坐标串与第p个二元组中空间线对象中唯一编码计算得到的空间索引编码,定义为:

    slineindexcodenp=spacefillingcurvecoding(lscoordsnp,lsidnp)

    其中,spacefillingcurvecoding函数通过输入linestring对象的空间坐标串lscoordsnp与唯一编码lsidnp,通过空间填充曲线编码算法获取linestringnp对象的空间坐标串lscoordsnp所处的空间网格编码并与linestringnp对象的唯一编码lsidnp组合生成空间索引编码slineindexcodenp;

    而且,步骤3中,linestringrdd可以在各个分区中并行地执行相同的point数据处理算法并汇总处理结果,实现时空线大数据的分布式处理,定义为:

    linestringrddresult=linestringrdd.process(linestringalgorithm)

    其中,linestringalgorithm为针对linestringrdd执行的算法,linestringrdd.process方法将linestringalgorithm作为输入,将其分发到各个分区中对所有linestringnp对象进行处理,并将所有处理结果进行汇总,linestringrddresult为汇总后的处理结果。

    5.根据权利要求1所述的面向时空大数据计算的分布式空间对象组织方法,其特征在于:

    步骤4所述空间面弹性分布式数据集为:

    polygonrdd=trans2polygon(polygonrdd)

    polygonrdd={spatialpolygonpartitionp},p∈{1,2,…,p}

    spatialpolygonpartitionp={<spolygonindexcodenp,polygonnp>},np∈{1,2,…,np}

    其中,方法trans2polygon将空间弹性分布式数据集作为输入,将其中每个分区中的geometry对象的类型强制转换为其子类polygon类型,从而将空间弹性分布式数据集转化为空间面弹性分布式数据集;

    空间面弹性分布式数据集由p个空间面弹性时空大数据分区组成,每个空间面弹性时空大数据分区单独在分布式系统的不同节点进行管理;

    第p个空间面弹性时空大数据分区由np个空间面弹性二元组组成;

    所述第p个空间面弹性二元组定义为<spolygonindexcodenp,polygonnp>;

    polygon为空间面弹性对象,由唯一编码、坐标串、属性表组成,定义为:

    polygonnp={pgidnp,pgcoordsnp,pgatrributesnp}

    其中,pgidnp为第p个空间面弹性二元组的唯一编码,pgcoordsnp为第p个空间面弹性二元组的空间坐标串,pgatributesnp为第p个空间面弹性二元组的属性表;

    spolygonindexcodenp为第p个二元组中空间面对象中空间坐标串与第p个二元组中空间面对象中唯一编码计算得到的空间索引编码,定义为:

    spolygonindexcodenp=spacefillingcurvecoding(pgcoordsnp,pgidnp)

    其中,spacefillingcurvecoding函数通过输入polygonnp对象的空间坐标串pgcoordsnp与唯一编码pgidnp,通过空间填充曲线编码算法获取polygon对象的空间坐标串pgcoordsnp所处的空间网格编码并与polygon对象的唯一编码pgidnp组合生成空间索引编码spolygonindexcode;

    而且,步骤4中,polygonrdd可以在各个分区中并行地执行相同的polygon数据处理算法并汇总处理结果,实现时空面大数据的分布式处理,定义为:

    polygonrddresult=polygonrdd.process(polygonalgorithm)

    其中,polygonalgorithm为针对polygonrdd执行的算法,polygonrdd.process方法将polygonalgorithm作为输入,将其分发到各个分区中对所有polygonnp对象进行处理,并将所有处理结果进行汇总,polygonrddresult为汇总后的处理结果。

    6.根据权利要求1所述的面向时空大数据计算的分布式空间对象组织方法,其特征在于:

    步骤5所述空间观测弹性分布式数据集表示为:

    observationrdd={fromtime,untiltime,{spatialobservationpartitionp}},p∈{1,2,…,p}

    spatialobservationpartitionp={<sobservationindexcodenp,observationnp>},np∈{1,2,…,np}

    其中,空间观测弹性分布式数据集observationrdd由表示所有观测对象的最早生成时间的起始时间fromtime、表示所有观测对象的最晚生成时间的截止时间untiltime、以及p个时空观测大数据分区spatialobservationpartition组成,每个时空观测大数据分区可以单独在分布式系统的不同节点进行管理,第p个spatialobservationpartitionp由np个<sobservationindexcodenp,observationnp>空间观测弹性二元组组成,observation为开放地理空间信息联盟传感网观测与测量模型定义的观测对象,由唯一编码、坐标串、属性表组成,定义为:

    observationnp={obidnp,resultnp,phenomenontime,featureofinterest,observedpropertynp,procedurenp}

    其中,obidnp为第p个空间观测弹性二元组中observationnp对象的唯一编码;resultnp为第p个空间观测弹性二元组中observationnp对象的观测结果,是观测过程获取的测量结果,可以是任何数据类型;phenomenontimenp为第p个空间观测弹性二元组中observationnp对象的观测时间,表示观测发生的时间,用时间对象表示;featureofinterestnp为第p个空间观测弹性二元组中observationnp对象的感兴趣的空间要素,即在现实世界中观测的空间要素目标,为geometry类型;observedpropertynp为第p个空间观测弹性二元组中observationnp对象的观测属性,描述观测结果的属性类型对象;(5)procedurenp为第p个空间观测弹性二元组中observationnp对象的观测程序,可以是传感器、仪器或计算过程;

    sobservationindexcodenp为第p个二元组中空间观测对象中的featureofinterestnp与第p个二元组中空间观测对象中唯一编码计算得到的空间索引编码,定义为:

    sobservationindexcodenp=spacefillingcurvecoding(featureofinterestnp,obidnp)

    其中,spacefillingcurvecoding函数通过输入observationnp对象的featureofinterestnp与唯一编码obidnp,通过空间填充曲线编码算法获取observationnp对象的featureofinterestnp所处的空间网格编码并与observationnp对象的唯一编码obidnp组合生成空间索引编码sobservationindexcodenp;

    而且,步骤5中,observationrdd能够将时空观测大数据文件作为输入,读取其中存储的每个空间观测对象转换为observationnp对象,并根据其计算得到的sobservationindexcodenp在对应的时空大数据分区spatialobservationpartitionp中进行管理,定义为:

    observationrdd=readfrombigobservationdatafile(bigobservationdatafilepath)

    其中bigobservationdatafilepath为存储时空观测大数据的文件路径,readfrombigobservationdatafile获取文件路径后将文件中的内容进行解析,生成observationrdd对象;

    而且,步骤5中,observationrdd可以在各个分区中并行地执行相同的observationrdd数据处理算法并汇总处理结果,包括统计观测数量countobservations、过滤观测对象filterobservations、处理事件processevent,实现时空观测大数据的分布式处理,定义为:

    countresult=observationrdd.countobservations()

    filteredobservationrdd=observationrdd.filterobservations(filter)

    eventresult=observationrdd.processevent(event)

    其中,统计观测数量observationrdd.countobservations并行地在所有时空观测大数据分区统计其包含的observation对象数并进行合并,获取observationrdd包含的所有观测对象总数countresult;过滤观测对象observationrdd.filterobservations,基于观测对象过滤条件filter并行地在所有时空观测大数据分区对其包含的observation对象进行过滤,并获得过滤后的filteredobservationrdd对象;处理事件observationrdd.processevent,基于事件处理模型event将observationrdd包含的所有时空观测大数据分区的所有obsevation对象作为输入进行处理,返回对应的模型输出结果eventresult。

    技术总结
    本发明提出了一种面向时空大数据计算的分布式空间对象组织方法。本发明基于SPARK弹性分布式数据集结构RDD和开放地理空间信息联盟简单要素空间数据模型与传感网观测数据模型构建空间弹性分布式数据集模型与空间观测弹性分布式数据集,并进一步将空间弹性分布式数据集转化为空间点弹性分布式数据集、空间线弹性分布式数据集和空间面弹性分布式数据集,以支持时空点、线、面、观测大数据的分布式处理。本发明能够支持海量空间数据进行高效的组织和处理,并兼容对传感网观测数据进行高效的组织和处理,运用先进的分布式处理架构为空间数据的组织及计算带来高性能与高可用的特色。

    技术研发人员:乐鹏;上官博屹;龚健雅;姜良存;张明达;胡磊
    受保护的技术使用者:武汉大学
    技术研发日:2020.12.09
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-21794.html

    最新回复(0)