所以,我有这个应用程序将使用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']),
});
}
});
然而,如果有人可以帮我添加新标记而不必重新加载那个非常棒的网站,那么更新现有标记是有效的。
答案 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']),
});
}
});