Карты Google PanTo OnClick - PullRequest
12 голосов
/ 31 мая 2011

Я пытаюсь панорамировать область на карте по клику.Скрипт не работает и перезагрузка страницы.Возможно, кто-то может увидеть проблему.

Моя функция

function clickroute(lati,long) {

       map = google.maps.Map(document.getElementById("map_canvas"));
      map.panTo(lati,long)
  }

А остальные

var directionDisplay;
  var directionsService = new google.maps.DirectionsService();
  var map;

  function initialize() {
      geocoder = new google.maps.Geocoder();
    directionsDisplay = new google.maps.DirectionsRenderer();
    var chicago = new google.maps.LatLng(41.850033, -87.6500523);
    var myOptions = {
      zoom:10,
      mapTypeId: google.maps.MapTypeId.ROADMAP,
      center: chicago
    }
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

    var address = 'virginia water';
    geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        map.setCenter(results[0].geometry.location);
        var marker = new google.maps.Marker({
            map: map, 
            position: results[0].geometry.location
        });
      } 
    });
    directionsDisplay.setMap(map);
  }

  function calcRoute() {
    var start = document.getElementById("start").value;
    var end = document.getElementById("end").value;
    var request = {
        origin:start, 
        destination:end,
        travelMode: google.maps.DirectionsTravelMode.DRIVING
    };
    directionsService.route(request, function(response, status) {
      if (status == google.maps.DirectionsStatus.OK) {
        directionsDisplay.setDirections(response);
      }
    });
  }

И мое событие

<a href="" onclick="clickroute(51.433373, -0.712251)">test</a>

Ответы [ 4 ]

27 голосов
/ 31 мая 2011

Проблема в том, что вы используете map.panTo(latitude,longitude), но API Google Maps использует это: panTo(latLng myLatLng), где latLng - это класс карты Google.

Попробуйте что-то вроде этого (не проверено)

function clickroute(lati,long) {
      var latLng = new google.maps.LatLng(lati, long); //Makes a latlng
      map.panTo(latLng); //Make map global
  }

Смотрите здесь для получения дополнительной информации.

РЕДАКТИРОВАТЬ Как сказал кто-то другой, вы не хотите переделывать новую карту.Может быть, проще сделать его глобальным?

3 голосов
/ 31 мая 2011

PanTo принимает объект LatLng как параметры, а не только координаты.Создайте объект LatLng перед передачей его методу panTo.

function clickroute(lati,long) {
    map.panTo(new google.maps.LatLng(lati,long));
    return false; //this will cancel your navigation
}

Ваша страница перезагрузится, потому что вы не отменяете событие навигации в onClick, которое вы добавили в тег привязки.См. Комментарий в приведенном выше коде.

И, как говорят другие, выньте переменную map из этой функции и сделайте карту глобальной.

2 голосов
/ 13 февраля 2013

Вы также можете установить новый маркер на лету:

   var LatLng = new google.maps.LatLng(lat, lng);
    var marker = new google.maps.Marker({
              content: "<h2>Hier wohne ich!</h2>",
              map: map,position: results[0].geometry.location 
              });
    map.panTo(LatLng);
0 голосов
/ 31 мая 2011

Линия ...

map = google.maps.Map(document.getElementById("map_canvas"));

.. на самом деле пытается создать новую карту внутри #map_canvas Div. Поскольку эта карта уже должна существовать, вам не нужен этот оператор присваивания. Просто звоню

map.panTo(lati,long)

должно работать?

Редактировать: Извините, SSRide360 правильный, который должен быть ...

map.panTo(new google.maps.LatLng(lati, long));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...