【问题标题】:I get NaN value when i try to get my latitude and longitude value from a mqtt channel? I try to parse them to float but still end up with a NaN value当我尝试从 mqtt 通道获取纬度和经度值时,我得到 NaN 值?我尝试将它们解析为浮动但仍以 NaN 值结束
【发布时间】:2020-04-04 10:10:04
【问题描述】:

我尝试解析我的 GPS 经度和纬度以浮动,以便我的 googlemap 可以读取它,但它只返回 NaN。 我通过 mqtt 通道从我的 arduino 将数据作为浮点数发送,我的 html 代码正在从该通道读取数据,是否有人可能不知道为什么它会失败?

window.initialize = initialize;

var redraw = function(payload) {
    lat = parseFloat(payload.message.lat);
    lng = parseFloat(payload.message.lng);

    console.log(lng);

    map.setCenter({ lat: 59.3559, lng:lng, alt: 0 });
    mark.setPosition({ lat: 59.3559, lng:lng, alt: 0 });

    lineCoords.push(new google.maps.LatLng(59.3559,lng));

【问题讨论】:

  • 让我们看看你的payload.message!
  • 为什么要解析 lat long 两次?
  • 请编辑您的标题。这对想要搜索您的问题的人没有帮助
  • 似乎 payload.message.lat 和 .lng 甚至都不是数字......要么未定义,要么可能是一个对象......如果你将payload.message 输出到浏览器开发者工具控制台
  • edit 显示您的onMessageArrived 函数的问题,以便我们可以准确了解您如何处理传入的消息。最可能的原因是payload仍然是一个字符串,需要解析成一个JSON对象

标签: javascript html parsing mqtt esp8266


【解决方案1】:

正如我在 cmets 中所说,消息负载以字符串形式接收(MQTT 消息只是字节数组,由用户将它们转换为/从任何更高级别的格式)。

如果你想使用字符串"{lng: 18.873501}"作为JSON对象{ "lng": 18.873501 }你需要先解析它。

由于您尚未提供 onMessageArrived 函数,因此很难建议如何正确解决此问题,但您可以执行以下操作:

var location = JSON.parse(message.payload);
var lat = location.lat;
var lng = location.lng;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-19
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 2022-06-23
    相关资源
    最近更新 更多