王晓辉
广东工贸职业技术学院 广东 广州510000
随着大数据技术和遥感卫星技术的快速发展,遥感地图瓦片服务日益增多,为满足不同用户在使用地图瓦片服务的不同需求,瓦片生成系统成为各地图瓦片服务商的关键核心技术。
通过将海量的遥感数据分布到Hadoop云平台上进行处理可以快速高效地生成和管理生成的地图瓦片数据。本文是在Hadoop云平台的地图瓦片生成系统开发过程基础上,实现了在云平台下快速生成地图瓦片系统。
1.Hadoop云平台技术
Hadoop是基于云计算技术概念发展起来的,是由Apache基金会开发发布的开源分布式框架。其具有的免费、高效等特点可以满足低成本云计算平台架设。Hadoop项目的核心技术是HDFS分布式文件系统与MapReduce框架,地图瓦片系统通过HDFS系统来存储海量遥感图像卫星数据,通过MapReduce框架来实现分布式地图瓦片处理工作。
2.GeoServer地图瓦片切割技术
GeoServer是开源地理信息系统下的Web服务器规范,是使用Java语言实现的开源项目。该项目核心技术包括金字塔模型和地图瓦片切割技术。通过对GeoServer的源码分析,GeoServer采用类似Google地图瓦片的切割方法。通过比例尺、行号、列号,构建切割后的瓦片命名规则。瓦片切割命名规则如图1所示。
图1 瓦片命名规则
依据以上命名规则,系统通过更改GeoServer源码将高分一号卫星影像数据切割生成瓦片数据。
3.GDAL图像处理技术
GDAL(GeospatialDataAbstractionLibrary)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。GDAL具有跨平台、开源、简洁、高效的特点,能读取、写入、转换、处理大多数栅格数据文件格式。本系统通过将GDAL编译成Linux下可被Java调用的so文件,方便在Hadoop云平台环境下使用。比如:TIFF转PNG算法实现等。
4.MongoDB数据库技术
MongoDB是一个分布式文件存储的数据库。它支持的数据结构非常松散,是类似json的bson格式,可以较好地解决例如地图瓦片这类海量小图片存储存储和海量计算方面的应用需求。由瓦片生成系统生成地图瓦片后由采用MongoDB数据库来存储生成的地图瓦片数据。
1.Hadoop集群搭建
(1)集群hostname配置
修改/etc/hostname每个节点单独配置,如主节点修改为hadoopD1001。
(2)集群hosts配置
根据集群节点主机名和IP修改/etc/hosts文件成如下格式,整个集群统一配置。
192.168.1.105’ ’hadoopD1001
192.168.1.106’ ’hadoopD1002
(3)SSH访问设置
Linuxsshkey分为两个:/home/ubuntu/.ssh/id_rsa和/home/ubuntu/.ssh/id_rsa.pub,其内容是155个字符为一行的字符串。
使用/home/ubuntu/.ssh/id_rsa可以访问/home/ubuntu/.ssh/id_rsa.pub,因此可以将集群中所有的公钥放到一个统一的authorized_keys中并复制到每个节点/home/ubuntu/.ssh/authorized_keys中。生成秘钥:切换到ubuntu用户下使用ssh-keygen命令,回车三下,如果已经有key覆盖,将整个集群中所有的id_rsa.pub放入authorized_keys,并复制到整个集群的/home/ubuntu/.ssh中。
(4)修改/etc/profile配置,配置jdk,环境变量
(5)Hdfs搭建设置
etc/hadoop/core-site.xml
etc/hadoop/hdfs-site.xml
Hadoop集群搭建成功如图2所示。
图2 Hadoop集群搭建成功
2.地图瓦片生成系统模块设计
地图瓦片生成系统划分为数据分块处理模块、地图瓦片向上迭代模块、地图瓦片向下迭代模块。由系统控制来生成不同级别地图瓦片。
(1)数据分块处理模块
该模块主要功能是数据分块,系统调用matlab数据分块算法对高分一号卫星数据进行分块。算法需要输入遥感卫星图像数据,输入分块的行与列,根据输入分块的行与列,对数据分辨率的行与列取模,获取余数。将读入数据的分辨率的行与列减去余数并除以分块的行列数,将输入的分块数的行列加1,建立索引矩阵,矩阵中存放分块用索引的行列号,根据索引矩阵的行列号生成不同区域矩阵,根据索引矩阵的行列号保存分块的不同矩阵。具体算法如下:
function[outfile1]=segimg(file,imrow,imcol)
image=file;
rows=size(image,1);
cols=size(image,2);
mod_rows=mod(rows,imrow);
mod_cols=mod(cols,imcol);
step_cols=(cols-mod_cols)/imcol;
step_rows=(rows-mod_rows)/imrow;
imrow=imrow+1;
imcol=imcol+1;
indx_row=zeros(1,imrow);
indx_col=zeros(1,imcol);
for(i=2∶imrow)
indx_row(i)=(i-1)*step_rows;
ifi==imrow
indx_row(i)=(i-1)*step_rows+mod_rows;
end
end
for(i=2∶imcol)
indx_col(i)=(i-1)*step_cols;
ifi==imcol
indx_col(i)=(i-1)*step_cols+mod_cols;
end
end
imrow=imrow-1;
imcol=imcol-1;
a=cell(imrow,imcol);
temprow={};
for(i=1∶imrow)
for(j=1∶imcol)
temprow{i}=image(indx_row(i)+1∶indx_row(i+1),∶,∶);
a{i,j}=temprow{i}(∶,indx_col(j)+1∶indx_col(j+1),∶);
name=strcat('rl',num2str(i),num2str(j),'.mat');
temp=a{i,j};
save(name,'temp');
end
end
outfile1=a;
end
(2)地图瓦片向下迭代模块
该模块的上游输入数据是由分块模块提供的遥感卫星图像分块数据,根据卫星图像实际级别与Web地图需要展示的最高级来判定是否进行向下迭代地图瓦片生成。
当向下模块开启后,系统进入Hadoop集群系统的MapReduce模型处理分块数据,首先在Map阶段,分块影像数据从HDFS读取到本地,由于是向下迭代,在此运行图像分块模块,分块结束后,使用GDAL将TIFF格式的卫星影像数据转换为PNG格式,这是因为Web瓦片通用格式为PNG图片格式。然后对PNG格式图像重采样。将重采样后的数据存储到Mongodb数据库中,最后删除本地临时文件。如图3所示。
图3 瓦片生成向下迭代流程图
(3)地图瓦片向上迭代模块
该模块的上游输入数据是原始遥感卫星图像数据,根据卫星图像实际级别与Web地图需要展示的最低级来判定是否进行向上迭代地图瓦片生成。
当向上迭代模块开启后,系统进入Hadoop集群系统的MapReduce模型处理,首先在Map阶段,分块影像数据从HDFS读取到本地,使用GDAL将TIFF格式的卫星影像数据转换为PNG格式,然后对PNG格式图像重采样。将重采样后的数据存储到Mongodb数据库中作为当前级别迭代地图瓦片,最后删除本地临时文件。
以上流程与向下迭代基本相同。向上迭代与向下迭代的区别在于Reduce阶段。在Reduce阶段的输入数据是未重采样的PNG遥感卫星图像数据,使用图像镶嵌功能,按照网格编号将四块PNG图像镶嵌为一块PNG,其中可能会出现PNG图像不足的情况,这时使用透明PNG图像进行补足镶嵌。镶嵌后的PNG图像存放在HDFS上作为下一个向上迭代的输入数据,最后删除本地临时文件。如图4所示。
图4 瓦片生成向上迭代流程图
3.系统测试与性能分析
系统采用的测试数据为90GB遥感卫星图像数据,输入数据为12级地图瓦片数据。系统使用5个子节点的Hadoop集群进行地图瓦片生成处理。下表列出了瓦片分块模块、向下迭代模块(17级—12级)、向上迭代(11级—6级)的瓦片生成效率。系统处理效率如表1所示。
表190 GB数据测试结果
Hadoop云平台瓦片生成系统可以有效解决海量遥感卫星图像的地图瓦片切片服务,从而为用户通过Web客户端访问WEBGIS项目提供支持。
本研究的特色是分布式计算环境下的遥感地图瓦片生产研究。在遥感地图瓦片生产中引入分布式计算的思想,用以提高海量地图瓦片生产速度并解决多机协同计算问题,为当前海量地图瓦片生成提供一种有效的解决方案,防止因在遥感地图瓦片生产过程中出现处理计算能力不足而产生颈瓶。此外,该系统瓦片生产效率通过更改算法和MapReduce模型仍然有进一步提高的可能。在今后的研究中,还需要通过进一步改进算法等来提高效率。