MapBox是非常优秀的国外地图提供商,MapBox中在知乎设有专栏(https://www.zhihu.com/org/mapboxzhong-guo)介绍其成果及各种有趣的玩法。MapBox的API使用介绍极其详细,对新手也友好,像我这种不会编程的只要看其介绍文档也容易上手。
在《FME与高德API》系列记录中,以等时圈写起,学习MapBox API也从等时圈开始记录。高德或百度等国内提供商,并未提供等时圈API,需要通过路径规划API间接制作等时圈,这相当耗费时间;而MapBox有等时圈API可以直接获取等时圈数据;从规划路径获取的等时圈可以将不同时段的交通状况等因素综合考虑,能反应同一地区不同时段等时圈的变化,从另一方面反映其路况变化,能进行更为深入的研究;MapBox等时圈纯粹按照路网划定等时圈,成为等距离圈可能更为贴切。《FME与高德API:01——路径规划API与等时圈》(点击直达)中,对等时圈概念进行了简单的介绍,并引用了两张MapBox计算的等时圈图。接下来从注册账号开始记录MapBox IsoChrone API的学习。
一、MapBox账号注册
最早知道MapBox是在学制作热力图时,FMEHUB上有“LeafletHeatmap”转换器,需要使用其Token(图0),当时觉得还需要注册账号嫌太麻烦就放弃了。没想到其账号的注册极其方便,账号注册及本记录其他内容都非常浅显,这篇仅是为了记录学习的过程。
图0 “LeafletHeatmap”转换器生成的成都公交车站分布热力图
要使用MapBox的API等资源需要在其网站(mapbox.com)注册账号,进入网站在右上角“Sign in”(需要耐心等待!)有账号可以直接登录(图1),否则点击“Sign up for MapBox”(图2)进入注册页面后,仅需填写用户名、邮箱、密码及勾选服务及隐私政策既可以注册成功(图3,相比国内要收集号码、身份证认证等复杂的要求真是...)注册成功后,注册邮箱会收到一封确认邮件,打开邮件中的链接后登陆进入账号就可以看到一个默认的公共token,图4。
MapBox的token调用量是按月进行计量,多个token的调用量共用,ISOChrome API每个月的调用量为10万次,应该足够用;如想了解各种API的调用量可以点击主页的“Pricing”进行查看。
图1 网址及账号登录
图2 从登录页面切换至注册页面
图3 简单的注册信息
图4 登录后页面
二、等时圈API简介在登陆页面点击“Documentation”或“Help”可以进入API文档,现以“Documentation”进行介绍。点击“Documentation”下拉找到“Maps”(图5),点击进入“API”在“Navigation”下可以找到“Isochrone”(等时圈)的介绍文档,图6。
图5 等时圈API文档的入口之一
图6 等时圈使用介绍文档
1、API参数介绍
进入API文档后,点击“Isochrone API Playground”(图7)可以直观的调整各种参数并比较调整前后的变化。
图7 “Isochrone API Playground”入口
A、API必填参数
必填参数共有4个,一是用于确定划定等时圈(交通出行)方式,交通出行方式(profile),这个有三种方式:“driving”“walking”“cycling”(驾车、步行及骑行三种模式);第二个参数为等时圈的中心点坐标(coordinates,即出发点);第三个为划定等时圈的时间“contours_minutes”;第四个参数为调用接口的令牌(秘钥);前三个参数的具体要求(说明)见图8。
图8 三个必填参数具体设置说明
B、API可选参数
可选参数有4个:“contours_colors”用于设置等时圈的颜色;“polygons”设置输出的等时圈多边形或环线(linestrings)默认为环线,数据格式为GeoJSON;“denoise”作用是移除小的等时线,默认是移除;“generalize”设定等时线的平滑程度,采用的是“Douglas-Peucker generalization”法(感觉参数调优很难),见图9。
图9 四个可选参数具体设置说明
C、返回数据结构
调用API返回的数据为GeoJSON格式,这种格式在FME中解析非常简单,具体返回数据的属性较为简单(图10),就不再一一介绍。
图10 GeoJSON数据具体属性
D、API接口的限制与约束
a、每分钟最大调用次数为300次;
b、仅支持单点(中心点)生成等时圈;
c、每次调用接口最多只能生成4条等时线(即传入4个时间);
d、等时线的支持的最长时间为60分钟。
上述的限制可能影响在线调用的体验,每次只能单个中心点及单词调用最多支持4条等时线,这两个可以采用分批次调用解决,而最长只支持60分钟就没有其他解决办法。
E、参数在线实操(调试)
点击图7所示位置,可以进入等时圈实操(参数调试)页面。左边是必填及选填参数的设置;右上面部为实时结果展示地图,通过移动地图中标注的点即可生成一个等时圈;左下边有两个数据,一个是调用接口的具体URL,另一个是返回的GeoJSON数据,图11为通过设定经纬度,及将等时圈时间更改为“15 min increments”得到的结果。
图11 等时圈实时显示的数据
通过将“denoise”(去噪)参数调整为“1”(即默认值),等时圈并未发生明显的变化,图12。通过调整“generalize”(平滑/简化处理)等时圈节点将会产生明显的变化,图13。
图12 “denoise”参数为“1”的情况
图13 经简化(平滑)处理后的等时圈
F、GeoJSON数据的属性
返回的数据格式为GeoJSON,共有两部分数据,一是存有用于展示的颜色透明度及等时圈长度的属性数据,二是由于存储几何形状的坐标数据,见图14。
图14 GeoJSON数据格式
三、模板(自定义转换器)的构建
1、构建一个简单的接口调用模板(自定义转换器)
这个接口的数据结构比较简单,根据第“二”点介绍,只要创建自定义参数,对GeoJSON进行解析就可以了。
自定义参数共设定了5个:“出发点经纬度”用于输入等时圈中心经纬度,经纬度以英文“,”分隔;“时间”(Choice(Multiple类型),这里按照每5分钟为一个间隔,时间必须从小到大见图8、图15;“出行方式”(Choice with Alias类型),见图16;“token”用“Text”类型和“简化(光滑)处理”用“Number”类型,这里设定0-500(这个参数没有上限,使用了几次,好像超过100,效果就惨不忍睹);等时圈的形状采用多边形(polygons=true),去除零碎的等时圈(denoise)用默认。最后参数设置效果见图17。
图15 时间自定义参数设置
图16 出行方式自定义参数设置
图17 自定义参数最后效果
数据的获取与解析共用了3个转换器,一是“StringReplacer”将空格替换成“,”(在FME的Choice Multiple自定义参数中,被选择的多个参数默认以空格分隔,这个转换器不是必须的可以再下一个转换器中采用四则运算器中的“ReplaceString”函数);二是用于获取数据的“HTTPCaller”,一般建议对文件头中的“User-Agent”进行设置,参数设置见图18,;第三个转换器为“JSONFragmenter”,“HTTPCaller”获取的数据格式见图14,需要获取的属性信息只有“contour”,在“Fragment as Format”中选择“GEOJSON”,其余部分按照图19设置即可获取“contour”值及转换成几何图形,结果见图20;至此,整个接口的调用就完成了,如果不构建成自定义转换器只需要用到三个转化器(不含“Creator”)。
图18 “HTTPCaller”参数设置
图19 “JSONFragmenter”参数设置
图20 每个15分钟获取一条等时线的结果(步行)
2、让模板复杂些
等时圈API每次调用最多只能传入4个以英文“,”分隔的时间如果传入的时间超过4个,这就需要将拆分,再进行多次调用。
时间拆分处理有多种方式,这里采用的是“AttributeSplitter”按照字符串长度分隔,见图21,再用“ListExploder”进行属性暴露,最后在“StringReplacer”后增加“Tester”过滤掉时间为空的列。修改后的模板见图22,步行方式每镉5分钟获取等时圈结果见图23。
图21 “AttributeSplitter”参数设置
图22 经过更改的模板
图23 “一次性”获取12条等时线
3、让结果便于可视化
API获取的结果数据,每个等时圈就是一个面,如有多个等时圈在可视化时是难于区分(即使采用了色带也不行【ARCGis和QGIS都不行】,或许有其它方法只是我不会),如图24。
图24 经纬度数据集合格式一
要在gis软件中进行可视化展示可以将两个相邻时间段包围的范围构面形成环面、等时线还有环面与等时线叠加。
获取等时间线,有两种方式,一是调用接口时将“polygons=true”参数去除;另一种方式是用“GrometryCoercer”将面转成线。将获取的数据转成环面也简单只要用“AreaBuilder”重新进行构面即可,要素可以是面也可以是闭合线。为了减少转换器的使用接口调用是将“polygons=true”参数去除,在最后的增加“AreaBuilder”转换器就可以等到便于可视化展示的线、面数据。模板修改后的流程见图25,可视化结果见图26-30。当然为了便于可视化,模板中应增加出发点(中心点)的矢量化,这个即使“AttributeSplitter”+“VertexCreator”就可以实现。
图25 进一步调整后的模板(自定义转换器)
图26 环面可视化展示(步行,厦门)
图27 环面叠加等时线(步行,厦门)
图28 环面叠加等时线(步行,上海)
图29 环面叠加等时线(步行,泉州)
图30 环面叠加等时线(骑行,泉州)
对模板完成单次运行获取超过4条等时圈优化后,接下来,应该是对模板进一步进行多个出发点的调整;这里就不再记录了。
图31 环面叠加等时线(步行,4点4线;泉州)
图32 面叠加等时线(步行,4点12线;泉州)
图33 面叠加等时线(步行,46点6线;厦门)
向公众号后台发送IsochroneMultiPoints,获取本文自定义转换器下载连接。
如觉得有用,点赞点在看再走!