span8
span4
实时数据馈送:
输入:https://environment.data.gov.uk/flood-monitoring/id/floods?最小严重性=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响应的“项目”元素将包含一个单个项目的描述或项目的阵列。
由于我们在示例数据没有控制权,并有可能成为时候有没有洪水,你可能会遇到洪水的列表中有项[],或零个项目。我们已经包括错误在这种情况下处理和我们包括基于文件的情况下,如果以下链接返回没有项目就可以使用。
第一个网站链接https://environment.data.gov.uk/flood-monitoring/id/floods?min-severity=4
包含许多与所述第二网络链接http://environment.data.gov.uk/flood-monitoring/id/floodAreas/061WAF06Coln/polygon多边形数据被嵌入的网页链接。所述数据结构可以在表从所述特征阵列查询时来表示。严重性级别从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/floods?min-severity=4)。参数需要单击确定之前,被指定为特征树只能在这一点上进行访问,这是一个新的功能为2017.0释放。点击参数设置模式扫描模式,以JSON查询,然后在省略号按钮[...]背后JSON查询的要素对象。
JSON阅读器格式和URL作为数据集
在打开后,点击“JSON”,注重“选定项目”部分中的文本对话框中,你可能想复制以备后用。
读卡器配置树
一旦你设置的参数,点击一个记录,你会看到这个文件被深深嵌套。请注意,有几个属性,但这种观点没有几何。在右边的特征信息窗口中,你可以看到它包含链接到包含洪水区域多边形的其他网站。
数据检查器视图没有几何图形,并显示此深度嵌套文件包含指向多边形数据的链接
我们将采取仔细看看数据,看看多边形数据的存储方式。如所提到的在JSON响应中的项目元素将包含一个单个项目的描述或项目的阵列。然而,它也包含项目[]或为零,期间没有洪水警报的季节恰好。我们将着眼于该情景下的错误处理在最后。
{ “项目”:[{ “@id”: “http://environment.data.gov.uk/flood-monitoring/id/floods/99528”, “说明”: “科隆河及其支流”,“eaAreaName“: ”泰晤士西“, ”eaRegionName“: ”东南“, ”floodArea“:{ ”@id“: ”http://environment.data.gov.uk/flood-monitoring/id/floodAreas/061WAF06Coln“ "county" : "Gloucestershire" , "notation" : "061WAF06Coln" , "polygon" : "http://environment.data.gov.uk/flood-monitoring/id/floodAreas/061WAF06Coln/polygon" , "riverOrSea" : "River Coln, Dudgrove Brook" }
多边形嵌套JSON数据示例
在http://environment.data.gov.uk/flood-monitoring/id/floodAreas/061WAF06Coln/polygon多边形数据被存储下一个多边形元件链接并且包含坐标定义多边形对。从多边形数据的摘录在下面列出。请注意,值对下几何存储。
“几何”:{ “类型”: “的MultiPolygon”, “坐标”:[[[[-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 Workbench和生成演示的JSON消息的高级阅读更详尽的工作流程中的数据集的工作空间。亚搏在线添加一个Creator转换器、一个AttributeCreator和一个FeatureReader转换器来创建初始请求。输入是JSON格式的消息,通过URL访问,输出是将在谷歌Earth中打开的KML文件。
向画布添加一个Creator转换器。这个转换器创建一个特性,即使数据没有产生一个特性结果。这考虑了此时链接中没有洪水多边形数据的可能性。
在左侧的Navigator窗格的Published Parameters下,右键单击以创建一个新用户参数。输入以下:
类型 | 文本 |
姓名 | 严重程度 |
出版 | 是的 |
可选的 | 是的 |
提示 | 严重级别1-4 |
属性赋值 | 违约 |
默认值 | 四 |
“添加用户参数”对话框
添加一个AttributeCreator transformer,这将创建一个新的属性,我们将其称为“_request1”,并包含稍微修改过的URL,其严重性级别作为属性值,我们将在属性值的第一个字段中粘贴该属性值。网址是:https://environment.data.gov.uk/flood-monitoring/id/floods?最小严重性=$(严重性)
洪水警报级别为1-4级。在本练习中,我们将显示严重性级别3和4,以演示数据可能来自两种错误情况或预期的洪水多边形(取决于天气)。如果您在运行这个工作空间时,由于季节的原因没有洪水警告或警报生效,请在本文的最后查看另一种选择:基于文件的工作流,了解如何使用基于文件的工作流。亚搏在线
结果可能有:
属性创建者参数
在特征读取器参数中,在format下输入JSON并粘贴数据集URL https://environment.data.gov.uk/flood-monitoring/id/flood ?min-severity=4到reader数据集下的部分。
单击“读取器参数”,将打开“读取器参数”对话框。在这里,一旦我们将JSON查询指定为模式扫描模式,而将none指定为几何格式,就可以从树中进行选择。选择省略号[…]打开树。输入“json[" items "][*] "作为json查询点击
读者特征参数
读卡器配置树
单击ok 3次后,您的功能现在被读取到工作区中,您可以保存文件。
attributeexpose变压器暴露隐藏属性,以便其他变压器可以使用它们。把这个变压器连到电子阅读器上
添加StringLengthCalculator并将其连接到前面的转换器。floodArea分配”。polygon” as the Source Attribute in the parameters and accept “_length” as StringLength attribute default.
我们将演示在结果特性不包含任何几何图形的情况下读取此JSON消息的选项。当添加该测试变压器时,两个变压器将读取该测试变压器的输出。如果有几何图形,它将特性传递给HTTPCaller。如果测试失败,并且没有包含任何几何图形,我们希望通过AttributeCreator向输出显示传递消息。这是一个错误处理场景。
添加一个测试变压器并将其连接到StringLengthCalculator。在左值类型中或从下拉菜单中选择“_length”。选择“>”作为操作符,键入“0”作为右值。单击ok。
测试仪参数
将AttributeCreator连接到测试器上的失败输出端口。然后将其输出端口连接到写入器。在参数中输入以下内容:
新属性 | 属性值 |
消息 | 严重性级别$(严重性)没有洪水特征多边形 |
克米尔 | 无洪水特征 |
kmlúU说明 | 严重性级别$(严重性)没有洪水特征 |
属性创建者处理消息
当第二个AttributeCreator将测试人员失败的端口结果传递给编写器时,将它连接到编写器。
添加一个HTTPCaller转换器,并将它连接到测试器转换器上传递的输出端口。在请求URL下指定“洪泛区”。polygon”, the HTTP Method should be set to GET and ensure the Response Body Attribute isset to “_response_body”.接受其他一切的缺省值。单击ok。此请求URL的结构来自该文件。
“洪泛区”:{“多边形”:“http://environment.data.gov.uk/flood-monitoring/id/floodAreas/061WAF06Coln/polygon”
多边形数据结构摘录
接下来,我们将添加JSONFragmenter。由于这个文件的结构是嵌套的,我们需要另一个查询来深入到文件的结构中,以便访问几何图形。坐标数据在特征和几何图形中。输入以下:
JSON属性 | _反应体 |
JSON查询 | json[“features”][*][“geometry”] |
将查询结果展平为属性 | 是的 |
递归展平对象/数组 | 不 |
JSONFragmenter参数
这种查询结构的原因是嵌套。
{“type”:“featu”,“features”:[{“type”:“Feature”},“geometry”:{“type”:“MultiPolygon”,“coordinates”:[[-1.758934661685646,51.68604258983194]]}}
压缩数据结构
下一个工作流程中将添加另一个attribute脚注转换器。亚搏在线在参数中添加“几何体”和“防洪区”。在空白字段中键入后单击ok。
将几何编码设置为GeoJSON,然后单击省略号[…]符号旁边的几何图形源看到的文本编辑器。在文本编辑器中双击“_response_body”将源参数设置为@Value(_response_body),您将看到右侧字段中设置的参数。最后,将Remove属性选项设置为:“No”。
GeometryReplacer参数
在GeometryReplacer的输出端口上添加一个CoodinateSystemSetter,并将坐标系统设置为ESPG:4326。
接下来,我们将复制前面添加的AttributeCreator。右键单击附加到测试人员失败输出端口的AttributeCreator,然后单击Duplicate。将复制的AttributeCreator连接到CoordinateSystemSetter的输出端口。
属性创建者参数
将输出连接到KMLStyler,然后连接到洪泛区写入器。将KML styler的颜色参数设置为您选择的颜色。例如,绿色,填充颜色蓝色,不透明度0.3,填充不透明度0.4。运行带有重定向到数据检查器的工作区。写入器格式为KML,数据集路径将被设置。
已完成的工作区
当选择严重性为3的洪水警告并且洪水警告生效时,完成的工作空间将看起来像这样。在运行工作空间时,将提示您希望选择哪个严重级别。如果您在FeatureReader启动器端口中只得到一个结果,这意味着没有洪水警告有效。我们将在最后的错误处理一节中处理这个问题。
当打开重定向到数据检查器时,您的结果将与此类似,这取决于有多少地区发布了洪水警告和警报。数据检查器将显示洪水多边形的结果特征记录。这个示例演示了如何使用URL读取JSON格式的复杂消息并将其写入KML文件。
使用数据检查器整体应用多边形视图
当重定向到数据检查器被关闭时,您的结果将是一个KML文件。单击JSON Feature Writer打开包含文件夹,双击将在谷歌Earth中打开的KML文件。您将在KML样式中看到以您选择的颜色高亮显示的洪水多边形,或者出现一条消息,提醒您当前没有发布洪水警告。
Google Earth中的KML文件以您选择的颜色显示突出显示的泛光多边形
洪水警报只在某些季节出现,并导致洪水多边形不一定总是出现。如果您在预期洪水较低的季节测试此工作流,您将收到亚搏在线作为输出的消息。当洪水警报或警告存在时,与洪水特征相关的洪水多边形将按照以下transformer序列进行处理。
当这个严重级别没有发现任何特性时,谷歌Earth中的输出KML文件将是这样的。然而,可能会列出和显示其他严重级别的多边形。
在本例中,当找不到任何功能时将在Google Earth中显示的消息
使用本教程中创建的原始工作区,将一个测试人员转换器添加到
一个AttributeCreator将被连接到传递的测试端口,以不处理任何结果特性。这个转换器将失败的端口连接到写入器,并传递没有任何特性的消息。此情况在数组为空时生效。
另一个AttributeCreator将处理来自失败的测试端口的结果,并在链接没有泛洪多边形和没有发现特性的情况下发送输出消息。设置参数如下:
复制AttributeCreator_2并调整消息。然后将其连接到测试器上传递的输出端口。这个AttributeCreator将处理来自传递的测试端口的结果,并在数组为空的情况下发送输出消息。
新属性 | 属性值 |
消息 | 没有严重性级别$(严重性)的功能 |
克米尔 | 找不到功能 |
kmlúU说明 | 没有严重性级别$(严重性)的功能 |
复制这个新的AttributeCreator并将它附加到测试人员的失败端口。然后将其连接到写入器。当选择了一个没有洪水警告的严重级别时,例如1级,这种情况就会生效。将这两个新创建的attributecreator连接到写入器。结果消息可以在数据检查器或谷歌Earth中看到。
将记录器连接到
这个练习演示了如何读取复杂且嵌套的JSON格式的消息。因此,它可以被视为一个高级阅读示例,并展示了如何访问英国环境局的洪水警报API的嵌入式链接中的隐藏几何图形。
当洪水警告API不包含洪水多边形时,上面的工作流只表明没有几何图形可以使用基于文件的数据集洪泛_id_apr7 .json。亚搏在线使用这个完成的工作区:ex3- readade -file-floodarea -json2kml。输入:洪泛_id_apr7 .json。输出为:ex3-readadv-file-output。kml。
JSON入门
从JSON转换为空间格式(GIS)
请注意,本文使用的是环境署洪水和河流水位数据,这些数据来自实时数据API(Beta),该API是在Open Government license v3.0下获得许可的。
©2019安全亚搏在线软件公司法律