2012-01-18 49 views
0

我需要谷歌地圖重新加載標記無重新加載整個地圖...用於跟蹤目的....以及顯示/隱藏交通沒有再次加載地圖... 例如。每15秒刷新標記,因此更新位置...谷歌地圖api阿賈克斯重新加載標記

這裏是我的代碼

function loadmap2(i) { 
    var map = new google.maps.Map(document.getElementById("map2"), { 
    center: new google.maps.LatLng(40.742575,-73.874932), //40.671037,-73.991976 40.710313,-73.858452 
    zoom: 11, 
    mapTypeId: 'roadmap' 
    }); 

if (i == 'traffic') {traffic();} else {}; 

function traffic() { 
var trafficLayer = new google.maps.TrafficLayer(); 
trafficLayer.setMap(map); 
} 
    var infoWindow = new google.maps.InfoWindow; 
    // Change this depending on the name of your PHP file 
    downloadUrl("markers_trucks_xml.cfm?date=<cfoutput>#URL.date#</cfoutput>", function(data) { 
    var xml = data.responseXML; 
    var markers = xml.documentElement.getElementsByTagName("marker"); 
    for (var i = 0; i < markers.length; i++) { 
    var id = markers[i].getAttribute("id"); 
var icon = markers[i].getAttribute("icon");//icon 
    var color = markers[i].getAttribute("color");//color 
var type = markers[i].getAttribute("type"); 
var data1 = markers[i].getAttribute("data1"); 
    var data2 = markers[i].getAttribute("data2"); 
    var data3 = markers[i].getAttribute("data3"); 
    var data4 = markers[i].getAttribute("data4"); 
    var data5 = markers[i].getAttribute("data5"); 
    var data6 = markers[i].getAttribute("data6"); 
    var data7 = markers[i].getAttribute("data7"); 
    var data8 = markers[i].getAttribute("data8"); 
    var data9 = markers[i].getAttribute("data9"); 
    var data10 = markers[i].getAttribute("data10"); 

    var point = new google.maps.LatLng(
      parseFloat(markers[i].getAttribute("lat")), 
      parseFloat(markers[i].getAttribute("lng"))); 
var ind = i; 
var ind= ind + 1; 
if(type == 'truck') 
{ 
var html = "<b><a href='da.cfm?id="+id+"'>"+data1+"</a></b><br />"+"Order # <b>"+data2+" &nbsp;&nbsp;"+data3+"</b> <i>lbs</i><br />" + "<br/><br/>" + data5 + "<br />" + data6 + "<br/>" + data7 + "<br/>" + data8 +"<br />"+ data9; 
var icon = "https://chart.googleapis.com/chart?chst=d_bubble_text_small&chld=bb|"+icon+"|"+color+"|000000"; 
} 
else if(type == 'track') 
{ 
var html = "<b><a href='da1.cfm?id="+id+"'>"+data1+"</a></b><br />"+"<b>"+data3+"</b>&nbsp;MPH&nbsp;-&nbsp;Engine&nbsp;<b>"+data7+"</b><br /><br/>Last Read&nbsp;" + data4 + "<br />Stop Duration&nbsp;" + data5 + "<br/>Recent Movement&nbsp;" + data6 + "<br/>Location&nbsp;" + data8 +"&nbsp;&nbsp;"+ data9; 
var icon = "https://chart.googleapis.com/chart?chst=d_bubble_text_small&chld=bbT|"+icon+"|"+color+"|000000"; 
} 

var marker = new google.maps.Marker({ 
     map: map, 
     position: point, 
     icon: icon, 
    title: data1, 
     shadow: icon.shadow 
     }); 
     bindInfoWindow(marker, map, infoWindow, html); 
    }; 


    }); 

}; 


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

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); 
} 

function doNothing() {} 

// This function picks up the click and opens the corresponding info window 
    function myclick(i) { 
    gmarkers[i].openInfoWindowHtml(htmls[i]); 
    } 

回答

0

您需要模塊化代碼 - 有一個函數來繪製地圖,函數加載數據,函數來初始繪製標記(並填充全局標記數組)和更新標記位置的函數。最終你想要將所有的標記對象存儲在一個數組中。後來您使用數組作爲參考,當你想更新標記位置(您不必清除標記或重新初始化地圖)這個代碼的執行

//your global marker array for storing marker objects 
    var globalMarkers; 

    function init() { 
    //initialise your map 

//draw the initial set of markers 
drawMarkers(); 
    } 
    function loadData() { 
    //define return array 
    var data = []; 

    //load your data here 
    //loop through data as you do 

    //store marker points 
    data[i].point = new google.maps.LatLng(
       parseFloat(markers[i].getAttribute("lat")), 
       parseFloat(markers[i].getAttribute("lng"))); 

    //add other data if you wish 

    //return a simple array of marker data - do not add them to the map yet 
    return data; 
    } 

    function drawMarkers() { 
    var markers = loadData(); 
    for (var i=0;i<markers.length;i++) { 

    var marker = new google.maps.Marker({ 
      map: map, 
      position: markers[i].point, 
      icon: icon, 
     title: data1, 
      shadow: icon.shadow 
      }); 
    } 
    //save your marker in a global array for updating later 
    globalMarkers.push(marker); 
    } 

    //this function updates position of markers with new data - you will be calling this one on a timer 
    function updateMarkers() { 
//load new data 
data = loadData(); 
    //loop through array of marker objects and update their position with new data 
    for (var i=0;i<globalMarkers.length;i++) { 
    globalMarkers[i].setPosition(data[i].point); 
    } 

    } 

順序應該是 上載文件init()映射,以後只能在定時器上調用updateMarkers。

+0

謝謝你的回覆......我不是那麼熟悉它......你可以請修改我最初發布的代碼....謝謝! – loo 2012-01-19 16:34:18

+0

任何人都可以請澄清如何做到這一點? – loo 2012-01-23 20:26:21

+0

您的代碼有一些語法錯誤,請發佈一個乾淨的版本 – Michal 2012-01-24 00:46:57