文章目录

  • 0 前言
  • 1 抓取瓦片图的原理
  • 2 如何使用FME抓取瓦片图
    • 2.1 获取影像页面信息
    • 2.2 生成矩阵数组
    • 2.3 获取瓦片图
    • 2.4 瓦片图定位
    • 2.5 保存瓦片并镶嵌瓦片
  • 3 工程下载
  • 4 总结

0 前言

随着传感器的精度不断提高,遥感影像所占的空间也越来越大,为了方便分享浏览,通常会发布成影像瓦片服务。不管是商业软件还是开源软件发布的影像瓦片服务,本质都是将遥感影像按照不同的级别(不同比例尺)切片成一张张小的瓦片地图,在浏览器上查看的时候根据比例尺和范围查询相应的瓦片地图进行加载。但是发布在互联网上的影像瓦片地图无法进行本地化的分析处理,这个时候就需要将瓦片地图抓取到本地进行拼接处理。

1 抓取瓦片图的原理

瓦片地图服务分享在互联网或局域网上,遵循网络传输协议和特定的加载规则。平时我们在地图浏览页面浏览影像的操作,比如放大缩小和平移,都是以地图窗口为视角作为查询范围,结合当前地图的缩放级别,来查询特定级别特定范围下的瓦片数据。然后瓦片地图就像拼图一样加载在浏览器页面上,形成我们看到的整幅地图的效果。要想抓取瓦片地图,首先要了解瓦片地图服务的构造。本文以智慧广州公众服务“天地图·广州 智慧广州时空信息云平台”为例,进行讲解。广州天地图主页展示如下:

因为需要使用到浏览器的开发者工具,在这里推荐使用谷歌浏览器。在谷歌浏览器的界面下按F12调出开发者工具,切换到Network选项卡,然后在地图窗口内放大一下地图来请求新的瓦片,请求的瓦片信息会在Network选项卡中显示出来,如下:

我们选中其中一个瓦片图,查看Request URL的内容,复制出来观察一下。

http://gzmap.gov.cn:12345/ServiceAccess/MapService-T/%E5%BD%B1%E5%83%8F/1e85e146b0728d2fb3a5312c75089400/tile/2/377/284

可以看到URL后面的“tile/2/377/284”表示当前瓦片的级别和行列号,该瓦片处在影像级别2,行号377,列号284的位置中。

打开前面的URL地图服务部分,可以看出是用ArcServer平台发布的服务。我们可以查看这个影像服务的坐标系,瓦片的大小和精度,影像有多少个级别,影像的分辨率等信息。这里的影像分了12个级别,从 Level ID 0 到 Level ID 11,其中每个级别的Start TileEnd Tile存储着起始瓦片和终止瓦片的信息。服务页面的部分信息展示如下:

通过右击页面查看网页源代码,可以看到每个级别影像暴露出来的Start TileEnd Tile的URL地址,这也是我们自动化下载影像的入口。

通过Start TileEnd Tile显示出来的行列号,我们可以构造出该级别下所有瓦片的行列号,进而构造出该级别所有瓦片的地址。一个地址对应的是一张瓦片PNG,我们只需要全部下载后拼接就能得到一整幅地图。

比如本例中Level 0级别的 Start Tile 和 End Tile 分别为“93/70”和“95/71”。然后我们需要构造改级别下所有的行列号,如下:
(93,70),(93,71)
(94,70),(94,71)
(95,70),(95,71)
可以看出在级别0的影像瓦片只有6张,非常的少,但是随着级别的提高,瓦片的数量呈几何上升。通过行列号构造出所有的瓦片URL后就能下载所有的瓦片png了,进而再将所有的png拼接起来。

2 如何使用FME抓取瓦片图

我们在前面讲了抓取瓦片图的原理,现在就开始讲如何用FME抓取影像并拼接。因为我做的FME工作流较长,我就挑重点转换器的原理来讲解,最后会提供FME模板供大家下载参考

在新建的FME工程中,现新建2个公共参数,如下:

  • Tile_URL :存储影像服务地址
  • Level_id:存储要抓取地图的影像级别

2.1 获取影像页面信息

我们在得到一幅影像的服务地址后(比如天地图的影像服务),可以使用HttpCaller转换器来获取整个页面的信息,再用StringSearcher转换器获取该页面上12个级别的Start TileEnd Tile信息。

  • HttpCaller:Http请求转换器,通过URL可以发起Http\Https请求来获取站点信息。

  • StringSearcher:字符查找转换器,可以进行简单字符查找,可以使用正则表达式进行高级查找。

获取了12个级别的Start TileEnd Tile信息后,我们需要指定级别来获取瓦片,否则12个级别的瓦片数量会非常庞大,普通电脑的存储空间根本不够。博主这边测试了Level0到Level5的瓦片下载和拼接,Level8级别的瓦片因数量过多(186110个),FME在进行瓦片镶嵌时崩溃了。

2.2 生成矩阵数组

在指定要获取的影像界别后,需要基于Start TileEnd Tile生成所有瓦片的地址信息。在这里博主使用自定义转换器结合Python代码来实现。博主自定义了一个名叫“MatrixArray2”的转换器,接收起始位置和终止位置的XY信息,可以生成步长1的矩阵列表,输出的矩阵列表表示为array_x和array_y,另外通过index_x和index_y保留从0开始计数的矩阵位置信息。

2.3 获取瓦片图

在获取整个影像或者局部影像的时候,我们首先是需要获取到起始和终止影像的信息,然后来构造区域内所有瓦片图的地址信息。我们在上一个步骤中获取到的矩阵数组,需要进一步构造出每个瓦片图的地址信息。这里我们使用AttributeCreater转换器,然后输入以下表达式:

$(Tile_URL)/tile/@Value(level_id)/@Value(array_x)/@Value(array_y)

在构造出每个瓦片图的地址信息后,使用ImageFetcher转换器来下载瓦片图。在Image URL参数中输入构造的瓦片图地址,在Image Type参数中输入要下载图片类别。图片类型需要根据影像服务对应的图片类型来设置,否则会下载不了,大部分是使用PNG格式,也存在PNG和JPG混合使用的模式,该模式需要分开下载。

2.4 瓦片图定位

下载好的每个瓦片图是没有空间信息的,需要我们通过需要来为每个瓦片图设置相对的空间位置。要为瓦片图设置空间位置,有2个转换器可以实现,分别是Offsetter和RasterGeoreferencer转换器。

  • Offsetter:设置空间偏移
  • RasterGeoreferencer:为栅格设置空间位置

两者设置的空间偏移量都是一致的:

2.5 保存瓦片并镶嵌瓦片

保存瓦片直接添加写模块然后设置好变量文件名就可以了,瓦片镶嵌使用RasterMosaicker转换器,然后添加写模块保存到本地。这个步骤简单,就不多介绍了。

3 工程下载

FME工程下载地址:getTilePNG.fmw

4 总结

影像抓取也属于爬虫的一类,暴力的信息抓取会给服务器造成巨大的负担,影像或者坐标信息的泄露也有可能会承担相应的责任,希望大家能够合理依法的利用技术,维护国家安全,拥有保密意识。

FME抓取遥感影像瓦片地图服务相关推荐

  1. python爬虫,爬取遥感影像瓦片并自动拼接

    效果: 实现思路: 首先根据经纬度范围确定能够下载的瓦片最高等级(影像最大分辨率),然后下载瓦片,将瓦片按照顺序拼接起来  源代码: urllib3 == 1.26.7 requests == 2.2 ...

  2. 高德WMTS瓦片地图服务地图图源规律

    本篇文章为转载记录,原文:[转]高德WMTS瓦片地图服务地图图源规律_为了淑宝努力努力的博客-CSDN博客 高德地图服务地址规则 先来看一个典型的高德地图的瓦片请求: https://wprd02.i ...

  3. 无偏移谷歌瓦片地址_[转]OpenStreetMap/Google/百度/Bing瓦片地图服务(TMS)

    开源与成熟商业的瓦片地图服务(TMS  2  WMTS),都有如下共同的特性,基本成为了标准: (1) 坐标系:WGS84 (2) 投影:墨卡托投影(Marcator,正轴等角圆柱投影) ------ ...

  4. Mapbox加载天地图CGCS2000矢量瓦片地图服务

    1.背景 最近在做天地图的项目,要基于MapBox添加CGCS2000矢量切片数据,但是 Mapbox 只支持web 墨卡托(3857)坐标系的数据.Github有专业用户修改了mapbox-gl的相 ...

  5. 高德地图 sdk 加载 geoserver 发布的瓦片地图服务

    前言 最近,碰到了需求,想要在高德 sdk 中使用在 geoserver 里面发布的瓦片地图. 还好经过一番研究,在其官方文档中发现,从新版本(v1.4.3开始)的高德 sdk 开始,已经支持加载第三 ...

  6. Leaflet 调用百度瓦片地图服务

    在使用 leaflet 调用第三方瓦片地图服务的项目,主要谷歌地图.高德地图.百度地图和 OSM 地图,与其他三种地图对比,百度地图的瓦片组织方式是不同的.百度从中心点经纬度(0,0)度开始计算瓦片, ...

  7. osgearth加载本地离线影像瓦片地图

    osgearth加载本地离线影像瓦片地图案例 说明 本实例演示重新编译bing驱动直接加载本地离线影像瓦片地图. 本实例使用软件版本:osg3.3.1和osgEarth2.5 VC10编译环境(参考o ...

  8. 瓦片地图服务与地图瓦片原理

    本文字数:9099字 预计阅读时间:25分钟 这里,首先我们从概念出发,搞清楚瓦片地图服务以及地图瓦片的原理,读起来似乎有点拗口,但是从字面上看得出它们必定拥有着区别与联系,前者是WebGIS中的一个 ...

  9. 瓦片地图服务参数与计算

    转载自:http://www.cnblogs.com/kekec/p/3159970.html 开源与成熟商业的瓦片地图服务(TMS  2  WMTS),都有如下共同的特性,基本成为了标准: (1) ...

  10. 搭建离线瓦片地图服务并用QGIS显示离线地图

    需求的提出:         由于业务需求,展示GIS时,不能连接互联网,也就是说不能调用互联网上提供的地图服务. 因为不能联网,所以必须在局域网或本机上搭建离线瓦片地图服务.本文讲述如何搭建离线瓦片 ...

最新文章

  1. Android 自定义View Canvas —— Bitmap
  2. WIN7下黑苹果懒人版硬盘安装not a HFS partition注意问题
  3. thinkphp无法加载模块解决办法
  4. php多图片上传并回显,如何用input标签和jquery实现多图片的上传和回显功能
  5. [Qt教程] 第33篇 网络(三)FTP(一)
  6. js打印线程id_浅谈python中的多线程和多进程(二)
  7. html访问时sessionid变,传统Session跨域导致的Sessionid不一致问题解决方案
  8. 取消多次重定向错误php,Laravel重定向您太​​多次错误
  9. 用python语言计算矩阵_Python语言实现矩阵计算
  10. 冰点文库下载器去广告版百度文库下载工具
  11. 三维文件格式 abc, glTF, fbx, obj, dae, stl, 3ds, ply,...
  12. 运筹说第38期“迟到“的毕业证-趣闻轶事(三)
  13. U盘制作ubuntu18.04.6系统安装盘
  14. java 使用itext导出PDF文件,中文不显示问题解决
  15. Ubuntu 键盘鼠标失效怎么办
  16. 谁再瞧不起搬砖的我。。
  17. WPM3012-3/TR单P沟道 增强型MOS 场效应晶体管WILLSEM
  18. 【小程序】爆肝 3 天总结的微信小程序优化指南(收藏夹吃灰吧!)
  19. 华为开发者联盟安卓Push Demo无法接收消息的解决
  20. SEO实战干货:网页建库与未建库的标准规则!

热门文章

  1. 计算机知识竞赛 翻译,英文简历之常见学科竞赛中英文翻译
  2. Android快捷开关实现
  3. 计算机粘贴复制快捷键,电脑粘贴复制快捷键ctrl加什么(电脑快捷键方法大全)...
  4. 【TAGE】分支预测
  5. 点击改变文本框选择内容,Jquery datatables 重新加载数据
  6. 讯为4412蜂鸣器驱动实现
  7. Python练习题答案: 纳特拼音alaphabeta【难度:1级】--景越Python编程实例训练营,1000道上机题等你来挑战
  8. php抢票程序,HTML实现抢票功能(设定时间打开抢票的页面)
  9. google map 地图图标大全
  10. Activiti6.0 多级审批流程 代码执行