2013-02-13 49 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