更新googlemaps api v3中的标记与node.js和socket.io

时间:2014-03-09 21:25:35

标签: node.js google-maps-api-3 serial-port socket.io google-maps-markers

所以,我有这个应用程序将使用serialport接收短信。 当收到一条消息时,首先会搜索数据库以查找收到短信的电话号码,如果该号码已在“设备”表中注册,那么它将完成剩余的过程......

现在,如果设备在“设备”中注册,那么它将分析其余的SMS并将其坐标保存到表“monitoreo_actual”,其中应用程序将搜索所有坐标以将其显示为标记。地图。

这是我为此目的使用的代码。

var marker = new Array();
var key;
var map = null;
socket.on('location', function(locations){
  var mapOptions = {
    center: new google.maps.LatLng(10.191, -68.192),
    zoom: 9,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };

  map = new google.maps.Map(document.getElementById("map-canvas"),mapOptions);

  for(i=0; i< locations.length; i++ ) {
    var key = locations[i]['idDispositivo'];
    marker[Number(key)] = new google.maps.Marker({
                    position: new google.maps.LatLng(locations[i]['latitud'], locations[i]['longitud']),
                    map: map,
                    title: String(locations[i]['idDispositivo']),
                    });
  }
google.maps.event.addDomListener(window, 'load');

});

每次设备发送新坐标时,都会更新该设备的标记,而无需重新加载网站,并且该部分因以下代码而运行良好。但是,可能存在IS数据库中注册的设备第一次发送其坐标的情况,在这种情况下它仍然没有标记,所以我必须添加标记而不重新加载,那是仍然不起作用的部分。我尝试了很多方法,到目前为止,根据我的尝试,它可能不加载新标记,或加载新标记并删除其余标记。以下代码是我一直尝试用来更新或添加新标记的代码。

socket.on('location update', function(data){
  var mapOptions = {
    center: new google.maps.LatLng(10.191, -68.192),
    zoom: 7,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  var mark = marker[data['idDispositivo']];
    if(mark){
      mark.setPosition(new google.maps.LatLng(data['latitud'],data['longitud']));
    }else{
      map = new google.maps.Map(document.getElementById("map-canvas"),mapOptions);
      marker[Number(data['idDispositivo'])] = new google.maps.Marker({
                    position: new google.maps.LatLng(data['latitud'],data['longitud']),
                    map: map,
                    title: String(data['idDispositivo']),
                  });
    }
});

然而,如果有人可以帮我添加新标记而不必重新加载那个非常棒的网站,那么更新现有标记是有效的。

1 个答案:

答案 0 :(得分:0)

好的,我尝试了2天而无法解决,我问了这个问题并在11分钟后解决了,但刚才我记得回答了......错误就是这条线......

  map = new google.maps.Map(document.getElementById("map-canvas"),mapOptions);

...在第二个代码示例中的“else”之后。

通过将“map”值设置为新的google.maps.Map(...),就像我实际上要求浏览器再次请求整个地图,并且因为它在第一个代码示例之外,然后它不会加载其余的标记。所以第二个代码示例改为此...

socket.on('location update', function(data){
  var mapOptions = {
    center: new google.maps.LatLng(10.191, -68.192),
    zoom: 7,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  var mark = marker[data['idDispositivo']];
    if(mark){
      mark.setPosition(new google.maps.LatLng(data['latitud'],data['longitud']));
    }else{
      marker[Number(data['idDispositivo'])] = new google.maps.Marker({
                    position: new google.maps.LatLng(data['latitud'],data['longitud']),
                    map: map,
                    title: String(data['idDispositivo']),
                  });
    }
});