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,获取本文自定义转换器下载连接。

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

win32 api setwindowlong 第2个参数_FME与MapBox 01:等时圈(Isochrone)API相关推荐

  1. win32 api setwindowlong 第2个参数_第 6 篇:分页接口

    作者:HelloGitHub-追梦人物 如果没有设置分页,django-rest-framework 会将所有资源类表序列化后返回,如果资源很多,就会对网站性能造成影响.为此,我们来给博客文章列表 A ...

  2. 如何用javascript api for arcgis调用有参数的GP服务

    如何用javascript api for arcgis调用有参数的GP服务 javascript代码:(个别变量没有说明,大家就就看看大概思路就好了,这是我的完整代码) 1 var linesCan ...

  3. php微信获取mediaid超出限制_微信开放API 语音消息 有个参数 MediaId 怎么来的

    微信开放API 语音消息 有个参数 MediaId 怎么来的以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 微信开放AP ...

  4. java调用支付平台API -- 遍历Bean生成XML参数

    一直也想把自己做过的东西记录下来,可是,一直都忙,没有时间(其实是自己懒,嘿嘿),今天终于下定决心,开始行动,最近刚做一个关于机票电子商务网站,接触到了与支付平台交互的东西,其实,理论上来讲这是个SO ...

  5. WINDOWS API ——SETWINDOWLONG—— 设置窗口样式 SetWindowLong 函数原型为:LONG SetWindowLong(HWND hwnd,int nIndex,Lon

    WINDOWS API --SETWINDOWLONG-- 设置窗口样式 SetWindowLong 函数原型为:LONG SetWindowLong(HWND hwnd,int nIndex,Lon ...

  6. 启动服务错误5拒绝访问_【Go API 开发实战 5】基础1:启动一个最简单的 RESTful API 服务器...

    启动一个最简单的 RESTful API 服务器 本节核心内容 启动一个最简单的 RESTful API 服务器 设置 HTTP Header API 服务器健康检查和状态查询 编译并测试 API 本 ...

  7. api怎么写_月薪几十K 的人是怎么设计REST API

    前言 作为一名优秀的后端程序员,你照着产品需求设计好了模型,设计好了关联关系. 把这些模型和关系一再打磨了一番之后,你想是时候把API设计出来,与前端沟通了. 这时候问题来了: 一旦 API 进入前端 ...

  8. 【Go API 开发实战 5】基础1:启动一个最简单的 RESTful API 服务器

    本节核心内容 启动一个最简单的 RESTful API 服务器 设置 HTTP Header API 服务器健康检查和状态查询 编译并测试 API 本小节源码下载路径:demo01 可先下载源码到本地 ...

  9. odoo10参考系列--ORM API 三(字段、继承与扩展、域和更新到新API)

    字段 基础字段 class odoo.fields.Field(string=<object object>, **kwargs) 字段描述符包含字段定义,并管理记录中相应字段的访问和分配 ...

最新文章

  1. kali最新国内更新源sources
  2. Ubuntu 升级npm 以及安装cross-env 过程中遇到的问题
  3. 画像分析(3-3)标签建模-模型管理-新建关系
  4. Java ObjectOutputStream writeDouble()方法与示例
  5. TensorFlow神经网络(三)神经网络优化
  6. 54 计算机与信息科学类,计算机与信息科学类专业包括哪些
  7. Github-推送代码报错“error:RPC failed;curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL,errno 10054”解决方案
  8. Visual Studio 2010 新建完项目编译就出错
  9. 深度探索C++对象模型复习和学习 第三章 Data 语义学(The Semantics of Data )
  10. 泰坦尼克号python数据分析统计服_Kaggle入门级赛题:泰坦尼克号生还者预测——数据分析篇...
  11. Android打开H5时提示“请在微信客户端打开”
  12. 专家解读政府购买服务热点
  13. Ubuntu18.08安装到移动硬盘(UFEI引导)
  14. 麒麟信安操作系统:挖掘场景,与云俱进 ——携手openEuler赋能关键行业应用
  15. SpringCloud - GateWay服务网关
  16. Java获取一年有多少周、某周的第一天和最后一天,当前时间所在当年的实际周数
  17. 简单人物画像_怎样把复杂的人物肖像画简单化
  18. CynosDB 与传统数据库有什么不同?CynosDB 的兼容性怎么样?
  19. java安装 1723_2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-准备阶段...
  20. 【异常检测】恶意软件检测:MaMaDroid (DNSS 2017)

热门文章

  1. shell脚本判断输入参数个数
  2. VMware下安装Ubuntu不支持1920X1080分辨率问题
  3. jdk安装和环境变量的配置
  4. tensorflow--logistic regression
  5. Android底层开发之Audio HAL Android Audio Overview
  6. c# 另存为excel
  7. bzoj1601 [Usaco2008 Oct]灌水
  8. java中方法的参数传递
  9. 59.进程的三种状态,以及之间转换的过程
  10. 2022年全国硕士研究生招生国家线公布