Javascript 更新Google Maps API V3中的现有热图时给出类型错误:g[b.x]未定义

Javascript 更新Google Maps API V3中的现有热图时给出类型错误:g[b.x]未定义,javascript,google-maps,google-maps-api-3,websocket,Javascript,Google Maps,Google Maps Api 3,Websocket,我有以下代码,它将首先加载映射,但是,任何进一步的“runHeatmap()”调用错误: 这是来自Firbug(firefox)的错误: var map = null, heatmap = null, heatmapData = []; map = new google.maps.Map(document.getElementById('map'), { center: new google.maps.LatLng(20, 12), zoom: 3, mapTypeId

我有以下代码,它将首先加载映射,但是,任何进一步的“runHeatmap()”调用错误:

这是来自Firbug(firefox)的错误:

var map = null, heatmap = null, heatmapData = [];

map = new google.maps.Map(document.getElementById('map'), {
    center: new google.maps.LatLng(20, 12),
    zoom: 3,
    mapTypeId: google.maps.MapTypeId.SATELLITE
});

function runHeatmap() {
    var pointArray = new google.maps.MVCArray(heatmapData);
    if (!heatmap) {
        heatmap = new google.maps.visualization.HeatmapLayer({
            data: pointArray,
            map: map
        });
    } else {
        heatmap.setData(pointArray);
    }
}

//receives [["34.3565","-29.23434"],["-3.4857","64.3984"]]
socket.on('coordArr', function(d){
    if (d.length > 0) {
        var i=0;
        while(i < d.length) {
            var lat = d[i][0].trim();
            var lng = d[i][1].trim();
            heatmapData.push(new google.maps.LatLng(lat,lng));
            i++;
        }
        runHeatmap();
    }
});

//receives ["-8.284374","94.2837"]
socket.on('coord', function (d) {
    var lat = d[0].trim();
    var lng = d[1].trim();
    heatmapData.push(new google.maps.LatLng(lat,lng));
    runHeatmap();
});
TypeError:g[b.x]未定义

第3行

这是来自Chrome的错误:

var map = null, heatmap = null, heatmapData = [];

map = new google.maps.Map(document.getElementById('map'), {
    center: new google.maps.LatLng(20, 12),
    zoom: 3,
    mapTypeId: google.maps.MapTypeId.SATELLITE
});

function runHeatmap() {
    var pointArray = new google.maps.MVCArray(heatmapData);
    if (!heatmap) {
        heatmap = new google.maps.visualization.HeatmapLayer({
            data: pointArray,
            map: map
        });
    } else {
        heatmap.setData(pointArray);
    }
}

//receives [["34.3565","-29.23434"],["-3.4857","64.3984"]]
socket.on('coordArr', function(d){
    if (d.length > 0) {
        var i=0;
        while(i < d.length) {
            var lat = d[i][0].trim();
            var lng = d[i][1].trim();
            heatmapData.push(new google.maps.LatLng(lat,lng));
            i++;
        }
        runHeatmap();
    }
});

//receives ["-8.284374","94.2837"]
socket.on('coord', function (d) {
    var lat = d[0].trim();
    var lng = d[1].trim();
    heatmapData.push(new google.maps.LatLng(lat,lng));
    runHeatmap();
});
未捕获的TypeError:无法读取未定义的属性“NaN”

(匿名函数)

H.forEach%7Bmain,可视化%7D.js:28

情商

TQ

H.aa

(匿名函数)%7Bmain,可视化%7D.js:34

代码:

var map = null, heatmap = null, heatmapData = [];

map = new google.maps.Map(document.getElementById('map'), {
    center: new google.maps.LatLng(20, 12),
    zoom: 3,
    mapTypeId: google.maps.MapTypeId.SATELLITE
});

function runHeatmap() {
    var pointArray = new google.maps.MVCArray(heatmapData);
    if (!heatmap) {
        heatmap = new google.maps.visualization.HeatmapLayer({
            data: pointArray,
            map: map
        });
    } else {
        heatmap.setData(pointArray);
    }
}

//receives [["34.3565","-29.23434"],["-3.4857","64.3984"]]
socket.on('coordArr', function(d){
    if (d.length > 0) {
        var i=0;
        while(i < d.length) {
            var lat = d[i][0].trim();
            var lng = d[i][1].trim();
            heatmapData.push(new google.maps.LatLng(lat,lng));
            i++;
        }
        runHeatmap();
    }
});

//receives ["-8.284374","94.2837"]
socket.on('coord', function (d) {
    var lat = d[0].trim();
    var lng = d[1].trim();
    heatmapData.push(new google.maps.LatLng(lat,lng));
    runHeatmap();
});
var-map=null,heatmap=null,heatmapData=[];
map=new google.maps.map(document.getElementById('map'){
中心:新google.maps.LatLng(20,12),
缩放:3,
mapTypeId:google.maps.mapTypeId.SATELLITE
});
函数runHeatmap(){
var pointArray=new google.maps.MVCArray(heatmapData);
如果(!热图){
heatmap=新建google.maps.visualization.HeatmapLayer({
数据:pointArray,
地图:地图
});
}否则{
heatmap.setData(点阵列);
}
}
//接收[“34.3565”、“-29.23434”]、[“-3.4857”、“64.3984”]
socket.on('coordArr',函数(d){
如果(d.长度>0){
var i=0;
而(i
  • 带有卫星的谷歌地图加载良好
  • 当套接字打开时,浏览器接收到“coordArr”事件,数据正确推送并生成热图,如下所示:
  • 然后,当该函数调用“runHeatmap();”时,套接字接收“coord”事件和正确的数据,从而导致错误

  • 我应该销毁热图并重新写入吗?这似乎相当浪费资源,我只是使用了错误的方法来更新现有的热图吗?

    可能的重复说明了如何更简单地完成我已经在做的事情。我从API中得到了一个实际的错误,这是由于在将pointArray重新应用于热图后期创建的过程中出现了未知的错误。我已经读过这个问题了。有了发布的代码和回复,错误应该不会发生。请检查套接字响应,出现此错误的原因是heatMapData中的LatLng值无效。(检查提供给coordArr和coord的参数是否具有所需的结构)@Dr.Molle是否希望给出一个答案,说明错误是由无效的lat/long值导致的?套接字响应不是数组,而是数组的JSON字符串(它们看起来是相同的console.log'd-除非单击log'd项)。谢谢你让我重新审视。回答这个问题,我会记下你的答案。