span8
span4
实时数据提要:
输入:https://environment.data.gov.uk/flood-monitoring/id/floods?min-severity=4
或
http://environment.data.gov.uk/flood-monitoring/id/floodAreas/061WAF06Coln/polygon
完成工作:ex3-readadv-floodareas-json2kml.fmwt
输出:ex3-readadv-live-output.kml
基于文件的场景:
输入:flood_ID_Apr7.jsonflood-id-apr7.json
完成工作:ex3-readadv-file-floodareas-json2kml.fmwt
输出:ex3-readadv-file-output.kml
JSON是一种用于存储数据的简单结构化文本格式。这些JSON格式的数据集有多种形状。GeoJSON还使用JSON (JavaScript对象表示法)规范。GeoJSON能够以Javascript web浏览器可以立即显示的方式指定数据。无论您是从网站下载文件还是订阅感兴趣的web提要,您都可能通过JSON访问数据,或者使用GeoJSON。
GeoJSON对象可以表示几何图形、特性或特性集合。这些特性包括这些类型的点、多边形和多部分集合。几何图形可以以坐标的形式存储,也可以以地址和位置的形式存储。虽然GeoJSON可以有几何图形,但默认情况下FME不显示它。如果访问嵌套数据涉及多个查询,则需要更复杂的JSON服务。在这篇高级文章中,我们需要使用查询来提取我们感兴趣的JSON子集。
本文中的高级阅读JSON示例将涵盖使用数据检查器以JSON阅读器格式读取的数据。数据检查器将用于检查数据。然后我们将创建一个工作区,它允许我们读取洪水警告API的JSON消息,并在洪水多边形存在或没有发布洪水警告的情况下考虑多个场景。输出将被写入一个KML文件,以便在谷歌Earth中查看。
文件的结构以及这些特性嵌套的深度将决定它的可读性。这项工作使用了来自英国政府的关于洪水警报、洪水警报、水位和流量测量的数据。环境机构洪水监测API为开发者提供了接近实时的信息。我们对这些数据的可用性不做任何免责声明,因为它是不断变化的。注意,本文使用的是环境机构的洪水和河流水位数据,这些数据来自于实时数据API (Beta),该API是根据开放政府牌照v3.0。api通过简单的HTTP GET请求提供对数据的REST风格的访问,该请求返回JSON格式的数据。这个数据结构示例是嵌套的,这意味着它有包含子对象的对象。数组是一种特殊类型的对象,它包含重复的元素。JSON响应中的“items”元素将包含单个项目的描述或项目数组。
由于我们无法控制示例数据,而且有时可能没有洪水,因此您可能会遇到洪水列表中有items[],或者没有项。在本例中,我们已经包含了错误处理,并且我们还包含了一个基于文件的场景,如果跟踪链接没有返回任何项,您可以使用该场景。
第一个web链接https://environment.data.gov.uk/flood-monitoring/id/flood ?min-severity=4
包含许多嵌入的weblinks,多边形数据位于第二个web链接http://environment.data.gov.uk/flood-monitoring/id/floodAreas/061WAF06Coln/polygon。当从features数组查询时,数据结构可以在表中表示。严重性级别可以通过更改最后一位数字从4更改为更低。
表1为洪泛区链路(第一个链路)数据结构
表2为洪泛区链路的连续数据结构
http://environment.data.gov.uk/flood-monitoring/id/floodAreas/061WAF06Coln/polygon
表3为多边形内嵌链路(第二个链路)的数据结构
我们正在读取的JSON格式的消息是嵌套的,这意味着数组在数组中。这意味着在提取几何图形之前,我们不希望将文件压平。
在创建这个示例的当天,我们看到了英国政府对格洛斯特郡地区发出的洪水警告信息。
打开数据检查器,并确保你有雄蕊背景地图或同等装载。选择JSON作为读取器格式,输入数据的文件位置或链接(https://environment.data.gov.uk/flood-monitoring/id/flood ?min-severity=4)。在单击ok之前需要指定参数,因为此时只能访问特性树,这是2017.0版本的新特性。点击参数,将模式扫描模式设置为JSON查询,然后点击省略号按钮[…]JSON查询背后的功能对象。
JSON阅读器格式和URL作为数据集
在打开的对话框中,单击“json”并注意“所选项目”部分的文本,您可能希望复制它以供以后使用。
读者配置树
设置好参数后,单击一条记录,您将看到该文件是深度嵌套的。注意,在这个视图中有几个属性,但是没有几何图形。在右侧的功能信息窗口中,您可以看到它包含到其他站点的链接,这些站点包含洪水区域多边形。
Data Inspector视图没有几何图形,它显示这个深度嵌套的文件包含指向多边形数据的链接
我们将仔细查看数据,以了解如何存储多边形数据。如前所述,JSON响应中的items元素将包含单个项的描述或项的数组。然而,它也可能包含项目[]或零,这发生在一个没有洪水警告的季节。我们将在最后的错误处理中查看该场景。
{“物品”:[{“@ id”:“http://environment.data.gov.uk/flood-monitoring/id/floods/99528”、“描述”:“Coln河及其支流”,“eaAreaName”:“西泰晤士河”,“eaRegionName”:“东南”、“floodArea”: {“@ id”:“http://environment.data.gov.uk/flood-monitoring/id/floodAreas/061WAF06Coln”、“县”:“格洛斯特郡”、“符号”:“061 waf06coln”、“多边形”:“http://environment.data.gov.uk/flood-monitoring/id/floodAreas/061WAF06Coln/polygon”,“riverOrSea”:《都格罗夫溪的科尔河》}
使用多边形嵌套JSON数据的示例
多边形数据存储在http://environment.data.gov.uk/flood-monitoring/id/floodAreas/061WAF06Coln/polygon的polygon元素链接下,并包含定义该多边形的坐标对。下面列出了多边形数据的摘录。注意,值对存储在geometry下。
“几何”:{“类型”:“多个多边形”、“坐标”:[[[[-1.758934661685646,51.68604258983194],[-1.758826005513945,51.68598898294504],[-1.758905679948403,51.68588139134682],[-1.760186905019262,51.6852519605945],[-1.760259206697431,51.685342301483914],[-1.759446753960602,51.68571307418105],[-1.759578091859035,51.685836831189455],[-1.759519936229592,51.68589262464122],[-1.758934661685646,51.68604258983194]]]]}
多边形数据存储在一个单独的链接的例子
在这个例子中,一个JSON提要被读取并显示在数据检查器中。特征信息窗口显示该视图中没有几何图形,但是显示了包含多边形数据的外部链接。在研究外部链接时,我们找到了以JSON格式定义洪水多边形的坐标对。
对于这样一个嵌套的JSON文件,我们需要设置一个工作空间来访问几何图形。第一个URL只给我们一个id和一个URL,我们需要解析它来获得实际的多边形数据。本节将指导您完成这些步骤的自动化。
打开FME工作台并生成一个带有数据集的工作空间,该数据集演示了一个更复杂的JSON消息高级读取工作流。亚搏在线添加一个创建者变压器,AttributeCreator和FeatureReader变压器来创建初始请求。输入是一个JSON格式的消息,由访问的URL,并且输出将在谷歌地球中打开的KML文件。
造物主变压器添加到画布上。这种变压器来创建特征,即使数据不产生功能的结果。这需要的,没有洪水多边形数据是在当时的链接的可能性护理。
在导航窗格左侧,公布的参数下,右键单击创建新的用户参数。输入以下内容:
类型 | 文本 |
的名字 | 严重程度 |
发表 | 是的 |
可选 | 是的 |
提示 | 严重性级别1 - 4 |
属性赋值 | 默认的 |
默认值 | 4 |
“添加用户参数”对话框
添加AttributeCreator变压器,这将创建一个新的属性,我们将称之为“_request1”并包含严重级别作为属性值,我们将在第一场粘贴在属性值略微修改URL。网址是:https://environment.data.gov.uk/flood-monitoring/id/floods?min-severity= $(严重性)
洪水警报有1-4级。我们将在这个练习中显示严重性级别3和4,以证明数据可以有两种错误条件或根据天气预期的洪水多边形。如果你正在运行该工作区,而当时没有洪水警报或警告实际上是由于季节看到替代方案:基于文件的工作流程在本文介绍如何使用基于文件的工作流程,而不是结束。亚搏在线
结果可能有:
AttributeCreator参数
在功能参数读者进入JSON格式下和数据集URL https://environment.data.gov.uk/flood-monitoring/id/floods?min-severity=4粘贴到下读卡器数据集中的部分。
点击阅读器的参数,这将打开阅读器参数对话框。在这里,我们有一次我们指定JSON查询的模式扫描模式,以便在树中选择该选项并没有如Geometry格式。选择省略号[...]打开树。输入“JSON [‘项目’] [*]”作为JSON查询点击
功能读卡器参数
读者配置树
点击OK 3次后,你的功能现在读入工作区,你可以保存文件。
该AttributeExposer变压器暴露出隐藏属性,使他们能够通过其它变压器使用。该变压器连接到FeatureReader
添加StringLengthCalculator并将其连接到以前的变压器。分配“floodArea.polygon”作为参数源属性,并接受“_length”作为StringLength属性默认。
我们将演示阅读的情况下,所产生的功能不包含几何此JSON消息的选项。当加入本测试仪变压器,测试器的输出将通过两个变压器被读入。如果有几何它传递的特性,让HTTPCaller。如果测试失败,并且不包含任何几何形状,我们希望通过AttributeCreator到输出显示到传递的消息。这是一个错误处理方案。
添加测试变压器,并将其连接到StringLengthCalculator。在左边的值类型,或从下拉菜单中选择选择“_length”。之所以选择“>”作为运营商和类型“0”作为权的价值。单击确定。
测试参数
一个AttributeCreator连接到测试仪上的失败输出端口。那么它的输出端口连接到作家。在参数输入以下内容:
新属性 | 属性值 |
消息 | 严重级别$(严重级别)没有洪水特征多边形 |
kml_id | 没有洪水特性 |
kml_description | 严重程度$(严重程度)没有洪水功能 |
AttributeCreator处理消息
本次AttributeCreator因为它通过测试仪的故障端口结果作家连接到作家。
添加HTTPCaller变压器,并将其连接到测试仪上的变压器传递的输出端口。根据请求的URL“floodArea.polygon”指定的HTTP方法应设置为GET和确保响应主体属性isset到“_response_body”。接受一切的默认值。单击确定。这个请求URL的结构来自于文件。
“floodArea”:{ “多边形”: “http://environment.data.gov.uk/flood-monitoring/id/floodAreas/061WAF06Coln/polygon”}
多边形数据结构摘录
下一步我们将增加在JSONFragmenter。由于该文件的结构嵌套,我们需要另一个查询更深下井到文件的结构,以获取几何形状。坐标数据是特征和几何形状内。输入以下内容:
JSON属性 | _response_body |
JSON查询 | json(“特性”][*](“几何”) |
将查询结果平铺成属性 | 是的 |
递归地平/对象数组 | 没有 |
JSONFragmenter参数
这样做的原因查询结构嵌套。
{ “类型”: “的FeatureCollection”, “特征”:[{ “类型”: “功能”}, “几何”:{ “类型”: “的MultiPolygon”, “坐标”:[[[[-1.758934661685646,51.68604258983194]]]}}
压缩数据结构
另一个AttributeExposer变压器将被添加到工作流程下一个。亚搏在线在添加参数“几何”和“floodAreaID”。单击确定一次输入到空白字段。
设置几何图形编码GeoJSON的,然后在点击省略号[...]旁的符号几何源看到的文本编辑器。通过双击文本编辑器中的“_response_body”,将源参数设置为@value(_response_body),您将看到右侧字段中设置的参数。最后,将remove属性选项设置为:“no”。
GeometryReplacer参数
将CoodinateSystemSetter添加到GeometryReplacer的输出端口,并将坐标系设置为ESPG:4326。
接下来,我们将复制先前添加的AttributeCreator。右键单击连接到测试仪上失败输出端口的AttributeCreator,然后单击复制。将复制的AttributeCreator连接到coordinates systemsetter上的输出端口。
AttributeCreator参数
将输出连接到kmlstyler,然后连接到泛洪区写入程序。将kml样式器的颜色参数设置为您选择的颜色。例如,颜色为绿色、填充颜色为蓝色、不透明度为0.3、填充不透明度为0.4。使用重定向到数据检查器运行工作区。写入程序格式将为KML,并将设置数据集路径。
完成工作
当选择了严重性为3的洪水警告并且有洪水警告生效时,已完成的工作区将如下所示。运行工作区时,系统将提示您要选择哪个严重级别。如果在FeatureReader发起程序端口中只得到1个结果,则表示没有洪水警告生效。我们将在最后的错误处理部分处理这个问题。
打开“重定向到数据检查器”后,结果将类似于此,具体取决于发布洪水警告和警报的区域数。数据检查器将显示洪水多边形的结果特征记录。这个例子展示了如何使用URL读取JSON格式的复杂消息并写入KML文件。
用数据检查器填充多边形视图
当“重定向到数据检查器”关闭时,结果将是KML文件。单击json feature writer打开containing文件夹,然后双击将在google earth中打开的kml文件。您将看到以您在kml样式器中选择的颜色突出显示的洪水多边形,或显示一条消息,提醒您当前未发出洪水警告。
KML文件在谷歌地球显示洪水多边形高亮显示您选择的颜色
洪水警报只在某些季节出现,导致洪水多边形不一定总是出现。如果您在洪水预期较低的季节测试此工作流,您将收到亚搏在线一条消息作为输出。当洪水警报或警告存在时,与洪水特征相关联的洪水多边形将用下面的变压器序列处理。
当没有找到此严重级别的功能时,Google Earth中的输出KML文件将如下所示。但是,对于其他严重级别,可能会列出并显示多边形。
在本例中,当没有发现任何特性时,将在谷歌Earth中显示的消息
使用本教程中创建的原始工作空间,将测试仪转换器添加到
一个attributecreator将连接到通过的测试仪端口,以处理无结果功能。此转换器将失败的端口连接到写入程序,并传递没有功能的消息。此情况在数组为空时生效。
另一个AttributeCreator将处理来自失败的测试仪端口的结果,并将发送输出消息,以防链接没有泛洪多边形且找不到任何功能。设置参数如下:
复制AttributeCreator_2并调整消息。然后将其连接到测试仪上通过的输出端口。此attributecreator将处理通过的测试仪端口的结果,并在数组为空时发送输出消息。
新属性 | 属性值 |
消息 | $(严重程度)没有功能 |
kml_id | 没有发现功能 |
kml_description | $(严重程度)没有功能 |
复制此新的AttributeCreator并将其附加到检测仪的故障端口。然后把它和作者联系起来。当选择的严重性级别没有洪水警告(例如级别1)时,此情况有效。将这两个新创建的属性创建器连接到编写器。生成的消息可以在数据检查器或google earth中看到。
将记录器连接到
本练习演示了如何读取复杂且嵌套的json格式的消息。因此,它可以被视为一个高级阅读示例,并展示了如何访问英国环境署洪水警告API的嵌入链接中的隐藏几何体。
当flood warnings api不包含flood polygons并且上面的工作流只显示没有几何体时,您可以使用我们基于文件的数据集flood_id_apr7.j亚搏在线son。使用这个完成的工作区:ex3-readadv-file-floodareas-json2kml.fmwt和输入:flood_id_apr7.json。输出为:ex3-readadv-file-output.kml。
使用JSON
从JSON转换为空间格式(GIS)
请注意,本文使用的是环境机构的洪水和河流水位数据,这些数据来自实时数据API (Beta),该API是在政府开放许可证v3.0下获得许可的。
©2019安全亚搏在线软件公司法律