使用Apache NiFi的Jolt表达式转换坐标数组为PostGIS多边形字符串
用Apache NiFi的Jolt将坐标数组转换为PostgreSQL Geometry多边形字符串
我有一组地理坐标数据,需要转换成可插入PostgreSQL的geometry类型多边形字符串,使用Apache NiFi工具处理。
输入数据
[ [ 13, 52 ], [ 13, 55 ], [ 14, 15 ] ]
期望输出
POLYGON((13 52, 13 55, 14 15))
正确的Jolt转换规则
之前尝试的Jolt表达式未达到预期,以下是可行的转换规则:
[ // 把每个坐标对转为空格分隔的字符串 { "operation": "modify-overwrite-beta", "spec": { "*": "=join(' ',@(1,&))" } }, // 将所有坐标字符串用逗号+空格连接 { "operation": "modify-overwrite-beta", "spec": { "*": "&", "coords": "=join(', ',@(1))" } }, // 拼接成PostgreSQL需要的POLYGON格式 { "operation": "modify-overwrite-beta", "spec": { "result": "=concat('POLYGON((',@(1,coords),'))')" } }, // 只保留最终结果字段 { "operation": "shift", "spec": { "result": "POLYGON" } } ]
步骤说明
- 第一步:遍历每个坐标子数组,用空格拼接经度和纬度,将
[13,52]转为"13 52"。 - 第二步:把所有处理后的坐标字符串用
,连接,生成coords字段,值为"13 52, 13 55, 14 15"。 - 第三步:通过
concat函数将前缀、坐标串和后缀拼接成目标格式。 - 第四步:通过shift操作过滤掉中间字段,只保留最终结果。
如果需要直接输出纯字符串而非带键的JSON,可以在NiFi中搭配EvaluateJsonPath处理器,提取$.POLYGON的值即可。
内容的提问来源于stack exchange,提问作者dd619
相关产品推荐
相关产品推荐

