如何使用 JavaScript API 移动 Google 地图中心位置?

问题描述 投票:0回答:2

我想将地图的中心移动到新的坐标。这是我的地图代码:

function initialize() {
    var mapOptions = {
      center: new google.maps.LatLng(0, 0),
      zoom: 4,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("map_canvas"),
        mapOptions);
  }
  function moveToLocation(lat, lng){
     var center = new google.maps.LatLng(lat, lng);
     var map = document.getElementById("map_canvas");
     map.panTo(center);
     
  }

moveToLocation
函数确实被调用,但地图没有重新居中。知道我错过了什么吗?

javascript maps
2个回答
85
投票

你的问题是,在

moveToLocation
中,你使用
document.getElementById
来尝试获取
Map
对象,但这只会给你一个
HTMLDivElement
,而不是你期望的
google.maps.Map
对象。所以你的变量
map
没有
panTo
函数,这就是它不起作用的原因。您需要的是将
map
变量隐藏在某个地方,它应该按计划工作。您可以像这样使用全局变量:

window.map = undefined;      // global variable

function initialize() {
  const mapOptions = {
    center: new google.maps.LatLng(0, 0),
    zoom: 4,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  // assigning to global variable:
  window.map = new google.maps.Map(
    document.getElementById("map_canvas"), mapOptions);
}

function moveToLocation(lat, lng){
  const center = new google.maps.LatLng(lat, lng);
  // using global variable:
  window.map.panTo(center);
}

在此处查看工作 jsFiddle:http://jsfiddle.net/fqt7L/1/


1
投票

动态显示Google Maps API,获取数据库中的数据以显示地点、纬度、经度并使用AngularJS 在中心显示地图标记。由 Sureshchan 完成...

$(function() {
    $http.get('school/transport/scroute/viewRoute?scRouteId=' + scRouteId).success(function(data) {
        console.log(data);

        for (var i = 0; i < data.viewRoute.length; i++) {
            $scope.view = [];
            $scope.view.push(data.viewRoute[i].stoppingName, data.viewRoute[i].latitude, data.viewRoute[i].longitude);
            $scope.locData.push($scope.view);
        }            

        var locations = $scope.locData;
        var map = new google.maps.Map(document.getElementById('map'), {                    
            mapTypeId : google.maps.MapTypeId.ROADMAP
        });
        var infowindow = new google.maps.InfoWindow();
        var bounds = new google.maps.LatLngBounds();
        var marker, j;

        for (j = 0; j < locations.length; j++) {
            marker = new google.maps.Marker({
                position : new google.maps.LatLng(locations[j][1], locations[j][2]),
                map : map
            });

            google.maps.event.addListener(marker, 'click', (function(marker, j) {
                bounds.extend(marker.position);
                return function() {
                    infowindow.setContent(locations[j][0]); 
                    infowindow.open(map, marker);
                    map.setZoom(map.getZoom() + 1);
                    map.setCenter(marker.getPosition());
                }
            })(marker, j));
        };
        map.fitBounds(bounds);
    });
});
© www.soinside.com 2019 - 2024. All rights reserved.