如何将GPS数据格式化为json

问题描述 投票:0回答:1

我有来自MQTT的消息,它提供了lat和long坐标,我想在节点红色的世界地图上绘制它。

我很困惑如何在地图上显示标记由lat long请帮助。

我在ui iframe中使用了世界地图 - 在菜单下(右上角) - 导入 - 示例 - 世界地图

坐标在节点红色调试选项卡和控制台中如下所示:

object
topic: "location"
payload: "1,18.392378,76.593338,284.8"
qos: 0
retain: false
_msgid: "68d05896.c67388"

在调试选项卡中看:

location : msg.payload : string[27]
"0,18.394644,76.592491,224.7"

我想像这样转换它

{name:"Art", lat:18.394606, lon:76.592514}

在世界地图中显示制造商

node-red
1个回答
1
投票

您有几种方法可以实现这一目标。

如果您熟悉JavaScript,则可以使用简单的函数节点。或者,您可以使用JSONata更改节点。

示例流程

以下是使用两种方法进行比较的示例流程:

[{"id":"7bc85438.5f05ac","type":"inject","z":"20e74d1e.f19692","name":"","topic":"","payload":"1,18.392378,76.593338,284.8","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":270,"y":560,"wires":[["923f0b9f.df87a8","87b267.8abfbd98"]]},{"id":"47bffe32.1be6f","type":"debug","z":"20e74d1e.f19692","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":630,"y":560,"wires":[]},{"id":"923f0b9f.df87a8","type":"function","z":"20e74d1e.f19692","name":"","func":"\nlet coord = msg.payload.split(',');\n\n\nmsg.payload = {\n    name:\"Art\", \n    lat: coord[1], \n    lon: coord[2]\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":390,"y":560,"wires":[["47bffe32.1be6f"]]},{"id":"87b267.8abfbd98","type":"change","z":"20e74d1e.f19692","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"(\t    $coord := $split(payload, ',');\t    \t    {\t        \"name\":\"Art\", \t        \"lat\": $coord[1], \t        \"lon\": $coord[2]\t    }\t)","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":420,"y":600,"wires":[["47bffe32.1be6f"]]}]

函数节点的JavaScript:

let coord = msg.payload.split(',');


msg.payload = {
    name:"Art", 
    lat: coord[1], 
    lon: coord[2]
}

return msg;

JSONata代码

(
    $coord := $split(payload, ',');

    {
        "name":"Art", 
        "lat": $coord[1], 
        "lon": $coord[2]
    }
)
© www.soinside.com 2019 - 2024. All rights reserved.