2013-02-13 165 views
4

这是基于谷歌地图API v3。该页面每10秒刷新一次,并使用自动中心和自动缩放功能更新地图上的标记位置。以下是我所面临的问题:谷歌地图api v3汽车中心自动变焦

  1. 每次页面加载(每10秒)地图居中(47.6145,-122.3418) 开始,然后中心和变焦基于标记的位置。如果取消以下地图不加载在所有:

中心:新google.maps.LatLng(47.6145,-122.3418),

如何停止地图加载初始lat和long坐标(47.6145,-122.3418),每次地图刷新。

2.有没有办法控制缩放级别?

这是一款基于谷歌地图API V3

function load() { 
    var map = new google.maps.Map(document.getElementById("map"), { 
    center: new google.maps.LatLng(47.6145, -122.3418), 
    zoom: 14, 
    mapTypeId: 'roadmap' 
    }); 
    var infoWindow = new google.maps.InfoWindow; 

    downloadUrl("phpsqlajax_genxml2.php", function(data) { 

    var xml = data.responseXML; 
    var markers = xml.documentElement.getElementsByTagName("marker"); 
    var bounds = new google.maps.LatLngBounds(); 
    for (var i = 0; i < markers.length; i++) { 
     var UID = markers[i].getAttribute("UID"); 
     var type = markers[i].getAttribute("type"); 
     var point = new google.maps.LatLng(
      parseFloat(markers[i].getAttribute("latitude")), 
      parseFloat(markers[i].getAttribute("longitude"))); 
     var html = "<b>" + UID + "</b> <br/>"; 
     var icon = customIcons[type] || {}; 
     var marker = new google.maps.Marker({ 
     map: map, 
     position: point, 
     icon: icon.icon, 
     shadow: icon.shadow 
     }); 
    bounds.extend(point); 
     bindInfoWindow(marker, map, infoWindow, html); 
    } 
    map.fitBounds(bounds); 
    }); 
} 

function bindInfoWindow(marker, map, infoWindow, html) { 
    google.maps.event.addListener(marker, 'click', function() { 
    infoWindow.setContent(html); 
    infoWindow.open(map, marker); 
    }); 
} 


    setInterval(load, 10000); 

function downloadUrl(url, callback) { 
    var request = window.ActiveXObject ? 
     new ActiveXObject('Microsoft.XMLHTTP') : 
     new XMLHttpRequest; 

    request.onreadystatechange = function() { 
    if (request.readyState == 4) { 
     request.onreadystatechange = doNothing; 
     callback(request, request.status); 
    } 
    }; 

    request.open('GET', url, true); 
    request.send(null); 
} 

回答

0

首先要控制缩放级别的代码中有一个名为setZoom()方法,你可以在地图对象调用,在你的榜样的map变量。

map.setZoom(5); 

,但更多的地图清爽的你的其他问题。我假设整个网页耳目一新更新地图的内容 - 我想你应该调查AJAX调用通过刷新在地图的数据无需刷新整个页面

你已经拥有的基础downloadUrl()方法 - 现在只需将它放在setInterval()上,并让数据每30秒刷新一分钟。

我还建议您在添加新标记之前清除标记的映射,否则每次数据刷新时都会产生内存泄漏,从而创建重复的DOM元素。我通常把我的标记引用放在一个数组中,然后遍历数组并运行marker.setMap(null),这将从地图中移除标记。

与代码片段编辑

使用您的代码段中让我们尝试和分离该代码放到单独的函数的负载功能和更新功能,使这项工作,还要确保你移动mapinfoWindow进入全球范围。

var map; 
var infoWindow; 
function load() { 
    map = new google.maps.Map(document.getElementById("map"), { 
    center: new google.maps.LatLng(47.6145, -122.3418), 
    zoom: 14, 
    mapTypeId: 'roadmap' 
    }); 
    infoWindow = new google.maps.InfoWindow; 
    refresh(); 
} 
function refresh(){ 

    downloadUrl("phpsqlajax_genxml2.php", function(data) { 

    var xml = data.responseXML; 
    var markers = xml.documentElement.getElementsByTagName("marker"); 
    var bounds = new google.maps.LatLngBounds(); 
    for (var i = 0; i < markers.length; i++) { 
     var UID = markers[i].getAttribute("UID"); 
     var type = markers[i].getAttribute("type"); 
     var point = new google.maps.LatLng(
      parseFloat(markers[i].getAttribute("latitude")), 
      parseFloat(markers[i].getAttribute("longitude"))); 
     var html = "<b>" + UID + "</b> <br/>"; 
     var icon = customIcons[type] || {}; 
     var marker = new google.maps.Marker({ 
     map: map, 
     position: point, 
     icon: icon.icon, 
     shadow: icon.shadow 
     }); 
    bounds.extend(point); 
     bindInfoWindow(marker, map, infoWindow, html); 
    } 
    map.fitBounds(bounds); 
    }); 
} 
setInterval("refresh()",60000); 
+0

谢谢您的及时答复。我的缩放问题已解决。我尝试刷新下载Url(),但地图和标记不会在地图上更新。只有刷新页面时,地图和标记才会更新。你能指导我如何解决这个问题。非常感谢! – user2067337 2013-02-13 07:43:21