1

我正在使用 OpenRefine 进行地理编码。我将数据从 OpenStreetMaps 提取到我的数据集结构中

我正在为坐标添加一个“基于此列的列”。我想检查 display_name 是否包含“Rheinland-Pfalz”,如果是,我想提取纬度和经度,即 pair.lat + ',' + 对.lon。我想迭代地做这个,但我不知道怎么做。我尝试了以下方法:

if(display_name[0].contains("Rheinland-Pfalz"), with(value.parseJson()[0], pair, pair.lat + ',' + pair.lon),"nothing")

但我想为每个索引 [0] 执行此操作,最多有多少。如果有人可以提供帮助,我将不胜感激。

编辑:感谢您的回答 b2m。我将如何提取与我们获得的坐标相对应的 display_name。我希望每个匹配项的输出为 display_name lat,lon(即包含“Rheinland-Pfalz”,因为我有一个不同的列,其中包含我想与已经生成的匹配项匹配的一段字符串。

例如,使用 b2m 的代码并将 display_name 合并到输出中,我们得到 2 个匹配项:

Schaumburg, Balduinstein, Diez, Rhein-Lahn-Kreis, Rheinland-Pfalz, Deutschland 50.33948155,7.9784308849342604 Schaumburg, Horhausen, Flammersfeld, Landkreis Altenkirchen, Rheinland-Pfalz, Deutschland 52.6228319,14.58652

对于每一行,我在不同的列中有另一个字符串。这里的条目是“Rhein-Lahn-Kreis”。我想过滤上面的两个匹配项,只将那些包含我的字符串的匹配项保留在另一列中。在本例中为“Rhein-Lahn-Kreis”,但每一行的其他列条目不同。我希望这很清楚,我将不胜感激任何帮助

4

1 回答 1

1

假设我们有以下 json 数据

[
    {"display_name": "BW", "lat": 0, "lon": 1},
    {"display_name": "NRW 1", "lat": 2, "long": 3},
    {"display_name": "NRW 2", "lat": 4, "lon": 5}
]

您可以提取组合元素latlong使用forEach并使用以下 GREL 表达式进行过滤,例如在基于此列对话框的添加列中。

forEach(
    filter(
        value.parseJson(), geodata, geodata.display_name.contains("NRW")
    ), el, el.lat + "," + el.lon)
.join(";")

这将产生一个值为 的新字段2,3;4,5

然后,您可以在分号“;”上拆分新的多值字段 获得分离值 (2,34,5)。

另一种方法是将 JSON 数组元素拆分为单独的行,避免使用forEachandfilter函数。

于 2022-01-19T07:24:22.223 回答