Подтвердить что ты не робот

Карты Google не полностью отображаются на странице?

У меня есть карты google на моей странице с панелью поиска, которую я создал, который может отображаться и скрываться по своему усмотрению. Он охватывает как позволяет сказать 200 пикселей карты на стороне. Дело в том, что когда я изменяю размер моей карты или так, область, в которой перекрывается панель, не передается, поэтому карта по какой-то причине не отображается.

Откроется ссылка

В поле "Тип коробки" можно указать OMDB, который является кодом icoo для аэропорта и нажмите "Enter".

Результаты отображаются, и вы видите панель. Теперь нажмите на ссылку полного экрана, а затем перейдите на вкладку аэропортов, чтобы панель исчезла - теперь вы видите, что часть карты вообще не отображается... Мне нужно перетащить карту, и это лишь частично отображает эта область. Как я могу это исправить?

FYI Я запустил его в Google Chrome, Firefox и IE8 в Windows XP. Есть ли способ, как принудительное завершение рендеринга карты или так? Это довольно неустойчивая проблема, и может ли это быть связано с моим кодом или это проблема хозяина? Или Google просто не любит меня?: (

РЕДАКТИРОВАТЬ: Посмотрите на большой уродливый патч сбоку. Его незагруженная область, где должна была быть отображена карта. Никакое количество масштабирования и панорамирования не помогает: (

4b9b3361

Ответ 1

Я не могу воспроизвести проблему, которая у вас есть, но она похожа на другую проблему, которую я видел с картами google.

Похоже, вы можете столкнуться с тем, как карты Google определяют, какие плитки находятся в поле зрения. Он вычисляет это только один раз, когда карта загружается в div в первый раз, и если div растет, тогда будет недостаточно рисунка карты. К счастью, с этим легко справиться. в любое время, когда контейнер может быть изменен, используйте метод checkResize() на экземпляре карты, а область отсечения будет пересчитана из текущего размера контейнера.

Ответ 2

Да, вы ДОЛЖНЫ предоставить реальную высоту и ширину пикселя контейнера DIV. Это действительно подробно описано в API Google.

Используя что-то вроде этого:

<div id="map_canvas" style="width:500px;height:500px;"></div>

вместо

<div id="map_canvas"></div>

вы будете дома бесплатно!

Ответ 3

Насколько я вижу, он отлично работает на OS X 10.6.2 в Google Chrome.

http://i33.tinypic.com/sfe3ah.png

Только проблема заключается в том, что аэропорт Копенгагена нигде не находится рядом с вашим выражением. И LAX находится посреди океана, -)

Edit:
Я вижу ваш снимок экрана, и мне кажется, что Google Maps не отображает часть карты, которая была покрыта областью поиска и поиска, а затем рендеринг не запускается правильно при скрытии области поиска.

Мне не удалось найти достойный триггер рендеринга в API Карт Google, но я думаю, вы должны попробовать что-то вроде программного масштабирования и перемещения или перемещения центра карты где-то в другом месте и обратно, чтобы, возможно, принудительно повторите рендеринг карты.

В качестве альтернативы вы можете попытаться вручную запустить некоторые из событий, которые, по вашему мнению, могут привести к повторной передаче карты, например google.maps.event.trigger(map, 'resize').

Я знаю, что эти предложения кажутся ужасным способом взлома, чтобы заставить его работать, и я очень не уверен, что это сработает, но это мой лучший снимок; -)

Ответ 4

У меня возникла такая же проблема, когда я попытался загрузить карту google в диалоговом окне. Это похоже на то, что карта google не была обработана должным образом. поэтому я узнаю ниже решение, которое может решить вашу проблему.

Я вызвал событие изменения размера карты google после диалога инициализации, пожалуйста, проверьте снимок кода.

google.maps.event.trigger(map, 'resize', function () {
    // your callback content
});

Пример:

Я загрузил карту с помощью ajax-вызова, затем инициализировал диалог и, наконец, вызвал событие изменения размера карты google.

$.ajax({
    url:"map.php",
    type:"POST",
    success:function(data){
        $("#inlineEditForm").html(data);

        $('#inlineEditPopUp').dialog('open');
        google.maps.event.trigger(map, 'resize', function () {
            // your callback content
        });
    }
});

Ответ 5

Если вы используете плагин jQuery goMap, вы должны использовать:

google.maps.event.trigger($.goMap.map, 'resize');

Хотя вы должны обернуть это в событие, чтобы оно выполнялось, когда отображается карта. Это как я делаю это в своем коде:

$(document).on('click', '#mapClicker', 'initmap', function() {
   setTimeout(function() {
         google.maps.event.trigger($.goMap.map, 'resize');
      $.goMap.fitBounds();
   }, 100)
});

Ответ 6

В Google Maps V3 вам нужно немного узнать о волшебстве, которое вам нужно: https://developers.google.com/maps/documentation/javascript/reference#Map при событиях

Разработчики должны инициировать это событие на карте при изменении div размер: google.maps.event.trigger(map, 'resize')

Трюк - это знать, когда называть это ситуацией в зависимости от вашего кода. Если вы используете Bootstrap 3 Modals, это прекрасно работает.

$("#modal-map")
    .modal()
    .on("shown.bs.modal", function() {
        google.maps.event.trigger(gmap, 'resize');
    });

Где gmap - созданный вами объект google.maps.Map.

Ответ 7

Я знаю, что этот вопрос немного устарел, но я столкнулся с подобной проблемой. Однако в моем случае я устанавливал карту для загрузки из тела (для полноэкранного эффекта) в пределах iframe.

Как сказал Джей в своем ответе, должна быть указана ширина и высота, которую я еще не сделал.

Я изменил:

<body style="margin:0;">

в

<body style="margin:0;width:100%;height:100%">

и теперь он отлично загружается в Chrome, Firefox и Internet Explorer 10.

Надеюсь, это поможет всем, кто также столкнулся с этой проблемой. Вы должны указать ширина и высота, чтобы он работал с разными клиентами.

Привет

Ответ 8

У меня была та же проблема, и я решил ее просто, изменив ширину содержащего div на "px" вместо "%" (например, width = "700px" вместо "80%" ). Я предполагаю, что Google может сделать более качественный расчет таким образом... Я не гарантирую этого, но это помогло мне

Ответ 9

У меня была эта проблема, и я обнаружил, что единственным решением (в моем случае) было инициирование изменения размера внутри строки после элемента. Я не могу сказать, почему, но я нашел нить, где у кого-то тоже было это решение. (извините, нет ссылок). Моя установка была немного иной; это было из загруженной страницы jQueryMobile, поэтому поздняя инстанцировка может иметь какое-то отношение к моей проблеме. Надеюсь, это поможет кому-то.

<div id="my-map"></div>
<script type="text/javascript">
  $('#my-map').height($("#my-map-container").height());
  $('#my-map').width($("#my-map-container").width());
  google.maps.event.trigger($('#my-map'), 'resize');
</script>

Ответ 10

В моем случае те же проблемы для устройств Mac: Safari 5.1.7 (Os Windows 10 [Извините]) Safari 5.1 (Ipad 1 [Old Sorry]) Safari 10 (Iphone 6 Plus) Здесь мое решение работает для меня: 1) захват ширины браузера detect.min.js 2) измените параметр ширины стиля attr 3) изменить размер карты

/* Of course insert detect.min.js and Jquery in your HTML ;)*/
var user = detect.parse(navigator.userAgent);
var browserFamily=user.browser.family;
var browserVersion=user.browser.version;
if ( browserFamille=="Mobile Safari" || browserVersion.substr(0,3)=="5.1") {
    canvasWidth = $(window).width(),
    $(".macarte").attr("style","width:"+canvasWidth+"px")
    google.maps.event.trigger(map, 'resize');
}
/* browserFamily returns "Mobile Safari" for tablet and mobile devices; "Safari" for desktop devices */

Ответ 11

Я столкнулся с той же проблемой при настройке центра карты вручную. Я решил это с помощью кода ниже:

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

Ответ 12

function initialize(lon,lat) {
var largeLatlng = new google.maps.LatLng(lon,lat);
var largeOptions = {zoom: 18, center: largeLatlng,mapTypeId:     google.maps.MapTypeId.ROADMAP};
var largeMap = new google.maps.Map(document.getElementById("map"), largeOptions);
var largeMarker = new google.maps.Marker({position: largeLatlng, map:largeMap, title:"Cherrytrees"});

google.maps.event.addListenerOnce(largeMap, 'idle', function(){
    google.maps.event.trigger(largeMap, 'resize');
    largeMap.setCenter(largeLatlng);
});
largeMarker.setMap(largeMap);

}