斯潘8
斯潘4
实时数据馈送:
输入:https://environment.data.gov.uk/flood-monitoring/id/floods?最小严重度=4
或
http://environment.data.gov.uk/flood-monitoring/id/flowareas/061waf06coln/polygon
已完成的工作区:ex3-readadv-flowareas-json2kml.fmwt(ex3-readadv-flowareas-json2kml.fmwt)
输出:ex3-readadv-live-output.kml(ex3-readadv-live-output.kml)
基于文件的方案:
输入:flood_id_apr7.json洪水-id-apr7.json
已完成的工作区:ex3-readadv-file-flowareas-json2kml.fmt文件
输出:ex3-readadv-file-output.kml文件
JSON是一种简单的结构化文本格式,用于存储数据。这些JSON格式的数据集有多种形式。geojson还使用了json(javascript对象表示法)规范。geojson能够以JavaScript Web浏览器可以立即显示的方式指定数据。无论您是从网站下载文件,还是订阅感兴趣的网络订阅源,您可能正在通过JSON访问数据,或者消费geojson。
一个geojson对象可以表示一个几何体,一个特征或一组特征。这些特征包括点,多边形,以及这些类型的多部分集合。几何图形可以以坐标的形式存储,也可以以地址和地理编码的形式存储。虽然geojson可以有几何图形,默认情况下,FME不显示。如果访问嵌套数据涉及多个查询,则需要更复杂的JSON服务。在本文的高级写作中,我们需要使用查询来提取我们感兴趣的JSON的子集。
本文中的高级读取JSON示例将涵盖使用数据检查器使用JSON读卡器格式读取的数据。数据检查器将用于检查数据。然后,我们将创建一个工作区,允许我们读取洪水警告API的JSON消息,并在洪水多边形存在或没有发出洪水警告的时候考虑多个场景。输出将写入一个kml文件,以便在GoogleEarth中查看。
文件的结构以及功能的嵌套深度,会对阅读的容易程度产生影响。这次演习使用了英国政府关于洪水警报的数据,洪水警报,水位和流量的测量。环境署洪水监测API为开发人员提供了接近实时的信息访问。当数据不断变化时,我们对其可用性不作任何免责声明。请注意,本文使用来自实时数据API(beta)的环境署洪水和河流水位数据,该数据是根据开放式政府许可证v3.0.API通过简单的HTTPGET请求提供对数据的REST风格的访问,该请求以JSON格式返回数据。此数据结构示例是嵌套的,这意味着它有包含子对象的对象。数组是包含重复元素的特殊类型的对象。JSON响应中的“items”元素将包含单个项目的描述或项目数组。
因为我们无法控制示例数据,有时可能没有洪水,您可能会遇到洪水列表中有项目[],或零项。我们在本例中包含了错误处理,并且我们包含了一个基于文件的场景,如果按照链接操作没有返回任何项,则可以使用该场景。
第一个网页链接https://environment.data.gov.uk/flood-monitoring/id/floods?最小严重度=4
包含多个嵌入的Web链接,其中多边形数据位于第二个Web链接http://environment.data.gov.uk/flood-monitoring/id/flowareas/061waf06coln/polygon中。当从Features数组中查询时,可以在表中表示数据结构。通过更改最后一个数字,严重性级别可以从4更改为更低。
表1显示了洪水区连接线(第一个连接线)的数据结构
表2显示了洪水区连接线的连续数据结构
http://environment.data.gov.uk/flood-monitoring/id/flowareas/061waf06coln/polygon
表3显示了多边形嵌入链接的数据结构(第二个链接)
我们正在读取的JSON格式的消息是嵌套的,这意味着数组在数组中。这意味着在提取几何图形之前,我们不想展平文件。
在创建此示例的当天,我们看到英国政府针对格洛斯特郡地区发出的洪水警告消息。
打开数据检查器,确保已加载stamen背景图或等效内容。选择json作为读卡器格式,并输入文件位置或链接(https://environment.data.gov.uk/flood-monitoring/id/floods?数据的最小严重性=4)。在单击“确定”之前需要指定参数,因为此时只能访问功能树。这是截至2017.0版的新功能。点击参数,将模式扫描模式设置为JSON查询,然后在特性对象的JSON查询后面的省略号按钮“…”。
JSON阅读器格式和作为数据集的URL
在打开的对话框中,单击“JSON”并注意“Selected items”部分中的文本,您可能需要复制它以供以后使用。
读卡器配置树
一旦设置好参数,单击一条记录,您将看到该文件被深度嵌套。请注意,此视图中有几个属性,但没有几何图形。在右侧的“功能信息”窗口中,可以看到它包含指向包含泛洪区多边形的其他站点的链接。
数据检查器视图没有几何图形,显示此深度嵌套的文件包含指向多边形数据的链接
我们将仔细查看数据,以了解多边形数据是如何存储的。如前所述,JSON响应中的items元素将包含单个项的描述或项的数组。但也可能包含项目[]或零,这发生在没有洪水警报的季节。我们将在最后的错误处理中查看该场景。
“items”:[“@id”:“http://environment.data.gov.uk/flood monitoring/id/floods/99528”,“description”:“科尔恩河及其支流”,“eaarename”:“西泰晤士河”,“earegionname”:“东南部”,“洪泛区”:“@id”:“http://environment.data.gov.uk/flood monitoring/id/flowareas/061waf06coln”,“county”:“格洛斯特郡”,“notation”:“061waf06coln”,“polygon”:“http://environment.data.gov.uk/flood monitoring/id/flowareas/061waf06coln/polygon”,“RiverOrsea”:“Coln河,达格洛夫·布鲁克“
带有多边形的嵌套JSON数据示例
多边形数据存储在位于http://environment.data.gov.uk/flood-monitoring/id/flowareas/061waf06coln/polygon的多边形元素链接下,并包含定义多边形的坐标对。下面列出了多边形数据的摘录。请注意,值对存储在几何体下。
“geometry”:“type”:“多多边形”,“坐标”:[[-1.758934661685646,51.68604258983194],[-1.758826005513945,51.68598898294504],[-1.758905679948403,51.68588139134682],[-1.760186905019262,51.6852519605945],[-1.76025920697431,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中高级消息读取的更详细的工作流。亚搏在线添加一个创建者变压器,一个属性创建者和一个FeatureReader Transformer来创建初始请求。输入是JSON格式的消息,通过URL访问,输出是一个kml文件,将在GoogleEarth中打开。
将创建者转换器添加到画布。这个变换器创建了一个特征,即使数据不产生特征结果。这考虑了当时链接中没有洪水多边形数据的可能性。
在左侧的导航器窗格中,在发布的参数下,右键单击可创建新的用户参数。输入以下内容:
类型 | 文本 |
名字 | 严重程度 |
出版 | 是的 |
可选的 | 是的 |
提示 | 严重级别1-4 |
属性分配 | 违约 |
默认值 | 四 |
添加用户参数对话框
添加一个属性创建器变压器,这将创建一个新的属性,我们将称之为“_request1”,并包含稍微修改过的URL,其严重性级别为我们将粘贴到属性值下第一个字段中的属性值。URL是:https://environment.data.gov.uk/flood-monitoring/id/floods?最小严重性=$(严重性)
洪水警报为1-4级。在本练习中,我们将显示严重性级别3和4,以证明数据可能在两种错误情况或预期洪水多边形中出现,具体取决于天气。如果您运行此工作区时,由于季节原因,没有洪水警告或警报生效,请参阅本文末尾的备选方案:基于文件的工作流,了解如何使用基于文件的工作流。亚搏在线
结果可能有:
属性创建器参数
在功能阅读器参数中,在格式下输入json并粘贴数据集url https://environment.data.gov.uk/flood-monitoring/id/floods?读卡器数据集下的部分的最小严重性=4。
点击读卡器参数,这将打开读卡器参数对话框。在这里,一旦我们将JSON查询指定为模式扫描模式,而将none指定为几何格式,就可以从树中进行选择。选择省略号[…]打开树。点击“json查询”,输入“json[”items“][*]”。
功能读取器参数
读卡器配置树
单击“确定”3次后,您的功能现在被读取到工作区中,您可以保存文件。
attributeExposer转换器公开隐藏的属性,以便其他转换器可以使用它们。将变压器连接到FeatureReader
添加StringLengthCalculator并将其连接到上一个转换器。在参数中指定“flowarea.polygon”作为源属性,并接受“_length”作为字符串长度属性默认值。
我们将演示读取这个JSON消息的选项,以防生成的特性不包含几何图形。添加此测试变压器时,测试仪的输出将由两个变压器读取。如果存在几何图形,则将特性传递给httpcaller。如果检测仪失败并且不包含几何图形,我们希望通过attributeCreator将消息传递到输出显示器。这是一个错误处理场景。
添加测试变压器并将其连接到StringLengthCalculator。在左边的值类型中或从下拉菜单中选择“长度”。选择“>”作为运算符,键入“0”作为右值。单击确定。
测试仪参数
将attributeCreator连接到检测仪上出现故障的输出端口。然后将其输出端口连接到写入程序。在参数中输入以下内容:
新属性 | 属性值 |
消息 | 没有严重级别为$(严重性)的洪水特征多边形 |
KMLYID | 无洪水特征 |
KMLL描述 | 严重级别为$(严重性)的无洪水特征 |
attributeCreator处理消息
将第二个attributeCreator连接到编写器,因为它将测试仪失败的端口结果传递给编写器。
添加一个httpcaller变压器,并将其连接到测试仪变压器上传递的输出端口。在请求URL下指定“flowarea.polygon”,HTTP方法应设置为获取并确保响应主体属性设置为“_response_body”。接受其他一切的默认值。单击确定。此请求URL的结构来自文件。
“洪泛区”:“多边形”:“http://environment.data.gov.uk/flood-monitoring/id/flowareas/061waf06coln/polygon”
多边形数据结构摘录
接下来我们将添加jsonFragCenter。由于此文件的结构是嵌套的,为了访问几何图形,我们需要另一个查询深入到文件的结构中。坐标数据在特征和几何图形中。输入以下内容:
JSON属性 | γ反应体 |
JSON查询 | JSON[“功能”][*[“几何图形”] |
将查询结果展平为属性 | 是的 |
递归展平对象/数组 | 不 |
JSonfragCenter参数
这个查询结构的原因是嵌套。
“type”:“FeatureCollection”,“features”:[“type”:“feature”,“geometry”:“type”:“多多边形”,“坐标”:[[-1.758934661685646,51.68604258983194]]
压缩数据结构
下一个工作流中将添加另一个attributeexposer转换器。亚搏在线在参数中添加“geometry”和“flowareaid”。键入空白字段后,单击“确定”。
将几何编码设置为geojson,然后单击几何体源旁边的省略号[…]以查看文本编辑器。通过双击文本编辑器中的“_response_body”,将源参数设置为@value(_response_body),您将看到右侧字段中设置的参数。最后,将移除属性选项设置为:“否”。
几何替换参数
将一个coodinateSystemsetter添加到几何置换器的输出端口,并将坐标系设置为espg:4326。
接下来,我们将复制先前添加的attributeCreator。右键单击连接到检测仪故障输出端口的attributeCreator,然后单击“复制”。将复制的attributeCreator连接到coordinatesystemsetter上的输出端口。
属性创建器参数
将输出连接到kmlstyler,然后连接到洪泛区编写器。将kml样式器的颜色参数设置为您选择的颜色。例如绿色,填充蓝色,不透明度0.3,填充不透明度0.4。运行重定向到数据检查器的工作区。编写器格式为kml,并设置数据集路径。
已完成的工作区
当选择严重级别为3的洪水警告并且洪水警告生效时,运行完成的工作区将类似于此。运行工作区时,系统将提示您要选择哪个严重级别。如果在FeatureReader启动器端口中只得到1个结果,这意味着没有洪水警报生效。我们将在最后的错误处理部分处理这个问题。
打开“重定向到数据检查器”后,结果将类似于此,取决于有多少地区张贴了洪水警告和警报。数据检查器将显示洪水多边形的结果特征记录。这个例子展示了如何使用URL读取JSON格式的复杂消息,并将其写入KML文件。
使用数据检查器整体应用多边形视图
当关闭重定向到数据检查器时,您的结果将是一个kml文件。单击JSON Feature Writer打开包含文件夹,然后双击将在Google Earth中打开的kml文件。您将看到以您在kml样式器中选择的颜色突出显示的泛光多边形,或显示一条消息,提醒您当前没有发布泛光警告。
google earth中的kml文件显示以您选择的颜色突出显示的洪水多边形。
洪水警报只在特定季节出现,并导致洪水多边形不一定总是出现。如果您在低洪水预期季节测试此工作流,亚搏在线您将收到一条作为输出的消息。当洪水警报或警告存在时,与洪水特征相关联的洪水多边形将按以下变压器序列处理。
当没有找到这个严重级别的功能时,GoogleEarth中的输出kml文件会像这样。但是,可能会列出并显示其他严重级别的多边形。
在本例中,当未找到任何功能时,将在Google Earth中显示的消息
使用本教程中创建的原始工作区,将测试变压器添加到
一个attributeCreator将连接到通过的测试仪端口,以处理无结果功能。此转换器将失败的端口连接到编写器,并传递没有任何功能的消息。此情况在数组为空时生效。
另一个attributeCreator将处理来自失败的测试仪端口的结果,并在链接没有泛洪多边形且找不到任何功能时发送输出消息。参数设置如下:
复制attributeCreator_2并调整消息。然后将其连接到测试仪上通过的输出端口。此attributeCreator将处理通过的测试仪端口的结果,并在数组为空时发送输出消息。
新属性 | 属性值 |
消息 | 没有严重级别为$(严重性)的功能 |
KMLYID | 找不到功能 |
KMLL描述 | 没有严重级别为$(严重性)的功能 |
复制此新的attributeCreator并将其连接到检测仪的失败端口。然后连接到作者。如果选择的严重级别没有洪水警告(例如级别1),则此情况有效。将这两个新创建的属性创建器连接到编写器。结果消息可以在数据检查器或谷歌地球上看到。
将记录器连接到
本练习演示了如何以复杂且嵌套的JSON格式读取消息。因此,可以将其视为高级阅读示例,并演示如何访问英国环境署洪水警报API的嵌入链接中的隐藏几何图形。
当Flood Warnings API不包含Flood多边形时,上面的工作流只显示没有几何图形,您可以使用基于文件的数据集Flood_id_apr7.json。亚搏在线使用这个完成的工作区:ex3-readadv-file-flowareas-json2kml.fmwt,并输入:flood_id_apr7.json。输出为:ex3-readadv-file-output.kml。
JSON入门
从JSON转换为空间格式(GIS)
请注意,本文使用来自实时数据API(beta)的环境署洪水和河流水位数据,该数据是根据开放式政府许可v3.0获得许可的。
?2019安全亚搏在线软件公司|合法的