对于FME使用者来说,利用FME完成栅格的批量分割是一件极为平常且容易的事情。只需要输入栅格和确定分割方案就可以实现利用FME对栅格数据的分割,再配合FME的“扇出”功能,就能够实现栅格文件的自动命名与输出。
图一 FME分割栅格模板示意图
可是,如果我们面对的是一个SuperBigTif呢?
有这样一张Tif数据,范围覆盖全国,文件大小4.8个T,没有影像金字塔文件。需要将其发布到地图服务。由于没有影像金字塔,不支持服务发布,需要先对Tif进行重构影像金字塔。
在构建影像金字塔的过程中,由于数据过大,没有能够成功加载Tif数据的软硬件环境,导致无法对其进行影像金字塔的构建。
图二 中国行政范围示意图(来源于高德)
需要对4.8个T的庞然大物进行分割,使得满足现有软硬件环境构建影像金字塔的服务。有了这个想法的时候,问题好像又回到了原点——无论是ArcGIS还是ArcGIS Pro,现有的硬件环境下都没有办法对这个Tif进行处理,经过尝试其他的软件,如Global Mapper、ENVI、ERDAS这些软件也因为其巨大的体积而无能为力。
实际上,FME常规的分割栅格方案对这个巨大的栅格进行分割也是必然会失败的,因为FME在现有硬件条件下也无法一次性完全将这个超大的Tif读取出来,最终会因为内存溢出而失败。
FME在读取栅格数据(tif、img……)的时候就存在一个只读取指定范围部分的功能,这个特殊的功能就为我们处理超大栅格数据的时候留下了一线生机。我们一次只需要读取这个数据的小范围区域即可,读取多次后就能够覆盖读取全部范围。
这个范围参数在添加读模块的时候是没有办法将其设置为发布参数的,在读模块添加完成后在导航栏里面就可以进行参数的发布。借用发布参数我们就可以利用批处理来实现自动批量分幅。
根据全国的范围找来了1:10万标准分幅图,准备利用分幅图来提取范围作为批量处理的基础。
利用FME软件中WorkspaceRunner批处理转换器实现批量的处理。
1、制作基础转换模板:
(1)打开FME软件(建议使用64位的FME可以提高内存的使用率);
(2)添加TIFF读模块,并设置指定区域读写模式。 “Clip to Search Envelope”参数一定要勾选,这是关键;
图三 FME中TIFF读模块设置指定读取区域示意图
(3)将指定区域参数设置为发布参数;
图四 在导航栏进行参数发布
(4)创建输出tif文件名发布参数;
(5)添加写模块,并设置输出路径参数。
图五 基础模板及参数示意图
基础模板没有用到Clipper这个转换器,是因为设置了“Clip to Search Envelope”,也可以实现裁剪功能。
2、制作批量转换模板:
(1)打开FME软件(建议与基础模板同一个版本);
(2)添加1:10万标准分幅数据,作为批量模板的驱动因子;
图六 1:10万标准分幅图
(3)计算每个分幅的四至坐标信息;
(4)添加“WorkspaceRunner”转换器并设置相关参数,并将其进行发布。
图七 WorkspaceRunner参数设置
想·图八 批量分割栅格模板
FME是最适合数据生产、数据处理的一款软件,这是毋容置疑的,在众多ETL/自动化工具中FME基本免去了代码环节,适合一线数据处理人员进行快速的学习运用。并且在工具开发成本上是最为节约的,最大程度避免开发项目的“眼高手低”(开发成本高利润空间少,开发成本低却又没人愿意开发),由一线人员直接从实际需求出发解决现场问题。
所以FME的核心是尽可能多的将多个独立的子功能镶嵌到项目生产的每个环节,如果能形成体系就最好不过了。
由此,FME模板优化的第一个核心就是:放眼项目技术体系,综合考虑子功能。将各个工艺环节进行连通,形成工艺上的衔接,这样就可以避免因为工艺衔接而导致的模板功能的无法使用,减少意外情况的冗余开发。
我们在FME相关的技术推广普及中都会提及到一个词“快进快出”,FME是一个数据处理的流程,每一个模板都是经历数据“从左向右”的流水线模式,上一个节点任务完成后才能进行下一个节点任务。就像施工进度计划图一样,最长工期一定是整个网络路径中最长消耗时间。优化模板的方案以应该是从减少最大消耗时间开始。
图九 施工进度计划网络图
减少时间消耗实现“快进快出”的方法: