Google Maps Api v3: информационное окно, отображающее одинаковую информацию для всех маркеров на карте - PullRequest
1 голос
/ 21 ноября 2010

Я работаю над этим кодом для программы сертификации, я пытался получить некоторую помощь от инструкторов, но они не знакомы с Google Map Apis, и требуется отображать несколько маркеров из хранилищ адресов в файле XML как только поиск выполнен, т.е. я ищу Джона, я получаю его маркеры в дополнение к маркерам для всех людей, чей адрес хранится и указан в моем XML-файле. Таким образом, цель состоит в том, чтобы иметь возможность отображать, скажем, 5 маркеров для 5 человек и соответствующие им информационные окна.

Я могу заставить все маркеры отображаться после выполнения поиска, я также могу получить информационные окна , но информация, отображаемая во всех информационных окнах, одинакова во всех маркерах , она отображает информация для искомого имени. Вы можете, если вы хотите проверить с именем Ларри, уменьшить масштаб на другие маркеры и увидеть, что все они отображают одно и то же имя. Я не имею понятия почему? Когда я посмотрел на исправления, я ничего не нашел для google API v3, только ссылки на bindEvent для Api v2. Любая помощь будет высоко ценится, я не знаю, как остановить цикл for сделать все информационные окна одинаковыми. Благодарю. Код ниже:

<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 (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>

1 Ответ

0 голосов
/ 23 ноября 2010

Я использую это, и оно работает ... но я не профессионал: моя проблема сейчас

 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
                                    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...