向地图添加新标记时,传单抛出“未捕获的类型错误:无法读取未定义的属性 'lat'”

ski*_*ree 5 javascript leaflet

我正在尝试遍历ajax调用的结果,以便在点击时为传感器创建标记。现在,我只想在单击按钮时显示标记。这是行不通的。调试后,可能是时序/并发问题,但以前类似的问题使用window.SetTimeOut(). 这对我不起作用。我在下面包含此代码和错误消息的屏幕截图:

latlng 对象为空的传单屏幕截图

在此处输入图片说明

控制台中错误的屏幕截图

在此处输入图片说明

这是我的代码

function sensorLayer(response) {
  response.forEach(function(item) {
    if (item["Latitude"] !== null && item["Longitude"] !== null) {
      window.setTimeout(() => {
        var mark = new L.marker((parseFloat(item["Latitude"]), parseFloat(item["Longitude"])))
          .addTo(map);
      }, 100);
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

这是电话:

document.getElementById("sensorSwitch").addEventListener("click", function(){  $.ajax({  
url: ' ',//I deleted this
data: {
  db: ' ',
  q: "SELECT MEAN(\"pm2.5 (ug/m^3)\") from airQuality where time >='2017-09-06T00:00:00Z'"
},
success: function (response){
  console.log(response);  });  
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏!它不会让我添加超过 2 个链接,否则我会包含一个我返回的数据示例(我认为过度共享并不在乎)。

ghy*_*ybs 4

您可能想用L.latLng您的坐标实例化 ,或将它们作为数组传递,而不是用普通括号包装您的 2 个坐标(lat, lng)

var mark = L.marker(
  L.latLng(
    parseFloat(item["Latitude"]),
    parseFloat(item["Longitude"])
  )
);
Run Code Online (Sandbox Code Playgroud)

或者:

var mark = L.marker([
  parseFloat(item["Latitude"]),
  parseFloat(item["Longitude"])
]);
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您绝对应该避免使用源自客户端代码的 SQL 查询。这是代码注入的典型安全漏洞。