地理编码节点-红色节点-google。错误 "Invalid request. Invalid 'latlng' parameter"
Geocoding node-red-node-google. Error "Invalid request. Invalid 'latlng' parameter"
我不是 node-red 方面的专家,非常感谢在使用 node-red-node-google 地理编码节点方面的一些帮助。
link to Google Geolocation node-red node
我正在尝试通过 google 地理定位 API 从先前使用上述节点获得的坐标(按坐标选项进行地理编码)获取位置地址。我通过外部应用程序 POST 获取纬度和长度。
应该如何将纬度和经度数据输入地理编码节点以获得正确的地址数据?经过几十次测试,我总是得到同样的错误:"Invalid request. Invalid 'latlng' parameter"。
我正在做的是:
- 获取通过 POST http://my_public_ip:1880/geo?id={device}&time={time}&lat={lat}&lng={lng}&radius={radius} 生成的数据
流的第一个节点是一个节点红色的 Http In 节点,它实现了 htp 端点,从该回调中获取信息。正确检索信息(请参阅调试输出):
{"id":"18A834","time":"1503231980","lat":"40.xxxxxxxxxxxxxx","lng":"-3.xxxxxxxxxxxxxx", "radius":"1651"}
注意:坐标因隐私原因而被遮蔽。
- 如果将来自 HTTP In 节点的 lng 和 lat 值馈送到 Google 地理编码节点,则会收到消息错误 "Invalid request. Invalid 'latlng' parameter"。
我这样填写对话框:
纬度文本框:msg.payload.lat
经度文字box:msg.payload.lng
- 我尝试了几种插入坐标函数节点的选项:
将纬度和经度值转换为浮点数,只保留前 7 位小数,再次转换为字符串...,并且总是收到相同的错误:"Invalid request. Invalid 'latlng' parameter"
坐标函数节点配置:
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 填充文本框应该没问题。显然出了点问题...
有谁知道将经度和纬度值提供给 node-red-node-google google-geocoding 的正确方法是什么?
在下面找到 node-red 使用的代码(记住,还测试了不同类型的变量,也测试了根本没有功能):
[{"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.lat
或 msg.payload.lon
。如果您通过消息对象传递这些值,则需要在配置对话框中将它们留空。
接下来,如 README.md 和 Node-RED 中的信息栏中所述,您需要在传入消息上设置 msg.location.lat
和 msg.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;
我不是 node-red 方面的专家,非常感谢在使用 node-red-node-google 地理编码节点方面的一些帮助。 link to Google Geolocation node-red node
我正在尝试通过 google 地理定位 API 从先前使用上述节点获得的坐标(按坐标选项进行地理编码)获取位置地址。我通过外部应用程序 POST 获取纬度和长度。
应该如何将纬度和经度数据输入地理编码节点以获得正确的地址数据?经过几十次测试,我总是得到同样的错误:"Invalid request. Invalid 'latlng' parameter"。 我正在做的是:
- 获取通过 POST http://my_public_ip:1880/geo?id={device}&time={time}&lat={lat}&lng={lng}&radius={radius} 生成的数据 流的第一个节点是一个节点红色的 Http In 节点,它实现了 htp 端点,从该回调中获取信息。正确检索信息(请参阅调试输出): {"id":"18A834","time":"1503231980","lat":"40.xxxxxxxxxxxxxx","lng":"-3.xxxxxxxxxxxxxx", "radius":"1651"} 注意:坐标因隐私原因而被遮蔽。
- 如果将来自 HTTP In 节点的 lng 和 lat 值馈送到 Google 地理编码节点,则会收到消息错误 "Invalid request. Invalid 'latlng' parameter"。
我这样填写对话框:
纬度文本框:msg.payload.lat
经度文字box:msg.payload.lng
- 我尝试了几种插入坐标函数节点的选项: 将纬度和经度值转换为浮点数,只保留前 7 位小数,再次转换为字符串...,并且总是收到相同的错误:"Invalid request. Invalid 'latlng' parameter"
坐标函数节点配置:
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 填充文本框应该没问题。显然出了点问题...
有谁知道将经度和纬度值提供给 node-red-node-google google-geocoding 的正确方法是什么? 在下面找到 node-red 使用的代码(记住,还测试了不同类型的变量,也测试了根本没有功能):
[{"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.lat
或 msg.payload.lon
。如果您通过消息对象传递这些值,则需要在配置对话框中将它们留空。
接下来,如 README.md 和 Node-RED 中的信息栏中所述,您需要在传入消息上设置 msg.location.lat
和 msg.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;