2017-08-20 60 views
0

我不是節點紅的專家,並且非常感謝使用Node-red-node-google地理編碼節點的一些幫助。 link to Google Geolocation node-red node地理編碼node-red-node-google。錯誤「無效的請求,無效的'latlng'參數」

我想通過谷歌地理位置API從以前獲得的座標使用上述節點(地理座標選項)獲取位置地址。我通過POST從外部應用程序獲取緯度和長度。

緯度和經度數據應該如何輸入地理編碼節點以獲取正確的地址數據?經過數十次測試後,我總是得到相同的錯誤:「請求無效,'latlng'參數無效'」。 我在做什麼是:通過POST http://my_public_ip:1880/geo?id= {設備} &時產生

  1. 取數據= {TIME} & LAT = {} LAT LNG & = {} LNG半徑& = {}半徑 第一個流的節點是實現htp端點的節點紅色Http In節點,從該回調獲取信息。 Te info被正確地檢索到(參見調試輸出): {「id」:「18A834」,「time」:「1503231980」,「lat」:「40.xxxxxxxxxxxxxx」,「lng」:「 - 3.xxxxxxxxxxxxxx」, 「radius」:「1651」} 注意:由隱私原因隱藏座標。
  2. 如果來自HTTP In節點的lng和lat值被饋入Google Geocoding節點,則會收到消息錯誤「Invalid request。Invalid'latlng'parameter」。

我填的對話框中這樣說:

緯度文本框:msg.payload.lat

經度文本框:msg.payload.lng

  • 我嘗試了幾個插入座標函數節點的選項: 將緯度和經度值轉換爲浮點數,只保留前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"]]}] 
    

    回答

    0

    你不應該把msg.payload.latmsg.payload.lon在配置對話框。如果您通過消息對象傳遞這些值,則需要在配置對話框中將它們留空。

    接下來,如自述文件中所述。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; 
    
    +0

    非常感謝你。在遵循您的建議之後正常工作。現在我對消息有更多的經驗,並且應用程序正在工作。您的建議是真正的讚賞。 BR。 – MAB