基于OpenStack的海量影像入库方案.docxVIP

  • 7
  • 0
  • 约5.18千字
  • 约 16页
  • 2019-03-10 发布于广西
  • 举报
基于OpenStack的海量影像入库方案 第 PAGE \* Arabic \* MERGEFORMAT 1 页 基于OpenStack的海量影像入库方案 目标 本测试是基于OpenStack环境和消息队列,将海量影像数据导入到集中关系型数据库,实现导入方式的并行性处理和自动化处理,体现云环境为GIS应用带来的价值。 数据 目前拿到的测试数据为全球Geotiff影像数据,该数据为分幅数据,数据量约2.67TB。数据分为南北半球,各占1-60分带,大小在200MB——7GB不等。 下面我们将北半球的Tiff影像的轮廓图在iDesktop进行展示,标注相关带号名称。 放大图形,我们可以清晰的看到分带分布情况。 环境 OpenStack:icehouse GIScript:2005 Python3 RabbitMQ:3.2.4 Pika for Python Ubuntu:15.04 SuperMap:iDesktop 7.1.2 Oracle:11.2.0.4 原理 通过消息队列,将所有影像数据按照带号进行逻辑划分,带号可以从tif影像的文件名称获得,然后将每个带号下的tif影像的路径写到一个job文本文件中,通过消息服务发出这些工作请求,python服务器接收相关的job文件,然后读取job里面的tif文件,进行创建影像数据集和影像导入追加镶嵌,创建金字塔工作。 架构 关于数据和路径 首先为数据库服务器挂载约3TB的存储,映射路径为/data/geotiff,然后消息队列虚拟机和Python虚拟机通过mount命令将数据挂载到虚拟机本地,确保两者的路径信息完全一样,这样可以保证消息队列分配的任务,python机器可以访问同样的路径获得数据。 关于导入 由于本次处理的数据为分幅投影数据,所以数据导入会有两种选择: 直接创建一个全球地理坐标系,然后将tif文件进行投影转换,再导入或者追加镶嵌到全球影像数据集,最后创建金字塔。 优势:投影一致,如果对全球影像数据进行分布式集群切图效率会很高。 问题:目前我们的GIScript2005程序还没有将投影转换功能集成过来。 创建分幅投影的影像数据集,在创建影像数据集时需要注意获得所包含tif文件的最大最小范围,然后比较后获得一个包络矩形范围,这样才能保证所有的tif影像可以导入并镶嵌到该影像数据集内。 优势:任务切分逻辑明显,金字塔操作也可以归类到不同的Python虚拟机执行。 缺点:如果最终需要切图,因为需要创建一个全球地图投影的地图,然后其他影像数据集进行动态投影到一幅全球影像地图,对影响切图效率。 创建影像数据集的代码解析如下: def CreateRasterDS(ds,sTiffFilesList): try: … m_X=14.25 m_Y=14.25 n=0 #循环tiff文件获得相关信息 for strTiffPath in sTiffFilesList: importParams = InitImportParams(UGC.UGFileType.GTiff, UGC.UGImportParams.ModeIMG, Convert(strTiffPath)) fileParse = UGC.UGFileParseManager.CreateFileParser(UGC.UGFileType.GTiff) if fileParse != None: bOpen = fileParse.Open(importParams) if bOpen[0] == 1: #获得tiff的一般信息 rasterInfo = fileParse.GetRasterInfo() nWidth = rasterInfo.m_nWidth nHeight = rasterInfo.m_nHeight ePixelFormat = rasterInfo.m_ePixelFormat rc2Bounds = rasterInfo.m_rc2Bounds nBandCount = rasterInfo.m_nBandCount nBlockHeight =

文档评论(0)

1亿VIP精品文档

相关文档