poi开发文档_FME与高德API:07 web服务POI多边形搜索

今天打开高德地图web服务文档发现,交通态势API接口已经下线;感觉地图的开放接口越来越少,以前高德开放建筑接口(道听途说,没用过)、道路接口(还可以用、无开发文档、不再维护更新),这次更新文档后下线交通态势(接口尚可以使用,只是无使用文档),不知下次会下线那个接口。上次介绍了web端的多边形POI搜索的工具,没记录具体的思路与模型,这次介绍web服务的多边形POI搜索API的获取思路,模型有多层嵌套,但总体思路还是比较简单。

一、MYFME自带的转换器介绍

MYFME中“AMapPOIDownloader”这个转换器“根据给定的多边形(WGS84格式),申请多边形内的POI数据。”(注:这个转化器无需授权,这个好像是博客大赛的作品),与这个转换器配合的有“AMapRequestor”配合使用,图1。【MYFME还有百度和腾讯(2017版)POI下载相关的转换器】网上也有不少关于通过FME获取POI的文章,但这些转换器后文章都没有考虑突破每次返回POI数据不超900个的限制,需要获取全面的POI只能靠经验划分好网格大小,再调用相关的转换器或流程。

a13f79d8a696259b58487eb8b69afdba.png

图1 MYFME自带高德POI下载转换器

二、自定义转换器简介

自定义转换器名称“AmapPOIDownloader_WEB_2018.1”,与上一篇记录的web端的POI及公交路线信息获取转换相比,多了关键词搜索的功能,少了公交路线信息下载的功能,这两个转换还存在一些问题,如错误信息提示较少,版本兼容问题(这是由于2019版本FME升级了“JSONFragmenter”“JSONFlattener”所引起的)。

1、与MYFME及网络现有的获取高德POI的FME魔板相比。本转换器更具有更多选择,可根据行政区名称等3方式进行POI的获取,选定范围后无需人工进行网格分隔而是有转换器通过对区域内POI数量的判断自行对网格进行分隔。

2、输出端口及参数设置。在web端转换器中已详细进行了介绍(点击直达),这里就不在介绍,这个转换器与web端转换器的差别在于输出端无公交路线信息的相关端口,参数设置增加了关键词搜索功能,图2。

713e6941600952b16d6186ce55c4f67f.png

图2 转换器参数项

三、转换器设计思路

本转换器的思路很简单,从人性的懒惰和贪婪出发:即最少的信息输入获得最多的数据输出。具体的实现是输入(选择)需要下载区域的名称、POI类型(或关键词)及web服务key,自动获取数据,为实现这个功能将转换器划分成四个模块(见图3):

1、行政名称选择模块,这个模块的流程以前写过记录;

2、行政区矢量范围查询模块,这个模块的流程以前也写过记录;

3、行政区域(多边形)划分,即将需要查询的范围划分成POI数量少于900个的小网格;

4、根据划分好的网格下载POI,这个可以通过MYFME自带的转换器实现(但这个转换器还有不少的坑)。

75baba1c78a34a74157673c8a1abf748.png

图3 自定义转换器的原始建构

1、2两部分在以前的记录已有详细介绍,这次主要记录3网格的划分、及简单记录POI获取及JSON数据的解析思路。

1、网格划分的思路与实现流程

这个自定义转换器跟网上很多关于突破高德POI返回900条数据的思路是一样的:

A、先按照一定的大小对网格进行初步划分,然后判断每个网格内POI的数量是否超过大于900条;

B、对小于900条的网格,直接获取网格内的POI,对大于900的网格进行四等分,大于900进一步划分,直到所有网格内POI数量均少于900。

FME魔板的实现,跟思路一致分两步实现,第一步按指定大小划分网格见图4:

0e5ef3af0bc9723ac656a5413fd9c3ee.png

图4 按指定大小划分网格

第二步,对网格内POI数量大于900进一步划分,这步需要用到循环(见图5),同时由于涉及阻塞转换器(Blocked Transformer ,Tiler),这步必须构建自定义转换器,涉及阻塞转换器的循环构建,请参考《Looping with a Blocking Transformer》(https://docs.safe.com/fme/html/FME_Desktop_Documentation/FME_IntegrationConsole/Workbench/looping_with_blocking_transformer.htm)或《Loopingwith Blocking Transformers》(https://community.safe.com/s/article/looping-with-blocking-transformers)。

c57934ed1163b9998eb9b98d40e9e9d3.png

图5 对POI数量大于900的网格进行迭代分割的循环流程

2、POI响应体的获取与数据解析思路

第一步是构建网址并获取响应体,判断网格内POI的数量,如小于等于25/50(数量根据个人喜好设定,但会影响数据的获取)大于25/50用Cloner转换器进行分页,从第二页开始获取数据;第二步根据需要将JSON数据中的属性提出出来,流程见图7。

e203644c27b4fd7ee9234a6942f05b1e.png图6 POI获取流程

这个自定义转换的介绍到此为止。下面介绍下这个自定义转换器跟web端(JS)自定义转换器改进的地方。web端转换器,按照设定大小对下载范围面进行切割时,会包含很多下载范围之外的区域,见图7;而web端将会下载范围自外的范围尽量减少,见图8。当然也可以切割成不包含下载范围外的网格(图9),而且实现还更为简单,但由于下载区域的不规则,太多的坐标对可能会产生错误,这里不推荐。

b69309bfd533dfce535a9720f5e3c0a2.png

图7 web端按照指定大小切割产生的网格

ec9a9bc9a384c42c4b0e860e2e882c7e.png

图8 web服务按照指定大小切割产生的网格

b6524059f5a19b402559a97aa74b3722.png

图9 直接用Tiler分割的结果

       FME与高德API,关于数据获取的应该不会在更新了;接下来高德地图的可能会有关于可视化展示的记录;还有可能就是针对百度地图API接口记录下接口调用过程(但也可能不会记录,毕竟跟高德的方法是一致的)。

       POI多边形搜索的自定义转换器,下一步会进行整合将web端与Web服务整合成一个自定义转换器。

公众号后台回复“AmapPOIDownloader_web”。获取自定义转换器

如觉得有用,点赞点再看!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值