2010-11-21 89 views
1

我正在研究证书程序的这个代码,我尝试从教师那里获得一些帮助,但他们似乎并不熟悉Google Map Apis的要求是在执行搜索时从XML文件中的地址存储区显示多个标记,即,我查找John,除了标记之外,我还为他的地址存储和指定的所有人标记了他的标记XML文件。所以我们的目标是能够显示5个人的5个标记和他们各自的信息窗口。Google Maps Api v3:信息窗口显示地图上所有标记的相同信息

一旦执行搜索,我可以获取所有标记,我也可以获取信息窗口,但所有信息窗口中显示的信息在所有标记中相同,它会显示名称搜索。如果你想用拉里这个名字进行测试,你可以缩小其他标记并看到它们都显示相同的名字。我不知道为什么?当我查看修复程序时,我发现Google API v3没有任何功能,只是将API绑定到Api v2。任何帮助将不胜感激,我不知道如何停止使所有的信息窗口相同的循环。谢谢。 代码为波纹管:

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"> 
</script> 

<script type="text/javascript"> 

var geocoder; 
var map; 
var marker; 

function load() { 

    geocoder = new google.maps.Geocoder(); 
    var latlng = new google.maps.LatLng(37.4419, -122.1419); 
    var myOptions = { 
     zoom: 13, 
     center: latlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 

    } 
    map = new google.maps.Map(document.getElementById("mymap"), myOptions); 
} 

function showAddress(theAddress) { 
    var myaddress = theAddress 

    if (geocoder) { 
     geocoder.geocode({ 'address': myaddress}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      map.setCenter(results[0].geometry.location); 

      var marker = new google.maps.Marker({ 
       map: map, 
       position: results[0].geometry.location 
      }); 

     } else { 
      alert("Geocode was not successful for the following reason: " + status); 
     } 
     }); 
    } 
    } 

    function showAllAddress(AllAddress) { 

    var myaddress = AllAddress 

    if (geocoder) { 
     geocoder.geocode({ 'address': myaddress}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 

      var marker = new google.maps.Marker({ 
       map: map, 
       position: results[0].geometry.location 
      }); 

     // Create Info Window   
      var infowindow = new google.maps.InfoWindow({ 
      content: document.getElementById("theName").innerHTML = fiobj[0].firstChild.data + " " + lastobj[0].firstChild.data+"<br />" + addressobj[0].firstChild.data+"<br />" + phoneobj[0].firstChild.data+"<br />" + emailobj[0].firstChild.data+"<br />" 
      }); 

      // click event for marker 
      google.maps.event.addListener(marker, 'click', function() { 


     // Opening the InfoWindow 
      infowindow.open(map, marker); 
      });  

     } else { 
      alert("Geocode was not successful for the following reason: " + status); 
     } 
     }); 
    } 
    } 
function createRequestObject() { 
    var ro 
    var browser = navigator.appName 
    if(browser == "Microsoft Internet Explorer"){ 
     ro = new ActiveXObject("Microsoft.XMLHTTP") 
    }else{ 
     ro = new XMLHttpRequest() 
    } 
    return ro 
} 

var http = createRequestObject() 

function sndReq() { 
    http.open('get', 'http://idrir.userworld.com/ajax/gmap.xml', true) 
    http.onreadystatechange = handleResponse 
    http.send(null) 
} 

function handleResponse() { 

    if(http.readyState == 4){ 

     document.getElementById("theName").innerHTML = "" 
     document.getElementById("address").innerHTML = "" 
     document.getElementById("phone").innerHTML = "" 
     document.getElementById("email").innerHTML = "" 

     var response = http.responseXML.documentElement 
     listings=response.getElementsByTagName("LISTING") 

     for (i=0;i<listings.length;i++) { 

      firstobj = listings[i].getElementsByTagName("FIRST") 

      if (firstobj[0].firstChild.data == document.getElementById("first").value){ 

      fiobj = listings[i].getElementsByTagName("FIRST") 
       lastobj = listings[i].getElementsByTagName("LAST") 
       addressobj = listings[i].getElementsByTagName("ADDRESS") 
       phoneobj = listings[i].getElementsByTagName("PHONE") 
       emailobj = listings[i].getElementsByTagName("EMAIL") 

//do not use this code bellow 
     // document.getElementById("theName").innerHTML = firstobj[0].firstChild.data + " " + lastobj[0].firstChild.data 
     // document.getElementById("address").innerHTML = addressobj[0].firstChild.data 
     // document.getElementById("phone").innerHTML = phoneobj[0].firstChild.data 
     // document.getElementById("email").innerHTML = emailobj[0].firstChild.data 

       theAddress = addressobj[0].firstChild.data 
       showAddress(theAddress) 

     } 

     } 

//添加for循环添加标记

 for (i=0;i<listings.length;i++) { 

       fobj = listings[i].getElementsByTagName("FIRST") 
       lobj = listings[i].getElementsByTagName("LAST") 
       aobj = listings[i].getElementsByTagName("ADDRESS") 
       pobj = listings[i].getElementsByTagName("PHONE") 
       eobj = listings[i].getElementsByTagName("EMAIL") 


     AllAddress = aobj[0].firstChild.data 
       showAllAddress(AllAddress) 


      } 
    } 
} 

</script> 
</head> 

<body onload="load()"> 
    <form id="search"> 
     <input type="text" id="first" /> 
     <input type="button" value="Search Phonebook" onClick="sndReq()" /> 
    </form> 
    <div id="theName"></div> 
    <div id="address"></div> 
    <div id="phone"></div> 
    <div id="email"></div> 
    <div id="mymap" style="width: 500px; height: 300px"></div> 
</body> 

</html> 

回答

0

我用这个和它的作品...但我不是一个亲:我issue right now

var image = 'http://localhost:3000/images/icons/map/icons/icehockey.png'; 
            var myLatlng_1 = new google.maps.LatLng(53.9515,-113.116); 
            var contentString_1 = "<b>Provident Place (formerly Redwater Multiplex) Ice Rink</b><br> Redwater, Alberta, Canada<br><b><a href='http://localhost:3000/rink/redwater/provident-place-formerly-redwater-multiplex'>Go To The Rink's Profile</a></b>"; 
            var infowindow_1 = new google.maps.InfoWindow({content: contentString_1}); 
            var marker_1 = new google.maps.Marker({ 
             position: myLatlng_1, 
             map: map, 
             icon: image 
            }); 
            google.maps.event.addListener(marker_1, 'click', function() { 
             infowindow_1.open(map,marker_1); 
            }); 

            var myLatlng_2 = new google.maps.LatLng(53.4684,-113.409); 
            var contentString_2 = "<b>Ridgewood Skating Rink Ice Rink</b><br> Edmonton, Alberta, Canada<br><b><a href='http://localhost:3000/rink/edmonton/ridgewood-skating-rink'>Go To The Rink's Profile</a></b>"; 
            var infowindow_2 = new google.maps.InfoWindow({content: contentString_2}); 
            var marker_2 = new google.maps.Marker({ 
             position: myLatlng_2, 
             map: map, 
             icon: image 
            }); 
相关问题