以分割栅格为例实现FME模板的方案优化

一、利用FME分割栅格

(一)问题的产生

对于FME使用者来说,利用FME完成栅格的批量分割是一件极为平常且容易的事情。只需要输入栅格和确定分割方案就可以实现利用FME对栅格数据的分割,再配合FME的“扇出”功能,就能够实现栅格文件的自动命名与输出。

以分割栅格为例实现FME模板的方案优化_第1张图片

 图一 FME分割栅格模板示意图

可是,如果我们面对的是一个SuperBigTif呢?

有这样一张Tif数据,范围覆盖全国,文件大小4.8个T,没有影像金字塔文件。需要将其发布到地图服务。由于没有影像金字塔,不支持服务发布,需要先对Tif进行重构影像金字塔。

在构建影像金字塔的过程中,由于数据过大,没有能够成功加载Tif数据的软硬件环境,导致无法对其进行影像金字塔的构建。

以分割栅格为例实现FME模板的方案优化_第2张图片

 图二 中国行政范围示意图(来源于高德)

需要对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模板的方案优化_第3张图片

 图三 FME中TIFF读模块设置指定读取区域示意图

(3)将指定区域参数设置为发布参数;

以分割栅格为例实现FME模板的方案优化_第4张图片

 图四 在导航栏进行参数发布

(4)创建输出tif文件名发布参数;

(5)添加写模块,并设置输出路径参数。

以分割栅格为例实现FME模板的方案优化_第5张图片

图五 基础模板及参数示意图

基础模板没有用到Clipper这个转换器,是因为设置了“Clip to Search Envelope”,也可以实现裁剪功能。

2、制作批量转换模板:

(1)打开FME软件(建议与基础模板同一个版本);

(2)添加1:10万标准分幅数据,作为批量模板的驱动因子;
 

以分割栅格为例实现FME模板的方案优化_第6张图片

 图六 1:10万标准分幅图

(3)计算每个分幅的四至坐标信息;

(4)添加“WorkspaceRunner”转换器并设置相关参数,并将其进行发布。

以分割栅格为例实现FME模板的方案优化_第7张图片

 图七 WorkspaceRunner参数设置

以分割栅格为例实现FME模板的方案优化_第8张图片

 想·图八 批量分割栅格模板

二、FME模板的优化思路

(一)抓住源头

FME是最适合数据生产、数据处理的一款软件,这是毋容置疑的,在众多ETL/自动化工具中FME基本免去了代码环节,适合一线数据处理人员进行快速的学习运用。并且在工具开发成本上是最为节约的,最大程度避免开发项目的“眼高手低”(开发成本高利润空间少,开发成本低却又没人愿意开发),由一线人员直接从实际需求出发解决现场问题。

所以FME的核心是尽可能多的将多个独立的子功能镶嵌到项目生产的每个环节,如果能形成体系就最好不过了。

由此,FME模板优化的第一个核心就是:放眼项目技术体系,综合考虑子功能。将各个工艺环节进行连通,形成工艺上的衔接,这样就可以避免因为工艺衔接而导致的模板功能的无法使用,减少意外情况的冗余开发。

(二)理解FME

我们在FME相关的技术推广普及中都会提及到一个词“快进快出”,FME是一个数据处理的流程,每一个模板都是经历数据“从左向右”的流水线模式,上一个节点任务完成后才能进行下一个节点任务。就像施工进度计划图一样,最长工期一定是整个网络路径中最长消耗时间。优化模板的方案以应该是从减少最大消耗时间开始。

以分割栅格为例实现FME模板的方案优化_第9张图片

 图九 施工进度计划网络图

减少时间消耗实现“快进快出”的方法:

  1. 合理分配储存数据,杜绝出现全国范围一张TIF的恐怖场景,减少读写压力。
  2. 提升软硬件配置,这是一个客观的物质基础,8GB内存条的缓存永远无法是128GB内存条的缓存相比拟的(非“唯武器论”)。
  3. FME的选择上使用64位软件的处理效率明显高于32位软件(但是需要考虑少数只支持32位软件的例外)。
  4. 尽量优化模板中的处理环节,避免或者减少阻塞类转换器的使用,比如:Sorter、FeatureMerger、Clipper、StatisticsCalculator……
  5. 学会利用批处理“WorkspaceRunner”功能,这里有一个误区就是很多使用者都希望一次做完整个数据。我们的核心是快速的得出正确的结果,我们需要的是这个功能能够正常运算并输出结果,而不是一次计算得出结果,如果涉及空间几何运算,数据量的“1+1=2”所花费的时间而不是时间消耗上的“1+1=2”,有可能是数倍不止。科学的化繁为简,将原本拥堵在高速上的车流疏通到徐徐前行是批处理的最要思想。
  6. 发掘FME功能上的其他优点,比如有_xmin,_ymin,_xmax,_ymax这四个参数,我们是通过多次“VertexCreator”来实现BOX还原还是通过“2DBoxReplacer”一步来完成呢,只有逐步去发掘FME本身的优点才能减少模板过程中的弯路。
  7. 多多总结积累FME模板过程的优秀的技巧,比如,读写模块本身就支持我们一次性读取某个数据源的全部要素和自动写出模式。DWG文件中有100个图层,我们是选择先读取全部后根据图层名称来筛选的方式还是单个图层读取后再来逐个连接的方式呢?事实上整个过程中将足够的技巧积累后我们写出的模板会减少很多意外报错情况的发生,从而从另一个层面实现了模板的优化。
  8. 好的模板都是优化修改而来的,这是一个共识,在不断的数据运行处理的过程中,我们通过不断暴露的问题来优化我们的解决方案才能发现前面模板中的不足并加以改进,一旦到了改无可改的地步了,这个模板也一定是最优化的方案了。

你可能感兴趣的:(默认分类,FME)