Google Maps API v.3 - Невозможно отобразить информационное окно или когда я это делаю, центр карты находится в месте разработки - PullRequest
1 голос
/ 20 февраля 2012

У меня небольшая проблема с API Карт Google v.3. Я получаю адрес местоположения из базы данных MySql и пытаюсь динамически отправить его в GMaps. Это работает хорошо, но я не могу открыть «информационное окно». Если немного запутаться с кодом, но ближе всего я нашел решение, это открытое информационное окно, но карта была в центре определяющей позиции, а не фактической. Я искал на разных сайтах, но не смог найти подходящий совет. Может быть, я смешиваю v.2 и v.3, но, насколько я понимаю, это не так. Это мой первый взгляд на API Google, поэтому наберитесь терпения. Весь код взят из примеров:

  var marker;
  var geocoder;
  var map;
  function initialize() {
    var mapDiv = document.getElementById('map-canvas');
    var latlng = new google.maps.LatLng(42.696492,23.326011);
      geocoder = new google.maps.Geocoder();
      var address = "Milano 20099";
      geocoder.geocode( { 'address': address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
          map.setCenter(results[0].geometry.location);
          marker = new google.maps.Marker({
              map: map,
              position: results[0].geometry.location
          });
        } else {
          // alert("Geocode was not successful for the following reason: " + status);
        }
      });
      var infowindow = new google.maps.InfoWindow({content: '<strong>I will be here!</strong><br/>Milano 20099'});
      var myOptions = {
        zoom: 9,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.HYBRID
      }
      map = new google.maps.Map(mapDiv, myOptions);
      infowindow.open(map, marker);
  }

Заранее спасибо!

1 Ответ

0 голосов
/ 20 февраля 2012

Вы должны переместить метод открытия информационного окна в функцию обратного вызова геокодера.Ответ на запрос геокода может занять некоторое время, и вы пытаетесь открыть информационное окно, прежде чем геокодер вернет позицию маркера.Итак, ваш код должен быть следующим:

var marker;
            var geocoder;
            var map;
            function initialize() {
                var latlng = new google.maps.LatLng(42.696492, 23.326011);
                var myOptions = {
                    zoom : 9,
                    center : latlng,
                    mapTypeId : google.maps.MapTypeId.HYBRID
                }
                var mapDiv = document.getElementById('map-canvas');

                map = new google.maps.Map(mapDiv, myOptions);
                geocoder = new google.maps.Geocoder();
                var address = "Milano 20099";
                geocoder.geocode({
                    'address' : address
                }, function(results, status) {
                    if(status == google.maps.GeocoderStatus.OK) {
                        map.setCenter(results[0].geometry.location);
                        marker = new google.maps.Marker({
                            map : map,
                            position : results[0].geometry.location
                        });
                        var infowindow = new google.maps.InfoWindow({
                    content : '<strong>I will be here!</strong><br/>Milano 20099'
                });


                infowindow.open(map, marker);
                    } else {
                        // alert("Geocode was not successful for the following reason: " + status);
                    }
                });

            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...