Google地图 - 标记点击的中心地图

时间:2013-08-28 10:11:48

标签: javascript google-maps google-maps-api-3

我有以下代码用于在谷歌地图上放置几个标记。

我现在想要做的是当用户点击它放大的标记然后将地图居中到标记位置(这是不起作用的位 - 朝向setMarkers函数中代码的末尾)。

有什么想法吗?

var infowindow = null;
var sites = [];
var partsOfStr = [];
var partsOfStr2 = [];
var bounds;

$(document).ready(function () {
    $("select[id*='coordList']").find("option").each(function () {
        partsOfStr = $(this).val().split(',');
        partsOfStr2 = $(this).text().split('^');
        sites.push([partsOfStr2[0], parseFloat(partsOfStr[0]), parseFloat(partsOfStr[1]), partsOfStr[2], partsOfStr2[1], partsOfStr2[2], partsOfStr2[3], partsOfStr[3], partsOfStr[4], partsOfStr[5]]);
    });
    initialize();
});

function initialize() {
    bounds = new google.maps.LatLngBounds();
    var mapOptions = {
        zoom: 6,
        center: new google.maps.LatLng(54.57951, -4.41387),
        scrollwheel: false,
        mapTypeId: google.maps.MapTypeId.HYBRID
    }

    var map = new google.maps.Map(document.getElementById('map'), mapOptions);

    setMarkers(map, sites);

    infowindow = new google.maps.InfoWindow({
        content: "loading..."
    });

    google.maps.event.addListener(infowindow,'closeclick',function(){
        map.setCenter(new google.maps.LatLng(54.57951, -4.41387));
        map.setZoom(6);
    });

}



function setMarkers(map, markers) {

    for (var i = 0; i < markers.length; i++) {
        var sites = markers[i];
        var siteLatLng = new google.maps.LatLng(sites[1], sites[2]);
        var marker = new google.maps.Marker({
            position: siteLatLng,
            map: map,
            title: sites[0],
            html: "<div class='mapDesc'>content here...</div>"
        });

        google.maps.event.addListener(marker, "click", function () {
            infowindow.setContent(this.html);
            infowindow.open(map, this);
            map.setCenter(marker.getPosition()); // NOT WORKING!!!!!!!
            map.setZoom(10);
        });

        bounds.extend(new google.maps.LatLng(sites[1], sites[2]));
        map.fitBounds(bounds);
    }

}

2 个答案:

答案 0 :(得分:15)

标记指向添加的最后一个标记。使用函数闭包或“this”就像你为infowindow所做的那样:

    google.maps.event.addListener(marker, "click", function () {
        infowindow.setContent(this.html);
        infowindow.open(map, this);
        map.setCenter(this.getPosition()); 
        map.setZoom(10);
    });

答案 1 :(得分:1)

google.maps.event.addListener(marker, "click", function (evt) {
            infowindow.setContent(this.html);
            infowindow.open(map, this);
            map.setCenter(evt.latLng); 
            map.setZoom(10);
        });

将在我自己的应用程序中运行