2014-02-08 3 views
0

Я только начинаю новый опыт с API-интерфейсом google. Я пытаюсь понять, как это работает, и я обычно понимаю или нахожу свои ответы на форумах.google-maps-api-3 setCenter не работает должным образом

Я имею вопрос с setCenter собственности, и я не могу найти свою ошибку ... При клике на маркер должно setCenter к маркеру и увеличения масштаба. setCenter не всегда работает, иногда она setCenter несколько км ...

Вот мой код:

var user; 
var pos; 

// Try HTML5 geolocation 
if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(function (position) { 
     pos = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); 

     // Show user marker 
     user = new google.maps.Marker({ 
      position: pos, 
      title: 'My location', 
      icon: iconUser, 
      map: map, 
      zIndex: google.maps.Marker.MAX_ZINDEX + 1 
     }); 

     map.setCenter(pos); 

     // Get address 
     geocoder.geocode({ 
      "latLng": pos 
     }, function (results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
       if (results[0]) { 
        infowindow.setContent('<b>Here you are :</b><br />' + results[0].formatted_address); 
        infowindow.open(map, user); 

        // Show infowindow user marker click 
        google.maps.event.addListener(user, 'click', function() { 
         infowindow.open(null, null); 
         infowindow.setContent('<b>Here you are :</b><br />' + results[0].formatted_address); 
         infowindow.open(map, user); 
         map.setZoom(15); 
         map.setCenter("latLng"); 
        }); 

        // Hide infowindow map click 
        google.maps.event.addListener(map, 'click', function() { 
         if (infowindow) { 
          infowindow.open(null, null); 
         } 
        }); 
       } else { 
        alert('Cannot determine address at this location.'); 
       } 
      } else { 
       alert('Geocoder failed due to: ' + status); 
      } 
     }); 

    }, function() { 
     handleNoGeolocation(true); 
    }); 
} else { 
    // Browser doesn't support Geolocation 
    handleNoGeolocation(false); 
} 

Если вы могли бы посмотреть, это было бы здорово.

+0

Какие маркеры демонстрируют эту проблему? Всегда ли это одни и те же? Если да, можете ли вы их идентифицировать? Вы только разместили код для функции геолокации, это проблема где? – geocodezip

+0

Кажется, что поведение случайное. Иногда маркерные значки не отображаются правильно. После изменения 'map.setZoom (15); map.setCenter (this.position); 'to' map.setCenter (this.position); map.setZoom (15); 'Я не могу повторить проблему (функция' showQrcodes() '. И я не знаю, почему это так. –

+0

@geocodezip: проблема происходит со всеми из них ... вот геолокация, и я использую тот же код для других :) – steasy

ответ

1

Когда setCenter() не работает, информация не открывается. Это связано с асинхронным характером вызова geocoder.geocode(), который используется в функции showQrcodes. Функция setZoom() и setCenter() и открытие инфоиндукса должны быть вызваны в функции успеха geocode().

Я изменил for цикл в showQrcodes() функция:

for (var i = 0; i <= locationArray.length - 1; i++) { 
    coords = new google.maps.LatLng(locationArray[i][1], locationArray[i][2]); 

    (function(i) { 

    var marker = new google.maps.Marker({ 
     position: coords, 
     title: locationArray[i][0], 
     map: map, 
     icon: iconQr 
    }); 
    markers.push(marker); 

    google.maps.event.addListener(marker, 'click', function() { 
     console.log('showQrcodes marker onclick event listener'); 
     console.log(marker); 

     infowindow.open(null, null); 
     title = this.title; 

     geocoder.geocode({ 
      latLng: this.position 
     }, function (responses) { 
      if (responses && responses.length > 0) { 
       infowindow.setContent('<b>' + title + ' : </b><br />' + responses[0].formatted_address); 
       map.setZoom(15); 
       map.setCenter(marker.getPosition()); 
       infowindow.open(map, marker); 
      } else { 
       infowindow.setContent('Cannot determine address at this location.'); 
      } 
     }); 

    }); 

    })(i); 

} 
+0

Ваш код работает отлично, спасибо вам большое за вашу помощь! – steasy

+0

Я не могу голосовать из-за моей нехватки репутации, но я даю вам +10 000 :) – steasy

+0

@steasy :-) если этот ответ будет работать для вас, пожалуйста, примите его. Благодарю. –

Смежные вопросы