基于路径规划API使用FME计算等时圈
本次依旧使用百度地图开放平台,这次使用路径规划API。
本次是计算驾车出行的等时圈,因此在路径规划服务文档中找到驾车路线规划部分。
总体思路如下:
- 按照需求生成等时圈范围,并在其中均匀打点,将其作为目的地点;
- 根据起点、终点的坐标值构建请求url访问API,得到时间参数;
- 利用每个点的时间参数为值做插值分析,得到等时圈图。
1.创建起点:
- 添加Creator转换器
使用Creator转换器创建一个新要素,参数默认即可。
- 添加AttributeManager转换器
使用AttributeManager转换器添加起点坐标值,本次采用百度坐标以市政府作为起点,可以通过百度地图拾取坐标系统获得。
- 添加VertexCreator转换器
使用VertexCreator转换器将添加的起点转换为一个点要素。
- 添加CoordinateSystemSetter转换器
因为后续需要以起点为圆心做buffer,所以需要先为起点定义一个坐标系,然后将点变换为投影坐标系。
- 添加Reprojector转换器
使用Reprojector转换器将点变换为投影坐标系。
2.获取目的地点坐标:
- 添加Bufferer转换器
以起点为圆心做buffer,半径可以根据需要设定,此处以100KM为例。
- 添加2DGridAccumulator转换器
安装上一步生成的buffer范围,划分网格,并且设置创建的网格类型为点,这样就生成了目的地点。
此处按照设置的格子数量进行划分,将其划分为60×60的网格。
- 添加Clipper转换器
按照生成的buffer范围裁剪点,得到buffer范围内的点。
- 添加Reprojector转换器
因为此时生成的点的坐标为投影坐标,需要使用转换器转换为经纬度坐标。
- 添加CoordinateExtractor转换器
使用CoordinateExtractor转换器获取生成的每个目的地点的坐标。
- 添加AttributeManager转换器
使用转换器对属性进行整理,只保留坐标值字段即可。
3.将起点和目的地点相连:
- 添加FeatureMerger转换器
将起点和目的地点连接起来,使得每个目的地点上够连接上起点坐标。
- 添加Counter转换器
为了区分每个目的地点,使用Counter转换器为每个目的地点创建一个ID(从1开始)。
4.设置延迟处理:
为了安全起见,添加访问延迟处理。
- 添加RandomNumberGenerator转换器
RandomNumberGenerator转换器会生成一个随机数,根据分别设置最小值、最大值、小数点位数。
- 添加RandomNumberGenerator转换器
设置延迟时间,选择上一步生成的_random_number属性值。
5.构建访问url并解析返回结果:
- 添加HTTPCaller转换器
构建访问API的URL。
- 添加JSONFragmenter转换器
不知道为什么使用JSONExtractor转换器后运行会在某一处报服务器错误
的错误,但是JSONFragmenter转换器就不会出现这种情况,所以这里推荐使用JSONFragmenter转换器。
对返回的JSON进行解析,这里需要注意下语法问题(与获取{}里面数据不同的是获取[]里面的所有数据需要在后面添加一个[*]
)以及记得暴露需要的属性。
- 添加AttributeManager转换器
进行属性整理,删除多余属性。
此时已经得到起点与所有目的地点间的距离以及花费时间。
6.根据时间值做插值分析,得到等时圈:
根据每个目的地点的时间值做插值分析,生成等时圈图,和ArcGIS中的插值分析一样。需要注意的是在做插值分析之前,需要转为3D要素。
- 添加3DForcer转换器
根据时间字段,将要素转为3维要素。
- 添加Reprojector转换器
因为后续做插值分析时设置的像元大小是以米为单位,因此需要先将要素转换为投影坐标。
- 添加SurfaceModeller转换器
在转换器参数对话框中进行相关设置,其中,
表面容差————当点不是很多时,可以设置为0,就是每个点都参与插值计算,当点很多时,可以根据需要设置其他值。
输出DEM单元格x轴间隔、输出DEM单元格y轴间隔————也就是输出的栅格文件的像元大小,可以根据需要进行设置。
输出等高线间隔————此处就是等时线间隔,此处我们以1800秒,也就是半小时为间隔。
- 添加写模块
添加一个shapefile格式的写模块,因为输出的属性默认为elevation
,可以将其name
修改为时间
,type
修改为long(整数)
。
添加一个TIF格式的写模块,
7.运行之后得到结果:
后续可以使用生成的TIFF文件在ArcGIS中做进一步处理。