Обрезанное окно InfoWindow при использовании карт Google Maps v3 - PullRequest
0 голосов
/ 16 декабря 2011

В GMap APi v3 я использую службу указателей для создания маршрута для пользователя, но после того, как маршрут отображается на карте, целевое информационное окно, которое я разместил, обрезается, поскольку карта центрируется на маршруте, а не наtarget.

Как я могу сказать GM:

  1. Автоматическая фокусировка (или центр) на информационном окне вместо маршрута
  2. Показывать информационное окно втаким образом, чтобы он не был обрезан (например: с помощью стрелки всплывающей подсказки в правом верхнем углу информационного окна вместо нижнего левого, что приводит к появлению окна в верхнем правом углу цели маршрута)

Ответы [ 2 ]

0 голосов
/ 31 января 2018

Это старый вопрос, но вот решение без setTimeout. Вы можете использовать событие плитку:

var directionsService = new google.maps.DirectionsService();
var directionsDisplay = new google.maps.DirectionsRenderer();
directionsDisplay.setMap(gmap);

directionsService.route(request, function(result, status) {
    if (status === 'OK') {
        directionsDisplay.setDirections(result);
        var listener = gmap.addListener('tilesloaded', function(){

            // add your centering code here
            // or open your infowindow here and maps will auto center like expected

            google.maps.event.removeListener(listener);

        });
    }else{
        console.warn('Error retreiving directions');
    }
});
0 голосов
/ 17 декабря 2011

Мне удалось это сделать с помощью .setCenter () в обратном вызове directionsService (после получения правильного ответа). Однако это работает только при использовании тайм-аута. Возможно, это не самое чистое решение, но это единственное, что мне доступно на данный момент.

/* _x & _y are passed as coordinates */
var _latLng=new google.maps.LatLng(_x,_y);
directionsService.route(request, function(response, status) {
    if (status == google.maps.DirectionsStatus.OK) {
        directionsRenderer.setDirections(response);
        window.setTimeout(function(){
            gmap.setCenter(_lagLng);
        }, 500);
    }
}

Похоже, что если вы вызываете .setCenter () слишком рано, gmap все еще создается и после завершения центрируется на маршруте - переопределяя вашу последнюю команду на .setCenter () - однако, используя тайм-аут в качестве обходного пути, вызов выполняется после построения карты и рендеринга маршрута.

...