地理编码节点-红色-节点-谷歌。错误"Invalid request. Invalid 'latlng' parameter"



我不是node red的专家,非常感谢在使用node red node谷歌地理编码节点方面提供的一些帮助。链接到谷歌地理定位节点红色节点

我正试图通过google Geolocation API从之前使用上述节点获得的坐标中获取位置地址(通过坐标进行地理编码选项)。我通过POST从外部应用程序获取纬度和长度。

纬度和经度数据应该如何输入地理编码节点以获得正确的地址数据?经过几十次测试,我总是得到同样的错误:"无效的请求。无效的'latlng'参数"。我正在做的是:

  1. 获取通过POST生成的数据http://my_public_ip:1880/geo?id={设备}&时间={时间}&lat={lat}&lng={lng}&radius={radius}流的第一个节点是一个节点红色的Http-In节点,它实现了htp端点,从该回调中获取信息。正确检索信息(请参阅调试输出):{"id":"18A834","time":"1503231980","lat":"40.xxxxxxxxxxxxxx","lng":"-3.xxxxxxxxxxxxxxxxxxx","radius":"1651"}注:坐标因隐私原因而被遮蔽
  2. 如果来自HTTP-In节点的lng和lat值被输入到Google地理编码节点,则会收到消息错误"Invalid request.Invalid'latlng'parameter">

我用这种方式填充对话框:

纬度文本框:msg.payload.lat

经度文本框:msg.payload.lng

  1. 我尝试了几个插入coords功能节点的选项:将纬度和经度值转换为浮动,只保留前7位小数,再次转换为字符串。。。,并且总是收到相同的错误:"无效的请求。无效的'latlng'参数">

coords功能节点配置:

var coords ={};
latitude= parseFloat(msg.payload.lat).toFixed(7);
latitude1 = parseFloat(latitude);
var length = parseFloat(msg.payload.lng).toFixed(7);
var length1= parseFloat(length);
coords.payload = {lat:latitude1, lng:length1};
return coords;

函数输出似乎是正确的:{"lat":40.xxxxxxx,"lng":-3.xxxxxxx}

所以我希望用msg.payload.lat填充文本框,msg.payload.lng应该没问题。显然出了问题。。。

有人知道将经度和纬度值馈送到节点红色节点谷歌地理编码的正确方法吗?在下面的节点中查找红色使用的代码(记住,也测试了不同类型的变量,也测试过根本没有功能):

[{"id":"4dadb4d9.246a1c","type":"http in","z":"76138ea1.88752","name":"get_coords_from_post","url":"/geo","method":"get","upload":false,"swaggerDoc":"","x":300,"y":200,"wires":[["4a0b74fb.d10fcc","fb89b080.ef1cf","dac1b7ce.4cc2c8"]]},{"id":"fb89b080.ef1cf","type":"function","z":"76138ea1.88752","name":"coords","func":"var coords ={};nlatitude= parseFloat(msg.payload.lat).toFixed(7);nlatitude1 = parseFloat(latitude);nvar length = parseFloat(msg.payload.lng).toFixed(7);nvar length1= parseFloat(length);ncoords.payload = {lat:latitude1, lng:length1};nreturn coords; n","outputs":1,"noerr":0,"x":510,"y":200,"wires":[["a24b08cf.22ebf8","dac1b7ce.4cc2c8"]]},{"id":"4a0b74fb.d10fcc","type":"http response","z":"76138ea1.88752","name":"","statusCode":"","headers":{},"x":484,"y":131,"wires":[]},{"id":"dac1b7ce.4cc2c8","type":"debug","z":"76138ea1.88752","name":"","active":true,"console":"false","complete":"false","x":990,"y":480,"wires":[]},{"id":"a24b08cf.22ebf8","type":"google geocoding","z":"76138ea1.88752","name":"find_address_from_coords","geocodeBy":"coordinates","address":"","lat":"msg.payload.lat","lon":"msg.payload.lng","googleAPI":"","bounds":"","language":"es","region":"","components":"","x":740,"y":200,"wires":[["dac1b7ce.4cc2c8"]]}]

您不应该将msg.payload.latmsg.payload.lon放在配置对话框中。如果您通过消息对象传递这些值,则需要在配置对话框中将它们留空。

接下来,如README.md和Node RED中的信息栏中所述,您需要在传入消息上设置msg.location.latmsg.location.lon,以将这些值传递给节点。

所以基本上你的功能节点应该看起来更像这样:

var coords ={};
latitude= parseFloat(msg.payload.lat).toFixed(7);
latitude1 = parseFloat(latitude);
var length = parseFloat(msg.payload.lng).toFixed(7);
var length1= parseFloat(length);
coords.location = {lat:latitude1, lon:length1};
return coords;

相关内容

最新更新