2010-10-01 2 views
57

Иногда карта google частично поставляется с другой областью, выделенной серым цветом. Есть один улов, если мы запустим Firebug, изображения попадают в ту серой области. Не знаю, почему это происходит. Кто-нибудь когда-либо испытал это и нашел решение, пожалуйста, поделитесь.Карта Google поставляется частично, вместо изображений с сервера google появляется серая область.

+1

Итак, что именно вы делаете, чтобы вызвать такое поведение? – slugster

+0

Это не соответствует, бывает только некоторое время. используя v2 карт google api. это помогает ... – Vishwanath

+0

Как предложено в [этом комментарии] (http://stackoverflow.com/a/9246072/877353), размещение размера в пикселе в контейнере карты должно решить эту проблему. Это сделало для меня –

ответ

35

Эта ошибка может возникнуть, если вы изменения размеров изображения карты DIV. После изменения размера попробуйте вызвать функцию gmap.checkResize().

+14

В V3 checkResize обесценивается. Решения для V3 можно найти по адресу http://blog.codebusters.pl/en/entry/google-maps-in-hidden-div – wooncherk

+1

yay плагин для сайта –

+0

Из комментария: 'google.maps.event.trigger ('', "resize") ' –

78

Если вы используете v3 попробовать

google.maps.event.trigger(map, "resize"); 

Также посмотрите на here

+1

Большое спасибо за это - мне это помогло! – Eamorr

+0

... и снова. Googled 'google maps api gray space' и получил эту страницу. Потрясающие. В моем случае мой объект карты был создан внутри другого объекта, а не глобально, поэтому убедитесь, что «map» относится к правильному объекту! –

+1

Спасибо, что все еще работает как шарм в 2013 году! –

7

Привет, если вы используете переключатель в DIV с контейнером карты вы звоните resizeMap в функции

associated with the trigger: 
     $(".trigger").click(function(){ 
     $(".panel").toggle("fast"); 
     $(this).toggleClass("active"); 
     resizeMap(); 
     return false; 

затем resizeMap(); как этот

function resizeMap() 
{ 
google.maps.event.trigger(map,'resize'); 
map.setZoom(map.getZoom()); 
} 

не забудьте установить переменную карту как глобальные;) приветствий

+0

хорошая работа - это работа, спасибо –

6

Я нашел простое решение для частично загруженной карты Google. Обычно это вызвано вызовом onLoad(), когда остальная часть страницы (включая ваш элемент карты) не полностью загружена. Это вызывает частичную загрузку карты. Простым способом решения этой проблемы является изменение действия тега body onLoad.

старый путь:

onload="initialize()" 

Новый способ:

onLoad="setTimeout('initialize()', 2000);" 

Это ждет 2 секунды до того, как Google Javascript доступы атрибуты правильного размера. Также попробуйте очистить кеш браузера перед его попыткой; иногда застревает там :)

Это мой лучший Javascript часть в случае, если Вам интересно (именно так, как описано в Google документации, но потому, что я называю Latitude и Longitude от PHP переменных, отсюда PHP фрагменты.

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript"> 
function initialize() { 
    var myOptions = { 
     center: new google.maps.LatLng(<?php echo $my_latitude; ?> , <?php echo $my_longitude; ?>), 
     zoom: 14, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    var map = new google.maps.Map(document.getElementById("map_canvas"), 
     myOptions); 

    var point = new google.maps.LatLng(<?php echo $my_latitude; ?> , <?php echo $my_longitude; ?>); 
    var marker = new google.maps.Marker({ position:point, map:map })  
} 
</script> 
+0

Ты генис! Это должен быть главный ответ. – Lan

4

Я просто хочу добавить к этому обсуждению, что у меня тоже была проблема с серыми полосками, и это не было той же проблемой, что мне нужно было использовать функцию gmap.Resize, но она была в моем css. имеет

img { 
max-width:50% 
} 

, поэтому, когда я установил это в своем файле css

#map-canvas { 
max-width:none; 
} 

Проблема исчезла! Я просмотрел Google, но не смог найти ответ.

1

этот стиль решить мою проблему

#map_canvas img { max-width: none !important; } 

Это заставляет браузер, чтобы позволить карту, чтобы быть столь же широко, как это должно быть - !important по существу означает «не перезаписывать этот стиль».

0

Я решил это так, моя проблема была в устройстве вращения, это решение отлично работает:

$scope.orientation = function(){ 
      var supportsOrientationChange = "onorientationchange" in window, 
       orientationEvent = supportsOrientationChange ? "orientationchange" : "resize"; 
      window.addEventListener(orientationEvent, function() { 
       $interval(function(){ 
        google.maps.event.trigger(map, 'resize'); 
       },100); 
      }); 
     }; 
$scope.orientation(); 
0

я этот вопрос всплывал во время работы на других частях моего сайта, так что я не заметил это правильно, когда оно началось. После прохождения каждого изменения я сделал за последний час, я наткнулся на виновник:

div 
{ 
    [... other css ...] 
    overflow: auto; 
} 

в моем CSS. Я удалил это и вуаля, он работает. (Конечно, я мог бы просто изменить атрибут переполнения на моем div div, но мне нужно только переполнение: auto на пару div.) Я уверен, что есть веская причина, почему, но я довольно новичок в этом, поэтому я не могу знать. В любом случае я надеюсь, что это может помочь кому-то.

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