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

news/2024/5/20 9:08:19/文章来源:https://blog.csdn.net/fmechina/article/details/128038488

一、利用FME分割栅格

(一)问题的产生

对于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模板的优化思路

(一)抓住源头

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

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

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

(二)理解FME

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

 图九 施工进度计划网络图

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

  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. 好的模板都是优化修改而来的,这是一个共识,在不断的数据运行处理的过程中,我们通过不断暴露的问题来优化我们的解决方案才能发现前面模板中的不足并加以改进,一旦到了改无可改的地步了,这个模板也一定是最优化的方案了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_36917.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【colab安装mmcv-full和mmclassification】

colab安装mmcv-full和mmclassification改变cuda和pytorch版本查看torch版本安装mmcv-full安装mmclassification克隆并安装mmcls切换到目录源码安装检查mmcls版本改变cuda和pytorch版本 !pip --default-timeout1000 install torch1.9.0cu111 -f https://download.pytorch.org/w…

常用辅助类

CountDownLatch 应用场景:1.多线程任务汇总。2.多线程任务阻塞住,等待发令枪响,一起执行。 减法计数器 每次有线程调用,数量-1,当计数器归零,countDownLatch.await()就会被唤醒向下执行。 import java.uti…

c语言tips-带参main函数

0.写在最前 最近因为工作需要开始重新学c语言,越学越发现c语言深不可测,当初用python轻轻松松处理的一些数据,但是c语言写起来却异常的复杂,这个板块就记录一下我的c语言复习之路 1. main函数的两种表现形式 main函数是c/cpp语言的…

Docker学习(5)—— 在Docker上安装软件

一. 安装Tomcat 1. 下载最新版 (1) 拉取Tomcat镜像 docker pull tomcat (2) 查看是否拉取到Tomcat镜像 docker images tomcat (3) 创建Tomcat容器并启动 docker run -d -p 8080:8080 tomcat 这时访问tomcat首页报404错误,有以下两个原因:①防火…

XSS绕过安全狗WAF

今天继续给大家介绍渗透测试相关知识,本文主要内容是XSS绕过安全狗WAF。 一、测试环境搭建 我们使用Vmware虚拟机搭建靶场环境。在Vmware虚拟机上,安装有PHPStudy,如下所示: 然后安装安全狗WAF,安全狗WAF有一系列的…

【kafka】一、kafka介绍

kafka概述 定义 kafka是一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据实时处理领域。 消息队列 1)解耦 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。 2)可恢复性 系统的一部分组件…

安装Python

搭建 Python 环境 要想能够进行 Python 开发, 就需要搭建好 Python 的环境. 需要安装的环境主要是两个部分: 1、运行环境: Python 2、开发环境: PyCharm 一、安装Python 1.1、官网下载Python 搜索引擎输入 Python 进入Python官网 1.2、找到下载页面 因为是在Windows环境…

npm配置taobao镜像及nrm快速换源工具介绍

文章目录npm配置淘宝镜像1 为什么默认源下载很慢?2 淘宝npm镜像服务器3 切换npm的下包镜像源4 nrmnpm配置淘宝镜像 1 为什么默认源下载很慢? 在使用npm下包的时候,默认从国外的https://registry.npmjs.orgl服务器进行下载,此时&…

前后端分页插件

PageHelper 是一个 MyBatis 的分页插件,支持多种数据库,可查看官网&#xff0c;负责将已经写好的 SQL 语句&#xff0c;进行SQL分页加工。无需你自己去封装以及关心 SQL 分页等问题&#xff0c;支持多种分页方式,如从第0或第一页开始, 使用很方便。 添加依赖 <dependency&…

论文阅读笔记 | 三维目标检测——VoxelNet算法

如有错误&#xff0c;恳请指出。 文章目录1.背景2. 网络结构2.1 体素特征表示2.2 卷积特征提取2.3 RPN网络3. 实验结果paper&#xff1a;《VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection》 1.背景 以往的3d检测器都难免利用了手工设计特征(hand-…

如何根据不同需求给Word文档设置保护?

Word文档可以设置不同的保护模式&#xff0c;我们可以根据不同需求选择合适的方法&#xff0c;下面介绍一下常用的3种方法。 方法一&#xff1a; 如果不想Word文档被随意打开&#xff0c;我们可以设置打开密码&#xff0c;只有输入正确的密码才能打开文件。 首先&#xff0c…

python面向对象(上)

python面向对象上命名规则对象的创建创建类对象创建实例对象修改增加类属性构造方法构造实例方法不带变量带变量构造方法小例子构造类方法构造静态方法运算符的重载比较运算符重载字符串重载索引或切片重载索引或切片重载检查成员重载重载小结持续更新中~~~~~~~~先上个例子&…

古人的名与字、号、讳、谥有什么区别

古人复杂的名字 这个世界上想来是不存在没有名字的人&#xff0c;即便真的有人没名字&#xff0c;也会被外人赠予姓名&#xff0c;比如说一些古人典籍里的“无名氏”&#xff0c;就是专门用来形容那些没有名字也不清楚根脚的人&#xff0c;即便是现如今一些作品不知道作者是谁…

国外服务器采取数据备份和灾难恢复的重要性

在国外服务器的使用中&#xff0c;数据的安全性和完整性是任何组织都不能忽视的问题。丢失数据可能会对业务造成毁灭性的影响&#xff0c;因此必须有一个完善的数据备份和灾难恢复计划。 什么是备份? 备份将数据复制到辅助形式&#xff0c;如存档文件&#xff0c;在灾难发生时…

C++:函数指针进阶:看完还不用std::function来捶我

1&#xff1a;函数指针的背景 我们先简单聊一下函数指针的背景&#xff0c;具体使用请参考我的这篇博客 C &#xff1a;函数&#xff1a; 函数指针_hongwen_yul的博客-CSDN博客 假设现在有这样一段代码&#xff1a;C/C中可以使用指针指向一段代码&#xff0c;这个指针就叫函…

【外卖项目实战开发一】

文章目录1、软件开发整体介绍2、外卖项目介绍3、环境搭建数据库环境搭建创建数据库执行SQL脚本数据表maven项目搭建添加依赖:application.yml配置application启动类4、后台登录功能开发需求分析代码开发5、后台退出功能开发1、软件开发整体介绍 软件开发流程 角色分工 软件…

Quasar搭建教程初体验

文章目录一、Quasar框架介绍二、搭建一个简单的Quasar程序1、Quasar CLI安装2、创建Quasar应用程序3、运行Quasar三、使用Quasar开发SSR四、使用Quasar开发桌面应用(Electron)1、添加Quasar Electron模式2、运行开发五、使用Quasar移动应用(Capacitor)1、下载安装AndroidStudio…

Scrapy基本概念——Item Pipeline

一、Item Pipeline介绍 蜘蛛抓取的每一个Item都会被发送到Item Pipeline。根据ITEM_PIPELINES的优先级设置&#xff0c;不同的Item Pipeline依次处理每一个Item&#xff0c;最后可删除该Item不做处理&#xff0c;也可将该Item发送到下一个Item Pipeline。Item Pipeline的主要用…

【Shell 脚本速成】05、Shell 运算详解

目录 一、赋值运算 二、算术运算[四则运算] 2.1 运算符与命令 2.2 整形运算 expr 命令&#xff1a;只能做整数运算&#xff0c;格式比较古板&#xff0c;运算符号两边注意空格 let命令&#xff1a;只能做整数运算&#xff0c;且运算元素必须是变量&#xff0c;无法直接对…

11.14-11.21

1.线性蒙皮 1.1 线性蒙皮定义 线性蒙皮&#xff1a;是由一系列骨骼驱动的。每个顶点会根据顶点权重图和相应的骨骼关联。根据骨骼在当前位置相对于静止位置的变换矩阵以及此顶点相对于该骨骼的权重&#xff0c;我们可以计算出该顶点在该骨骼影响下的位置。 假设Wij是第j个骨…