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:把多个栅格要素镶嵌为一个栅格要素。

你可能感兴趣的:(FME 瓦片数据下载与拼接)