更新谷歌地图标记没有重新加载地图和眨眼
Updating google map markers without reloading map and blinking
我正在做一个项目,我应该创建一个网页,显示谷歌地图在指定的GPS坐标的标记。本项目按以下方式组织。在服务器端,我有一个php脚本,它接受来自GPS设备的HTTP请求,在相应的.txt文件中接收和存储GPS坐标。php文件还包括javascript/jquery代码,读取带有GPS坐标的。txt文件,创建新的Google地图实例,并为在web浏览器中发出请求的用户在地图上放置标记。作为一名电子硬件工程师,这对我来说很新鲜。我发现的代码每5秒重新加载一次地图,但这使得地图在每次重新加载时闪烁/闪烁一段时间。另外,如果我在浏览器中手动更改缩放,每次重新加载地图时它都会重置为默认值。是否有办法避免地图闪烁,并顺利更新标记。下面是我的javascript/jquery代码片段。
function initialize()
{
mapProp = {
center:myCenter,
zoom:17,
mapTypeId:google.maps.MapTypeId.ROADMAP
};
setInterval('mark()',5000);
}
function mark()
{
map=new google.maps.Map(document.getElementById("googleMap"),mapProp);
var file = "gps.txt";
$.ajaxSetup({cache: false});
$.get(file, function(txt) {
var lines = txt.split("'n");
for (var i=0;i<lines.length;i++){
console.log(lines[i]);
var words=lines[i].split(",");
if ((words[0]!="")&&(words[1]!=""))
{
marker=new google.maps.Marker({
position:new google.maps.LatLng(words[0],words[1]),
});
marker.setMap(map);
map.setCenter(new google.maps.LatLng(words[0],words[1]));
map.addMarker(new MarkerOptions().position(entry.getValue()).title(entry.getKey()));
}
}
lastLength = lines.length;
marker.setAnimation(google.maps.Animation.BOUNCE);
});
}
google.maps.event.addDomListener(window, 'load', initialize);
这是怎么回事
每次更新都要重新创建地图,而不是创建一次并添加新的标记。
修复代码,带有注释:
function initialize() {
// map starting point
var myCenter = new google.maps.LatLng(0, 0);
// coordinates file
var file = "gps.txt";
// init and keep a reference to last line of coordinates
var lastLength = 0;
// init and keep reference to last set marker
var marker;
// map options
var mapProp = {
center:myCenter,
zoom:17,
mapTypeId:google.maps.MapTypeId.ROADMAP
};
// create map
var map = new google.maps.Map(document.getElementById("googleMap"), mapProp);
// execute once
mark();
// set update
setInterval(mark, 5000);
// this runs on schedule to add new markers
function mark() {
$.ajaxSetup({cache:false});
$.get(file, function(txt) {
var lines = txt.split("'n");
// disable animation on last marker from previous update
if(marker) {
marker.setAnimation(null);
}
// start from last line + 1 from previous update
for(var i=lastLength; i<lines.length; ++i) {
// some debug
//console.log(lastLength);
//console.log(lines[i]);
var words=lines[i].split(",");
if(words[0] != "" && words[1] != "") {
// new marker
marker = new google.maps.Marker({
position:new google.maps.LatLng(words[0],words[1]),
});
// put marker on map
marker.setMap(map);
// center on marker
map.setCenter(new google.maps.LatLng(words[0],words[1]));
// I don't know the api enough to fix this part although it seems to work without it
//map.addMarker(new MarkerOptions().position(entry.getValue()).title(entry.getKey()));
}
}
// update list starting position
lastLength = lines.length;
//set animation on current last marker
marker.setAnimation(google.maps.Animation.BOUNCE);
}, 'text'); // added datatype:text
}
}
// init
google.maps.event.addDomListener(window, 'load', initialize);
删除这一行以消除弹跳问题。
marker.setAnimation(google.maps.Animation.BOUNCE);
在绘制标记时,将它们保存在数组
中marker[j]=new google.maps.Marker({position:new google.maps.LatLng(words[0],words[1])});
和以后只添加新的映射或删除所有旧的
marker[j].setMap(null);
然后重新绘制所有标记
相关文章:
- 在地图加载/页面加载时,我想将地图设置为当前地理位置,但不想在地图上显示定位图标
- 谷歌地图加载后隐藏加载图像
- Javascript:Google Maps API:如果地图加载在隐藏容器中,则为空白地图
- 如何在地图加载后向谷歌地图添加标记
- 角度谷歌地图在初始地图加载后运行一次功能
- 无法让谷歌地图加载到页面上
- 让谷歌地图加载*后*找到用户的位置
- 谷歌地图加载静态图像
- 传单显示悬停时的地图 - 地图加载不正确
- 谷歌地图加载路线
- 必应地图加载映射() 函数缩放参数
- 如何在虚拟地球/必应地图加载中检查错误
- 地图加载后,谷歌地图上的标记不会显示
- 谷歌地图加载需要很长时间
- 谷歌地图加载后发出ajax请求
- 谷歌地图加载部分点击隐藏标签
- 使用Gmaps4rails v2在地图加载后添加和更新标记
- 谷歌地图-加载KML覆盖
- 使用javascript从谷歌地图加载json数据
- 谷歌地图v3地图加载事件