Отцентровать Google Maps Api

Статус
Закрыто для дальнейших ответов.

Chris

Well-Known Member
Регистрация
23.04.2012
Сообщения
68
Всем добрый вечер. Столкнулся с проблемой google maps, не центрует координаты.
http://test.kvadratspb.ru/catalog/novostroyki_peterburga/zhk_yutteri -При нажатии кнопки "показать на карте" всплывает (lightbox) карта, но маркер ее расположен в верхнем левом углу.
Плясал с бубном возле монитора, но не помогло. Может кто сталкивался с такой проблемой?
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 137
Координатами не пробовал играться?
 

Chris

Well-Known Member
Регистрация
23.04.2012
Сообщения
68
BaNru сказал(а):
Координатами не пробовал играться?
Нельзя, т.к. координаты берутся верные.
Единственное, нашел слабое место.
http://immk.ru/glossary/kvadrat/kartochka-novostroiki.html - проделать то же действие с картой. Обратите внимание, что карта центрируется при нажатии f12. Получается проблема в resize. Но опять же решить ее не могу =(
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 137
Ты видно не понял.
Ты же запрос делаешь какой-то на гугл?

Вот у тебя же нашел

new google.maps.LatLng(59.965051,30.288821);
Это и есть координаты
Попробуй поиграться с последними цифрами, пока не будет нужного результата.
Там кстати можно сделать более точно позиционирование, добавив ещё циферки в конце.
Код:
59.9651799,30.2887566
 

Chris

Well-Known Member
Регистрация
23.04.2012
Сообщения
68
Да, спасибо, знаю про координаты. Я понял, что Вы имели в виду, пробовал это в самом начале, НО адреса буду задавать не я, а чтобы отцентровать, надо двигать координаты (карту) в нижний правый край) Думаю заказчик не захочет этого делать. Про цифры в конце это зум, у меня он отдельным параметром идет.
У меня на данный момент проблема с resize. Как-то браузер обновить, перед открытием lightbox
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 137
Я сомневаюсь что это поможет, но всё же попробовать можно
Загрузка карты

<body onload="initialize()">
В процессе визуализации HTML-страницы формируется модель объекта документа (DOM), принимаются все внешние изображения и скрипты, и встраиваются в объект document. Чтобы карта помещалась на страницу только после полной загрузки последней, достаточно выполнить функцию, создающую объект Map незамедлительно после получения события onload элементом <body> HTML-страницы. Такой прием позволяет избежать непредсказуемого поведения и расширить возможности управления процессом и моментом построения карты.
Попробуй вынести скрипт на отдельную страницу, на пустую.
Попробуй загрузить карты на пустую страницу, а не в лайтбокс.

Есть вероятность, что это бага новых карт, они же недавно обновились.

Либо жди у моря погоды спецов в этой сфере.
Ещё вариант написать в поддержку.

О, мне кажется или ты реально накосячил?

jQuery(function($){

var $overlay = $('.overlay'),
resize = true,
map;

function initialize() {
var myLatlng = new google.maps.LatLng(59.965051,30.288821);
var mapOptions = {
zoom:15,
center: myLatlng
}
map = new google.maps.Map(document.getElementById('map-canvas'),
mapOptions);

// To add the marker to the map, use the 'map' property
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title:"Hello World!"
});

}
Зачем обернул в jQ функцию?

$('#show').click(function(){

$overlay.show();

if ( resize ){
google.maps.event.trigger(map, 'resize');
resize = false;
}


});
Зачем делать ресайз? Не проще её после вызывать?
 

Chris

Well-Known Member
Регистрация
23.04.2012
Сообщения
68
Спасибо за ответ!
body имеет onload.
Загружал карты до этого без lightbox, все в порядке было.
На счет ресайза, я его удалил в прошлый раз, он был безполезен)
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 137
Странно, а я не вижу в коде.
Или ты подразумеваешь вот эту строку?

google.maps.event.addDomListener(window, 'load', initialize);
Попробуй инициализировать карты initialize() именно после загрузки overlay, где-то внутри вызова $overlay.show()
 

Chris

Well-Known Member
Регистрация
23.04.2012
Сообщения
68
<body onload="initialize()"> - у меня так прописано.


BaNru сказал(а):
Попробуй инициализировать карты initialize() именно после загрузки overlay, где-то внутри вызова $overlay.show()
двигая строку google.maps.event.addDomListener(window, 'load', initialize); ничего не меняется, т.е совсем ничего. Если только строку из функции выношу, либо в функцию с $overlay.show() то скрипт перестает работать
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 137
Перечитай мои сообщения выше ещё раз и ищи различия в твоём (страница контактов) и моём коде
http://demo.g63.ru/other/googlemaps.html

Я сделал, как и предлагал выше - инициализацию после show (в callback)

$overlay.show( 0, function() {
initialize();
});
Данный метод хорош, если на странице будет только одна карта и она будет вызываться редко

Если на странице много карт (все они показываются в одном физическом контейнере) и часто просматриваются, то можно двигать координаты только.

$overlay.show( 0, function() {
map.setCenter(new google.maps.LatLng(59.965051,30.288821));
});
jQ обертку тоже убрал, она мешается.
 

Chris

Well-Known Member
Регистрация
23.04.2012
Сообщения
68
Благодарю от души, все работает!!!
Про обертку в jq сначала не понял)
 
Статус
Закрыто для дальнейших ответов.
Верх Низ