【超详细】小白初探FME--获取等时圈

75f7e956c29ba9e704ae69534d062778.png

在规划分析过程中,往往会涉及等时圈的概念。什么是等时圈呢?小编帮你百度过了,网上的说法是:等时圈是指从某点出发,以某种交通方式在特定时间内能到达的距离覆盖的范围。比如我们在规划设计中接触到的15分钟生活圈就是等时圈的一个具象应用。说到这里有朋友就疑惑了,我们怎么去获取等时圈呢?获取等时圈的方法有很多种,最常见的就是以下几种:

(一)无中生有,自给自足。

自给自足,很明显就是自己生成。当然,巧妇难为无米之炊,因此我们必须要准备一些 基础数据,包括道路矢量数据以及我们的设施点,而煮饭的工具小编推荐用ArcGIS网络分析工具中的服务区分析。具体步骤可以参考这一篇文章(设施服务区分析——5分钟服务范围)。但这种方法对数据基础的要求很高,路网构建得越接近现实,分析结果越精确,但在实际过程中很难保证我们的路网能百分百模拟真实路况,因此我们需要借助大数据平台的算法,来尽可能获取最接近实际的结果,例如百度地图、高德地图、mapbox等在线地图平台。

(二)站在巨人的肩膀上,拿来吧你。

今天小编主要介绍一下用FME来获取高德地图等时圈的思路和具体步骤,主要参考这一篇博客https://blog.csdn.net/fmechina/article/details/105566627,这篇博客的思路非常清晰,但是很多细节都没有展现出来,本期小编就帮大家翻译一下,让这篇推文变得更加的通俗易懂。悄悄告诉你,后台回复“等时圈”获取模板。

d44218cfbc62ae926650e7fae8bd7f56.png

cf8127727059f8e2a6ed0ffedea9bf8e.png

进入主题

ed460a571ba529c45365b56257c8d0cb.png

【整体思路】

1.构建起点坐标对并创建用户参数;

2.构建终点坐标对;

3.发送调用服务请求并解析JSON

4.创建等时圈并导出为shp       

【具体步骤】

接下来我们以长沙火车站15分钟等时圈为例,来具体认识一下FME在获取网络数据中的魅力。本篇教程主要针对的是像我一样的小白,所以我会在流程中先讲解每一步的思路,再一一介绍我们用到的转换器,因此篇幅稍微长一点。

1

构建起点坐标和创建用户参数

2482a2959e05d91aa191590e693f1317.png

首先新建几个必要的用户参数。用户参数(user parameters)是FME为用户提供的参数,是为最终用户使用工作空间提供的输入接口。通俗一点讲,这些参数是贯穿整个程序的,因此我们提前准备好。我们只需右键导航窗口(Navigator)下的用户参数(user parameters),在弹出窗口中填入参数名称、别名、勾选必填,设置默认值为500(也可不设,不设的情况下在运行程序时会提醒设置)。依次添加OriginLonLat(起点经纬度)、Radius(预估半径)、Grid(网格密度)、Amap_Key(高德密钥)、Transportation(出行方案)等必填参数。其中,Amap_Key(高德密钥)需要去高德地图API控制台申请。

4308e26fbe4e5378b5163554bc433b25.png

fea8b23c59857528547d034cc9179b67.png

其次在高德地图坐标拾取器https://lbs.amap.com/tools/picker中搜索我们的分析对象坐标,比如长沙火车站,将获取到的坐标复制到OriginLonLat(起点经纬度)参数中去。

8366e040d27573dffb5d8658b1c7c893.png

【Creator】用提供的参数来创建要素,并将这些要素发送到工作空间中进行处理。

b1b3c3cd259d1d8aa5bc0b4b0e946ac6.png

【ParameterFetcher】给要素添加一个属性并用先前发布的参数赋值。这里我们主要是为了获取用户参数到要素中。

478d3ba8b80335aa8e10c6a14e951fbc.png

【AttributeSplitter】把选择的属性分离成一个属性列表。列表中的每一项都包含一个从列表中分离出的单个令牌。例如,你可以用这个转换器,把一个含有分隔逗号列表的属性分离成其组件。这一步主要是为了将起始点坐标对隔开存入列表中备用。

70fb92365ae1fd59bfe91926e270e6be.png

【VertexCreator】将坐标附加到空(Null)、点、文本、线和弧等几何对象上,或者用点对象替换现有图形对象。这一步就是为了创建起点要素。

d838a72345ccdf57454b47cae49b62c4.png

2

构建终点坐标对

构建终点坐标对的思路是基于我们的起点创建一个大致的缓冲区作为预估范围,缓冲区半径是根据我们分析需求来确定(比如我们想要获取15分钟骑行等时圈,则根据15分钟骑行大约3000米的标准来确定阈值),其次是在这个缓冲区范围内创建一个网格,提取其网格中心点作为出行的终点,网格的大小决定了等时圈的精度,但受调用次数的限制,我们退而求其次尽量取合适的精度。

a60efa064226fa398722e22c70d0c893.png

【EsriReprojector】使用ESRI重投影库,把要素的坐标系重投影到另一个坐标系统。这里是因为后面创建缓冲区和网格的时候需要在平面坐标系下进行。

46bce942b1b0000303b1643c972d9724.png

【Bufferer】在输入几何对象周围或内部创建指定大小的缓冲区。

f2e09a475889eae15b30f44d10879536.png

【2DGridCreator转换器】用一个由二维点或者矩形形成的网格取代原来的输入要素,这些网格有指定的间距且覆盖所有进入此转换器的要素的整体外接区域。这里我们主要用于创建网格。

d5464b9b3098eaa1348e0bf6080b1ffd.png

【SpatialFilter】根据空间关系过滤点、线、面或文字等要素。每个输入候选(CANDIDATE)要素与所有过滤(FILTER)要素进行比较,基于给定的空间测试条件来判断是否满足。这里主要用于提取缓冲区范围内的网格,可大幅减少后面调用高德服务的次数。

b0c70988c0ef19e371bd7b0b64465990.png

这一步将投影转换回WGS84是为了提取十进制度坐标值(高德地图采用的是火星坐标,火星坐标系是在GSP原始定位数据的基础上经过加密算法加密之后的定位数据所属坐标系,GSP原始定位数据所属坐标系叫WGS-84坐标系,WGS-84坐标系是美国国防制图局于1984建立的世界大地坐标系(World Geodetic System)的简称,出于安全考虑,我国国家测绘局规定国内必须对原始GSP数据进行加密,加密之后的坐标系就是GCJ-02坐标系,又叫火星坐标系。)

5d7bee01b29bd2b21aada2245262f36c.png

【CenterPointReplacer】用几何要素的中心点替换几何要素,该点或者位于要素范围的中心,或者位于要素的质心。这一步是为了生成网格中心点,将其作为路径的终点。

dfeb413fdb5fb6b2e855b701fa35058f.png

【CoordinateRounder】将要素坐标舍入到指定的小数位数。由于舍入而成为重复的任何连续点都将通过删除多余的点来细化。这一步是为了满足高德地图调用服务的条件(经纬度小数点不超过6位)。

a5553274ed7a77a185ed02f8097d1009.png

【CoordinateExtractor】按指定的索引检索坐标点XYZ值存储到属性字段中。这里是为了将终点的XY值提取到属性表中。到此完成终点构建。

9033490f385019d75233e60688f6767d.png

3

构建URL、调用服务并解析结果

完成起点和终点的构建后,就可以开始正式请求高德地图的服务了,模板如下。

57015f37c5286d5113f6a3e4a65b62d0.png

【AttributeCreator】给要素添加若干属性,并通过常量、属性值、表达式为属性赋值。属性值可以参考相邻的要素。这里我们主要用于构建URL(URL:统一资源定位符是WWW的统一资源定位标志,就是指网络地址)。

d94c0c3e4591f006cb8fc932b93125ae.png

参照高德API调用示例将其属性值设置为:

“@Value(_transportation)origin=@Value(_OriginLonLat)&destination=@Value(destination{0}.x),@Value(destination{0}.y)&key=@Value(_Amap_Key)”。

c71708255af2cfa6c7f68155decb8753.png

【HTTPCaller】通过HTTP或HTTPS访问URL,执行一个GET,PUT,POST,DELETE或HEAD操作。通过这一步去调用服务。请求URL设置为:

“https://restapi.amap.com/v4/direction/@Value(_URL)”,结果保留至属性即可。

265d1eb5cc95441f839e3aba4c4c9610.png

fbdda0c6004ad17f179c5f0c5c39adf9.png

上一步跑完后,如果成功的返回的值就会保存在“_response_body”字段中,这时我们需要对其进行解析,用到【JSONFragmenter】转换器,提取部分JSON格式化文本到新的FME的要素中。从示例中可以分析出,我们需要的时间藏在了“data”下面的“paths”中,因此,“JSON Query”的值设置为“json["data"]["paths"][*]["duration"]”,运行后,“_response_body”的值直接会被替换为"duration"(总用时)。到此就完成了数据的获取。

bcd6fa72afc704092fdbe2d95f017253.png

7d712ab21f94b53dc27c0a2757c10cd4.png

【AttributeRemover】从要素中删除选定的属性和列表属性。这一步是为了删除冗余的字段,提高运行速度。

f4dc5e2402ab325b5f314a75250a0caf.png

4

构建等时圈并导出shp

完成数据获取后,我们得到了起点到每个终点对应的出行时间,但网格点是离散的,因此我们需要将其模拟成连续的表面,再来提取等值线作为等时圈,这就跟高程点生成等高线一个道理,模板如下:

545754b7f3b21e8e69b06d3a30d2bff7.png

【3DForcer】通过给每个坐标添加z值,把二维数据转换为三维数据。这里是为了将“duration”赋值给网格点的z值,使其具有三维属性。

237f65f7570265bb03301ed34219f255.png

这一步是为了将其投影至平面坐标系,方便模拟运算。

3c3a936533944432c59dd5984ada5214.png

【SurfaceModeller】基于输入的点和断裂线构建Delaunay三角格网。当需要同一模型多个表达形式时这个转换器很有效。这里就是生成连续表面的过程,有几种输出结果,我们需要其中的“contour”,也就是等值线。

61dbdabfb3fce75f6981477de10d0636.png

【AreaBuilder】获取一系列拓扑上连接的线,当线形成首尾闭合时创建拓扑正确的多边形要素。这一步是为了将封闭的等值线筛选出来并转换成面要素。到这一步我们已经得到了预估范围内的所有等时圈。

a27bbc434acb5dda530bfa8d908443e0.png

【Tester】执行要素的一个或多个测试条件,根据测试的结果决定要素的输出。判断可由任何FME允许的操作符组成。这一步是为了筛选出我们所需要的等时圈,比如15分钟(900秒),我们只需筛选出“_elevation”小于等于900的即可。

aef28a369f81b235a1280abdecaf25a8.png

最后通过写模块将结果输出为shp,大功告成,打完收工384665791423538abf6a3312b45dd5bb.png706ce1cc64b0ae98a7c586fb771916d9.pngb9b6b2d26e9b67cd5a90a7308020d892.png

54b83c9a373018acceb50608fc38dda8.png

最后看一看效果,可以直观地了解火车站的15分钟骑行圈。

11c4cdf6ba9152555648ac35c789a75d.png

再次悄悄告诉你,后台回复“等时圈”可以获取模板5e6119eb812b40e8f51742cdeeb3e5b5.png

3a9e5dbdc83ea42f1384e618ab0269d9.png

点个在看你最好看

另外我悄悄地创建了一个知识星球供大家交流学习,本知识星球致力于分享GIS软件知识干货,并结合实际案例,让小白上手快。日常分享规划知识,并结合GIS在规划场景中的应用案例,不管是规划中的GISER,还是GIS路上的规划人,永远不迷路。

在这里你将有3大收获:

1.系统全面地了解和学习GIS软件操作及应用; 

2.可个性化定制专属服务; 

3.与广大同行朋友进行深入交流,交换知识。

9cd044f88f3a9bd8c37872a85fc4d3ad.png

还有限量大额优惠券限时供应,冲冲冲!

4b63f48589788baad8ad18a8d626c60c.png

更有来自不同领域的嘉宾为您现场解答,还在等什么,快加入进来和大佬们一起探索吧!!!

2f5f804b1d50984073719970a775541d.jpeg

format,png

format,png

往期精彩推荐

format,png

format,png

format,png

地形图制作

交通可达性分析

设施服务区分析

人口重心迁移地图

ArcGIS制图之桂林山水

format,png

扫描二维码获取

更多精彩

format,png

凌晨GIS

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌晨GIS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值