2012-05-08 5 views
1

Только что началось преобразование наших карт из V2 API в v3.Сохранение InfoWindow при просмотре карты в

Пока еще одна проблема в том, что при открытии InfoWindow и увеличении карты InfoWindow будет перемещаться с карты и, в конечном итоге, не будет видимой, это отличается от поведения, чем в V2. В V2 InfoWindow остается в поле зрения все время.

V2 карта: http://www.stroud.gov.uk/docs/housing/tenant_map_v2.asp

V3 карта: http://www.stroud.gov.uk/docs/housing/tenant_map_v3.asp

Просто нажмите на любой маркер, чтобы открыть его InfoWindow, то масштаб карты в с нормальным контролем масштабирования.

Есть ли способ сохранить поведение, как на карте V2?

Спасибо, Майк


Я придумал решение, которое работает. URL, как указано выше, но использовать tenant_map.asp

var currentInfoWindow = null; // new global scope variable to hold current open infoWindow 

В google.maps.event.addListener (newMarker "нажмите кнопку" Функция Я добавил:

currentInfoWindow = this; 

Добавить zoom_changed слушателя:

google.maps.event.addListener(theMap, "zoom_changed", function() { 
    if (currentInfoWindow != null) { 
     infoWindow.open(theMap, currentInfoWindow); 
    } 
}); 

и InfoWindow closeclick слушатель:

google.maps.event.addListener(infoWindow, "closeclick", function() { 
    currentInfoWindow = null; 
}); 

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

Это не выглядит так хорошо, как карта V2, поэтому, если у кого-то еще есть лучшее решение, отправьте сообщение.

ответ

0

Мне кажется, потому что карта V2 при масштабировании масштабируется непосредственно на последний выделенный маркер. V3 просто масштабируется везде, где карта в настоящее время центрирована. Как насчет того, чтобы обработчик события щелчка маркера перецентрировал карту на этом маркере?

+0

Привет, Дункан, Спасибо за эту идею, он работает хорошо. Никогда не думал о том, чтобы попробовать это сам. Я дам оба метода (и оставив ему стандартную карту V3) и посмотрю, что думают пользователи. –

0

Функция масштабирования, которая хранит информационное окно на месте. Я использую собственные средства управления масштабированием и звоню zoomBy(1), чтобы увеличить один уровень или zoomBy(-2), чтобы уменьшить два уровня.

var helperOverlay = new google.maps.OverlayView(); 
helperOverlay.draw = function(){}; 
helperOverlay.setMap(map); 

function zoomBy(delta) { 
    var newZoom = map.getZoom() + delta; 
    if (newZoom < 0) return; 
    var projection = helperOverlay.getProjection(); 
    if (projection) { // projection may be undefined (if the overlay is not ready I guess) 
    var center = projection.fromLatLngToContainerPixel(map.getCenter()); 
    var focus = projection.fromLatLngToContainerPixel(infoWindow.getPosition()); 
    for (var i = Math.abs(delta); i > 0; i--) 
     center = (delta > 0) ? 
     new google.maps.Point((center.x + focus.x)/2, (center.y + focus.y)/2) : 
     new google.maps.Point(center.x * 2 - focus.x, center.y * 2 - focus.y); 
    map.setCenter(projection.fromContainerPixelToLatLng(center)); 
    } 
    map.setZoom(newZoom); 
} 

Математика взята из this scroll wheel zoom implementation. Было бы неплохо, если бы мы могли просто вызвать встроенную функцию масштабирования колесика прокрутки, проходящую в позиции информационного окна.

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