一种提高无人机航测数据生成瓦片地图效率的方法转让专利

申请号 : CN201810320126.5

文献号 : CN108536829B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 黄璐琦张小波郭兰萍

申请人 : 中国中医科学院中药研究所

摘要 :

本发明涉及一种提高无人机航测数据生成瓦片地图效率的方法,其特征在于包括以下内容:通过无人机采集任务区域的航测数据;根据航测数据及计算机配置将总任务均匀分成若干子任务,并输出所有子任务标识;提交得到的子任务标识给hadoop集群;根据得到的子任务并行处理航测数据生成瓦片地图;编码瓦片地图的瓦片,并将编码后的瓦片上传到hbase库中建立索引。本发明可以广泛应用于瓦片地图生成中。

权利要求 :

1.一种提高无人机航测数据生成瓦片地图效率的方法,其特征在于包括以下内容:通过无人机采集任务区域的航测数据;

根据航测数据及计算机配置将总任务均匀分成若干子任务,并输出所有子任务标识具体过程为:

1)根据已知图片的经纬度范围和预先设置好的瓦片层数计算出每层瓦片的起始、结束瓦片的横纵值;

2)根据每层的起始、结束瓦片计算出总瓦片数;

3)通过计算机配置计算任务数;

4)根据航测数据和任务数计算每个子任务标识,具体过程为:

4.1)输入无人机航测数据;

4.2)计算出子任务需要生成的瓦片数,其计算公式如为:

其中,h表示从起始层到结束层瓦片总数,n表示前面计算得到的任务数,d表示每个子任务的瓦片数,由于d需要向上取整,所以最后个子任务的瓦片数会小于d;

4.3)得到子任务的任务号;

4.4)以最小层第一个瓦片为任务1的起始瓦片,按行优先遍历得到从起始瓦片往后d个瓦片作为任务1所要处理的瓦片,若到本行末瓦片累计总数少于d个,则从下一行起点继续累计,若到本层末瓦片累计总数少于d个,则从下一层起始瓦片继续累计,直到累计到d个瓦片,取第d个瓦片作为该任务的结束瓦片,将该结束瓦片的后一个瓦片作为下一个任务的起始瓦片,依照前述规则得到下一个任务的终点,其中,前述规则具体为:将新的起始瓦片,按行优先遍历得到从起始瓦片往后d个瓦片作为任务2所要处理的瓦片,若到本行末瓦片累计总数少于d个,则从下一行起点继续累计,若到本层末瓦片累计总数少于d个,则从下一层起始瓦片继续累计,直到累计到d个瓦片,取第d个瓦片作为该任务的结束瓦片,将该结束瓦片的后一个瓦片作为下一个任务的起始瓦片,以此类推,得到所有任务的起点和终点,最后一个任务由于瓦片数会小于d,则最后一个任务的结束瓦片直接定为最大层的最后一个瓦片;

4.5)输出该子任务标识,即起始瓦片和结束瓦片的标识:[“层数”-“横轴值”-“纵轴值”];提交子任务标识给hadoop集群;

根据得到的子任务并行处理航测数据生成瓦片地图;

编码瓦片地图的瓦片,并将编码后的瓦片上传到hbase库中建立索引。

2.根据权利要求1所述的方法,其特征在于,提交子任务标识给hadoop集群具体为:修改hadoop的预处理类:InputFormat,预处理类以[“任务id”,“起始瓦片”+“结束瓦片”]的格式作为一个子任务的标识,Hadoop集群通过InputFormat类输出带有子任务标识的键值对作为并行阶段任务的输入。

3.根据权利要求1所述的方法,其特征在于,根据得到的子任务并行处理航测数据生成瓦片地图具体为:并行阶段根据输入的子任务标识调用移植到hadoop上的mapnik库生成子任务标识范围内的所有瓦片。

4.根据权利要求3所述的方法,其特征在于,将mapnik的图像处理功能移植到hadoop上,具体步骤如下:修改mapnik库中的文件系统,使修改后的mapnik库直接操作hadoop的文件系统,在操作hadoop文件系统的过程中,用到了hadoop的短路读功能,该功能绕过了datanode直接读取数据从而提高了读取速度;

使用hadoop的streaming功能,在hadoop并行阶段通过c++程序使用修改后的mapnik库。

5.根据权利要求1所述的方法,其特征在于,编码瓦片地图的瓦片采用希尔伯特编码算法。

6.根据权利要求5所述的方法,其特征在于,用户通过c++程序使用thrift上传已编码的瓦片地图到hbase库中,存储的行健格式为:“层”-“希尔伯特编码值”,希尔伯特编码值为对应瓦片的内容。

说明书 :

一种提高无人机航测数据生成瓦片地图效率的方法

技术领域

[0001] 本发明涉及一种提高无人机航测数据生成瓦片地图效率的方法,涉及瓦片地图技术领域。

背景技术

[0002] 随着遥感技术的不断进步,遥感数据日益渗透到人类日常生活中,例如地形测绘、数字地球、植株监测等。各行各业对遥感数据的需求不断增长,遥感数据获取手段却相对不足,无人机遥感技术以更低的运营成本、简便的操作应用成为主要的遥感技术之一,该技术可以获取县域、地区域范围的高分辨率影像数据。高分辨率影像数据会产生更大规模的数据,现阶段大规模栅格数据集的可视化工作通常需要大量的预处理时间,主要消耗在图像拼接、金字塔瓦片生成等阶段。ArcGIS、MapGIS、Mapnik等地理信息系统和地理信息处理库均使用了瓦片技术来提高地图服务效率,但是现有的针对大规模影像数据的瓦片生成方法只能逐个生成瓦片,航测数据的数据量越大,现有方法的计算量就会越大,生成瓦片地图的效率就会越低,现有方法已经远不能适应当前航测数据集规模日益增大的趋势。

发明内容

[0003] 为了解决传统方法生成瓦片效率低下的问题,本发明提供一种提高无人机航测数据生成瓦片地图效率的方法,该方法采用hadoop分布式架构,通过调用开源的mapnik库,并行生成瓦片从而提高航测数据的瓦片生成效率。
[0004] 为实现上述目的,本发明采取以下技术方案:一种提高无人机航测数据生成瓦片地图效率的方法,其特征在于包括以下内容:通过无人机采集任务区域的航测数据;根据航测数据及计算机配置将总任务均匀分成若干子任务,并输出所有子任务标识;提交子任务标识给hadoop集群;根据得到的子任务并行处理航测数据生成瓦片地图;编码瓦片地图的瓦片,并将编码后的瓦片上传到hbase库中建立索引。
[0005] 进一步地,根据航测数据及计算机配置将总任务均匀分成若干子任务,并输出所有子任务标识的具体过程为:
[0006] 1)根据已知图片的经纬度范围和预先设置好的瓦片层数计算出每层瓦片的起始、结束瓦片的横纵值;
[0007] 2)根据每层的起始、结束瓦片计算出总瓦片数;
[0008] 3)通过计算机配置计算任务数;
[0009] 4)根据航测数据和任务数计算每个子任务标识。
[0010] 进一步地,所述4)根据航测数据和任务数计算每个子任务标识的具体过程为:
[0011] 4.1)输入无人机航测数据;
[0012] 4.2)计算出子任务需要生成的瓦片数,其计算公式如为:
[0013]
[0014] 其中,h表示从起始层到结束层瓦片总数,n表示前面计算得到的任务数,d表示每个子任务的瓦片数,由于d需要向上取整,所以最后个子任务的瓦片数会小于d;
[0015] 4.3)得到子任务的任务号;
[0016] 4.4)以最小层第一个瓦片为任务1的起始瓦片,按行优先遍历得到从起始瓦片往后d个瓦片作为任务1所要处理的瓦片,若到本行末瓦片累计总数少于d个,则从下一行起点继续累计,若到本层末瓦片累计总数少于d个,则从下一层起始瓦片继续累计,直到累计到d个瓦片,取第d个瓦片作为该任务的结束瓦片,将该结束瓦片的后一个瓦片作为下一个任务的起始瓦片,依照前述规则得到下一个任务的终点,以此类推,得到所有任务的起点和终点,最后一个任务由于瓦片数会小于d,则最后一个任务的结束瓦片直接定为最大层的最后一个瓦片;
[0017] 4.5)输出该子任务标识,即起始瓦片和结束瓦片的标识:[“层数”-“横轴值”-“纵轴值”]。
[0018] 进一步地,提交子任务标识给hadoop集群具体为:修改hadoop的预处理类:InputFormat,预处理类以[“任务id”,“起始瓦片”+“结束瓦片”]的格式作为一个子任务的标识,hadoop集群通过InputFormat类输出带有子任务标识的键值对作为并行阶段任务的输入。
[0019] 进一步地,根据得到的子任务并行处理航测数据生成瓦片地图具体为:并行阶段根据输入的子任务标识调用移植到hadoop上的mapnik库生成子任务标识范围内的所有瓦片。
[0020] 进一步地,将mapnik的图像处理功能移植到hadoop上,具体步骤如下:修改mapnik库中的文件系统,使修改后的mapnik库直接操作hadoop的文件系统,在操作hadoop文件系统的过程中,用到了hadoop的短路读功能,该功能绕过了datanode直接读取数据从而提高了读取速度;使用hadoop的streaming功能,在hadoop并行阶段通过c++程序使用修改后的mapnik库。
[0021] 进一步地,编码瓦片地图的瓦片采用希尔伯特编码算法。
[0022] 进一步地,用户通过c++程序使用thrift上传已编码的瓦片地图到hbase库中,存储的行健格式为:“层”-“希尔伯特编码值”,希尔伯特编码值为对应瓦片的内容。
[0023] 本发明由于采取以上技术方案,其具有以下优点:1、本发明利用hadoop集群中mapreduce模块的并行计算功能,通过并行计算的方式生成瓦片地图,有效减少计算时间,且在并行阶段,本发明根据航测数据和集群配置合理的划分子任务,充分利用了集群资源进一步提高了瓦片生成效率。2、本发明将c++开源库mapnik移植到hadoop集群中,通过调用mapnik库来操作hadoop文件系统。3、本发明利用hadoop的streaming技术,使hadoop的并行阶段可以通过c++程序来完成,有效解决基于java的hadoop和基于c++语言的mapnik不兼容的问题。4、本发明根据集群的配置,将总任务均分成若干子任务,通过给集群中每台计算机分配合理计算量的任务,充分利用了集群的性能,具有提高并行计算效率的技术效果。5、本发明利用thrift技术,通过c++程序来操作hbase,操作方便。本发明可以广泛应用于瓦片地图中。

附图说明

[0024] 图1为本发明提高无人机航测数据生成瓦片地图效率的方法流程图;
[0025] 图2为本发明提高无人机航测数据生成瓦片地图效率的方法中hadoop集群运算的流程图;
[0026] 图3为本发明提高无人机航测数据生成瓦片地图效率的方法中任务分配过程的流程图。

具体实施方式

[0027] 以下结合附图来对本发明进行详细的描绘。然而应当理解,附图的提供仅为了更好地理解本发明,它们不应该理解成对本发明的限制。
[0028] 术语解释:hadoop是一种开源的分布式系统架构,可以应用于分布式程序的开发;mapreduce是一种用于大规模数据集的并行运算的编程模型,hadoop自带mapreduce功能;
hdfs是hadoop分布式文件系统;hbase是一个分布式的、面向列的开源数据库,其利用hdfs作文文件存储系统;mapnik是一个用于开发GIS应用程序的开源工具包,其核心是c++的共享库;hadoop streaming允许用户在多语言环境下操作mapreduce;thrift提供操作hbase的c++接口。
[0029] 如图1、图2所示,本发明提供的提高无人机航测数据生成瓦片地图效率的方法,包括以下内容:
[0030] 1、通过无人机采集任务区域的航测数据,具体为:设置无人机任务,通过无人机采集任务区域的航测数据,并将采集的航测数据通过OpenDroneMap生成tiff格式文件作为源数据。
[0031] 2、根据航测数据及计算机配置将总任务均匀分成若干子任务,并输出所有子任务标识,具体过程为:
[0032] 1)根据已知图片的经纬度范围和预先设置好的瓦片层数(如17-23层)计算出每层瓦片的起始、结束瓦片的横纵值。
[0033] N=2z;
[0034]
[0035]
[0036] 其中, 表示取整运算,z表示瓦片层数,N表示输入的经纬度范围内第z层一行的瓦片数,x、y分别表示所在瓦片的横纵值,lon表示经度,lat表示纬度。例如输入的经纬度为:+118.716度、+30.2878度,瓦片层数是17,则输出的瓦片的横纵值分别为:x=108759,y=53955。
[0037] 2)根据每层的起始、结束瓦片计算出总瓦片数。具体公式为:
[0038] D(z)=(X1(z)-X0(z)+1)*(Y1(z)-Y0(z)+1);
[0039] 且a0≤a1,
[0040] 其中,z表示瓦片层数,D(z)表示第z层图片已知经纬度范围内瓦片总数,X0和Y0表示起始瓦片横值和纵值,X1和Y1表示结束瓦片横值和纵值,a0和a1表示预设的起始和结束层,h表示从第a0层到a1层瓦片总数。
[0041] 3)通过计算机配置计算任务数。
[0042] 集群同时进行的map任务数量与进行计算的节点个数和cpu有关,具体计算公式为:
[0043] m=d*k;
[0044] 其中,d表示每个节点同时运行的map任务数(双核cpu默认为2),k表示用于并行计算的节点数,m表示集群同时进行的map任务数量。
[0045] 在计算任务数过程中,需要保证每个任务处理的内容不能过小,所以要设置每个任务处理的最少图片数量,通过图片总数除以最小图片数量可以算出最大的任务数,最后求得的任务数是最大任务数以内的满足map任务数量倍数的最大值,具体计算公式为:
[0046] q=h/p;
[0047]
[0048] 其中,p表示每个任务处理的最小瓦片数,h表示总瓦片数,q表示最大允许的任务数,n表示最终计算得到的任务数,m表示集群同时进行的map任务数量。
[0049] 4)如图2、图3所示,根据航测数据和任务数计算每个子任务标识,具体过程为:
[0050] 4.1)输入无人机航测数据;
[0051] 4.2)计算出子任务需要生成的瓦片数,其计算公式如为:
[0052]
[0053] 其中,h表示从起始层到结束层瓦片总数,n表示前面计算得到的任务数,d表示每个子任务的瓦片数,由于d需要向上取整,所以最后个子任务的瓦片数会小于d。
[0054] 4.3)得到子任务的任务号,若计算得到48个子任务,则各子任务分布从1编号到48;
[0055] 4.4)以最小层第一个瓦片为任务1的起始瓦片,按行优先遍历得到从起始瓦片往后d个瓦片作为任务1所要处理的瓦片,若到本行末瓦片累计总数少于d个,则从下一行起点继续累计,若到本层末瓦片累计总数少于d个,则从下一层起始瓦片继续累计,直到累计到d个瓦片,取第d个瓦片作为该任务的结束瓦片,将该结束瓦片的后一个瓦片作为下一个任务的起始瓦片,依照前述规则得到下一个任务的终点,以此类推,得到所有任务的起点和终点。最后一个任务由于瓦片数会小于d,因此最后一个任务的结束瓦片直接定为最大层的最后一个瓦片。
[0056] 4.5)输出该子任务标识,即起始瓦片和结束瓦片的标识:[“层数”-“横轴值”-“纵轴值”]。
[0057] 例如:航测数据的起始经纬度为:+118.716度、+30.2878度,结束经纬度为:+118.725度、+30.2803度,所产生的总瓦片数为908910,任务数是48,则根据图3可以得到以[“层数”-“横轴值”-“纵轴值”]为瓦片格式的第一个子任务的起始瓦片为:[17-108759-
53955],结束瓦片为:[23-6960762-3453196],第二个子任务的起始瓦片为:[23-6960763-
3453196],结束瓦片为:[23-6960708-3453286],同理可得其他子任务的标识。通过分配合理的子任务给集群中的计算机进行计算可以充分利用集群资源,提高计算效率。
[0058] 3、提交得到的子任务标识给hadoop集群;
[0059] 如图2所示,提交子任务标识到hadoop集群需要修改hadoop中的预处理类,其步骤具体为:
[0060] 修改hadoop的预处理类:InputFormat,预处理类以[“任务id”,“起始瓦片”+“结束瓦片”]的格式作为一个子任务的标识。
[0061] hadoop集群通过InputFormat类输出带有子任务标识的键值对作为并行阶段任务的输入,修改该类的相关函数可以自定义规划子任务处理的数据量。
[0062] 4、根据得到的子任务并行处理航测数据生成瓦片地图;
[0063] 并行阶段根据输入的子任务标识,调用移植到hadoop上的mapnik库生成子任务标识范围内的所有瓦片,hadoop中的mapreduce是一个基于集群的高性能并行计算框架,它能自动完成计算任务的并行化处理,它是分治法的一种,使用mapreduce框架可以让子任务独立的运行在集群上达到各子任务并行处理的效果,若有4台双核机器作为datanode用于并行计算,每个节点设置两个map任务同步进行,每个map任务处理一个子任务生成相应的瓦片,总共有8个任务在并行的生成瓦片,相较于单机的单任务处理,大大提高了瓦片的生成效率。mapnik封装了处理图像数据生成瓦片地图的功能,利用mapnik的开源性可以很好的将mapnik的图像处理功能移植到hadoop上,具体步骤如下:
[0064] 修改mapnik库中的文件系统,使修改后的mapnik库可以直接操作hadoop的文件系统,在操作hadoop文件系统的过程中,用到了hadoop的短路读功能(short-circuit),该功能绕过了datanode直接读取数据从而提高了读取速度;
[0065] 使用hadoop的streaming功能,在hadoop并行阶段通过c++程序使用修改后的mapnik库。
[0066] 由上述描述可知,streaming提供多语言环境来支持hadoop的并行计算,通过streaming可以让mapnik库和hadoop相互兼容。
[0067] 5、编码瓦片,并将编码后的瓦片上传到hbase库中建立索引。
[0068] 本发明采用希尔伯特编码算法对已处理的瓦片进行编码,具体的希尔伯特编码过程的c++代码如下:
[0069]
[0070]
[0071] 希尔伯特空间填充曲线可以将高维度空间中没有良好顺序的数据映射到一维空间,经过希尔伯特编码空间上相邻的对象会存储在一起,保证了数据局部性,减少了I/O的时间,提高了数据的读写效率。
[0072] 上传编码后的瓦片数据到hbase库中建立索引,具体过程为:
[0073] 用户通过c++程序使用thrift上传已编码的瓦片地图到hbase库中,存储的行健格式为:“层”-“希尔伯特编码值”,值为对应瓦片的内容。thrift让用户通过c++语言来操作hbase,可以使mapnik和hbase互相兼容。
[0074] 综上所述,本发明提供的提高无人机航测数据生成瓦片地图效率的方法先是根据输入的无人机航测数据以及集群配置分配任务给hadoop集群,然后在集群上并行处理航测数据生成瓦片数据,提高了瓦片地图的生成效率,最后对瓦片数据进行编码并上传到hbase库中。在图像处理库mapnik与hadoop兼容性方面,通过修改mapnik库的底层操作系统使其能够直接操作hadoop文件系统。通过使用hadoop的streaming功能使c++程序能在mapreduce过程中调用mapnik库进行图像处理,通过使用thrift让用户能够用c++程序来操作hbase。本发明还使用希尔伯特编码作为存储瓦片数据的行健,保证了数据的局部性,减少了I/O时间,提高了hbase索引的效率。
[0075] 以上是对本发明的较佳实施进行了具体说明,但本发明创造并不限于所述实施例,熟悉本领域的技术人员在不未被本发明精神的前提下还可做出种种的等同变形或替换,这些等同的变形替换均包含在本申请权利要求所限定的范围内。