У меня есть следующий код:
<?php if($_GET['postcode']){ ?> //alert(<?php echo $_GET['postcode'];?>) <?php }?> function initialize() { var mapOptions = { zoom: 6, center: new google.maps.LatLng("<?php echo $_GET['postcode'];?>"), mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = new google.maps.Map(document.getElementById('map_canvas'),mapOptions); map.setTilt(45); var addressArray = new Array("<?php echo $_GET['postcode'];?>"); var geocoder = new google.maps.Geocoder(); var markerBounds = new google.maps.LatLngBounds(); for (var i = 0; i < addressArray.length; i++) { geocoder.geocode( { 'address': addressArray[i]}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { var contentString = '<div id="content">'+ '<div id="siteNotice">'+ '</div>'+ '<h4 id="firstHeading" class="firstHeading">HELLO</h4>'+ '<div id="bodyContent">'+ '<p><b>Hello!!</b>' + <?php echo $_GET["order_id"];?> + '</p>'+ '</div>'+ '</div>'; var infowindow = new google.maps.InfoWindow({ content: contentString }); var marker = new google.maps.Marker({ map: map, title:"Order Number", position: results[0].geometry.location }); markerBounds.extend(results[0].geometry.location); map.fitBounds(markerBounds); google.maps.event.addListener(marker, 'click', function() { infowindow.open(map,marker); }); } else { alert("Geocode was not successful for the following reason: " + status); } }); } } function loadScript() { var script = document.createElement('script'); script.type = 'text/javascript'; script.src = 'https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&' + 'callback=initialize'; document.body.appendChild(script); } window.onload = loadScript; </script>
По какой-то причине, когда карта загружается, уровень масштабирования заполнен, поэтому он масштабируется прямо в маркер. Я попытался настроить уровень масштабирования в секции инициализации, но у меня не было радости. Я предполагаю, что это имеет какое-то отношение к границам маркера. Кто-нибудь знает, как настроить масштаб так, чтобы он не был полностью увеличен на маркере?
по какой-то причине, когда карта загружается, уровень масштабирования заполнен, поэтому он масштабируется прямо в маркер.
Если у вас есть объект bounds с одним LatLng в нем, он должен масштабироваться как можно дальше. Из документации:
fitBounds (bounds: LatLngBounds) Нет Устанавливает область просмотра, чтобы содержать заданные границы.
Если у вас есть только один маркер, не используйте fitBounds, используйте .setCenter (в координатах маркера, .setZoom (до нужного уровня масштабирования).
Если ваш код должен обрабатывать оба случая (один маркер или несколько маркеров), подсчитывайте маркеры, добавляемые к границам, если этот номер используется один раз .setCenter / .setZoom, если он больше одного, используйте .fitBounds.