FME 瓦片数据下载与拼接

问题描述

今天我在懒人GIS的微信公众号上看到一个比较感兴趣的应用,就是利用 FME 实现瓦片数据的下载与拼接,所以我也试着去实现了一下。

解决思路

以 ArcGIS 发布的切片服务为例,获取切片的地址为

http://ip:6080/arcgis/rest/services/ServiceName/MapServer/tile/zoom/y/x

上面地址中,红色加粗的参数需要依据 ArcGIS Server 发布服务的具体情况而定。其中:zoom 表示瓦片级别,x 和 y 表示瓦片的行号和列号。

当然,不同服务获取瓦片的方式有所不同,还需要依据实际情况进行分析。如果有权限控制的情况,可能还需要动态获取 token 或是 key 等参数。

这里我们以 ArcGIS 发布的切片服务为例进行瓦片数据的获取和拼接,解决思路如下:

1. 创建一张属性表,每条记录有三个重要属性:待下载瓦片数据的行号、列号、瓦片级别

2. 依据行列号和瓦片级别构建在线瓦片的链接地址

3. 使用ImageFetcher/HttpCaller转换器获取对应的瓦片(本例使用ImageFetcher

4. 使用RasterGeoreference计算瓦片的相对坐标,方便进行后续拼接,否则所有的图片会叠加在一起

5. 使用RasterMosaicker进行瓦片拼接

6. 输出拼接后的瓦片

模板截图

具体实现的模板截图如下图所示:

在该模板中,我们预先设定了几个用户参数,也是为了让模板更加灵活:

url:ArcGIS 地图服务地址

row_count:批量下载瓦片的行数

col_count:批量下载瓦片的列数

zoom:下载瓦片的瓦片级别

size:瓦片图片的大小(一般为256,或512)

在模板中,我们首先用 Creator 创建了一个空的对象,然后克隆了 row_count * col_count 份,使用AttributeCreator计算每条记录的 x 和 y 的值(更推荐使用AttributeManager),并拼接出下载瓦片的 url 地址,随后使用ImageFetcher下载瓦片,使用RasterGeoreference计算瓦片的相对坐标,使用RasterMosaicker拼接瓦片,最后输出。

其中AttributeCreator计算 x、y、url的值如下图的设置:

其中用到了%(取余操作符),以及 floor函数进行取整操作。

当然,如果你觉着这样比较复杂,也可以预先创建一个 Excel 文件,直接读取 Excel 文件。

使用RasterGeoreference计算瓦片的相对坐标的设置如下图:

这里需要注意的是瓦片服务的坐标原点在哪里,若遵循 TMS 标准,则坐标原点在左下角,否则在左上角。ArcGIS 瓦片服务的坐标原点在左上角,所以 0 / 0 图片是左上角的第一张图片。

核心转换器

ImageFetcher:通过执行 HTTP GET 操作在指定的 URL 上获取图片,并将得到的数据作为栅格要素对象返回。

RasterGeoreference:用指定的参数对栅格进行空间配准(上述案例中我们计算的是相对位置,其实也可以使用真实坐标进行配准)。

RasterMosaicker:把多个栅格要素镶嵌为一个栅格要素。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 很多人应该都听过田馥甄的这首《小幸运》吧。歌曲被我循环听过n遍,同名的电影也让我落下过眼泪。我喜欢着徐太宇和林...
    水晶新阅读 375评论 0 4
  • 电影讲述的是一对老夫妻的晚年生活,一起看书读报看音乐会,他们是相爱的,也是彼此照顾的,非常的体贴。但是老妇人得了病...
    花儿的博文阅读 473评论 0 0
  • 晚上爸爸去接的你,回来后兴奋不已,并且跑过来给我了一个大大的拥抱,我有点一头雾水,你告诉我今天开班会老师评...
    周弼城妈妈阅读 162评论 0 0
  • 因为有河西的朋友约我,所以我坐上了从河东开往河西的公交车,车上人不少,我自觉的站到了后门边上,稳住脚步抓住身边的一...
    黄薇珍阅读 492评论 0 1