Javascript 添加在Google maps API v3中打开信息窗口的链接

Javascript 添加在Google maps API v3中打开信息窗口的链接,javascript,google-maps-api-3,Javascript,Google Maps Api 3,在添加链接时遇到问题,这些链接将在我的谷歌地图上居中并打开一个信息窗口。标记及其信息窗口在地图本身中工作正常 真正的问题是构造一个onclick函数可以正确引用的对象。我的面向对象Javascript知识还不完善,我只是没有看到解决方案 地图是通过一个在页面加载时调用的函数加载的,我有一个单独的函数,在页面中单击href时调用。 代码如下 function addMap(addressesJSON, id){ var addresses = eval('(' + addressesJSO

在添加链接时遇到问题,这些链接将在我的谷歌地图上居中并打开一个信息窗口。标记及其信息窗口在地图本身中工作正常

真正的问题是构造一个onclick函数可以正确引用的对象。我的面向对象Javascript知识还不完善,我只是没有看到解决方案

地图是通过一个在页面加载时调用的函数加载的,我有一个单独的函数,在页面中单击href时调用。 代码如下

function addMap(addressesJSON, id){
    var addresses = eval('(' + addressesJSON + ')');
    var cenLat = 41.677389;
    var cenLng = -72.384294;
    var latLow = 41.4;
    var lngLow = -72.8;
    var latHigh = 41.8;
    var lngHigh = -71.9;
    if (addresses.length){
        for (var i in addresses){
            addresses[i].lat = parseFloat(addresses[i].lat);
            addresses[i].lng = parseFloat(addresses[i].lng);
            if (i == 0){
                latLow = addresses[i].lat;
                latHigh = addresses[i].lat;
                lngLow = addresses[i].lng;
                lngHigh = addresses[i].lng;
            } else {
                if (addresses[i].lat < latLow){
                    latLow = addresses[i].lat;
                }
                if (addresses[i].lat > latHigh){
                    latHigh = addresses[i].lat;
                }
                if (addresses[i].lng < lngLow){
                    lngLow = addresses[i].lng;
                }
                if (addresses[i].lng > lngHigh){
                    lngHigh = addresses[i].lng;
                }
            }
            address = "<span style=\"color: #0000ff\">" + addresses[i].name + "</span><br/>" + addresses[i].address + "<br/>Directions: <a href=\"#\" onClick=\"GPopUp('http://maps.google.com/maps?daddr=" + addresses[i].address + "&f=li&hl=en&ie=UTF8&om=1')\">To</a> - <a href=\"#\" onClick=\"popUp('http://maps.google.com/maps?saddr=" + addresses[i].address + "&f=li&hl=en&ie=UTF8&om=1')\">From</a>";
            addresses[i].address = address;
        }
        cenLat = (latLow + latHigh) / 2;
        cenLng = (lngLow + lngHigh) / 2;
    }

    var mapOptions = {
        center: new google.maps.LatLng(cenLat, cenLng),
        zoom: 12,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    // Display a map on the page
    var map = new google.maps.Map(document.getElementById(id), mapOptions);
    var bounds = new google.maps.LatLngBounds();
    var infowindow =  new google.maps.InfoWindow();

    for (var i in addresses){
        var letter = addresses[i].letter;
        var data = addresses[i].address;
        var myLatlng = new google.maps.LatLng(addresses[i].lat, addresses[i].lng);

        var latlng = new google.maps.LatLng(addresses[i].lat, addresses[i].lng);
        bounds.extend(latlng);

        var marker = new google.maps.Marker({
            position: myLatlng,
            map: map,
            title: addresses[i].name,
            icon: "http://maps.google.com/mapfiles/marker" + letter + ".png"
        });

        (function (marker, data) {
            google.maps.event.addListener(marker, "click", function () {
                // Center on marker
                map.setCenter(marker.getPosition());
                // Set the data for the info window
                infowindow.setContent(data);
                // show the infowindow
                infowindow.open(map, marker);
            });
        })(marker, data);
    }
    map.fitBounds(bounds);
}

如果您能提供有关如何构建标记对象数组并让我的移动中心函数看到它的任何帮助,我们将不胜感激。

看起来您只需要将这一行添加到代码中:

markers[letter] = marker;
并更改您的功能:

function moveCenter(lat, lng, letter){
    google.maps.event.trigger(markers[letter], "click");
}
(确保标记数组在全局范围内)

markers=[];
函数addMap(addressjson,id){
var addresses=eval('('+addressesJSON+'));
var cenLat=41.677389;
var cenLng=-72.384294;
var latLow=41.4;
var lngLow=-72.8;
var Lathhigh=41.8;
var lngHigh=-71.9;
if(地址.长度){
for(地址中的变量i){
地址[i].lat=parseFloat(地址[i].lat);
地址[i].lng=parseFloat(地址[i].lng);
如果(i==0){
latLow=地址[i]。lat;
LATHHIGH=地址[i]。lat;
lngLow=地址[i].lng;
lngHigh=地址[i].lng;
}否则{
if(地址[i].latlatHigh){
LATHHIGH=地址[i]。lat;
}
if(地址[i].lnglngHigh){
lngHigh=地址[i].lng;
}
}
地址=”+地址[i]。名称+“
”+地址[i]。地址+”
方向:-”; 地址[i]。地址=地址; } cenLat=(拉低+拉高)/2; cenLng=(发光+发光)/2; } 变量映射选项={ 中心:新google.maps.LatLng(cenLat,cenLng), 缩放:12, mapTypeId:google.maps.mapTypeId.ROADMAP }; //在页面上显示地图 var map=new google.maps.map(document.getElementById(id),mapOptions); var bounds=new google.maps.LatLngBounds(); var infowindow=new google.maps.infowindow(); for(地址中的变量i){ var字母=地址[i]。字母; var data=地址[i]。地址; var mylatng=new google.maps.LatLng(地址[i].lat,地址[i].lng); var latlng=new google.maps.latlng(地址[i].lat,地址[i].lng); 边界扩展(latlng); var marker=new google.maps.marker({ 职位:myLatlng, 地图:地图, 标题:地址[i]。姓名, 图标:“http://maps.google.com/mapfiles/marker“+字母+”.png” }); 记号笔[字母]=记号笔; (功能(标记、数据){ google.maps.event.addListener(标记“单击”,函数(){ //以记号笔为中心 map.setCenter(marker.getPosition()); //设置信息窗口的数据 infowindow.setContent(数据); //显示信息窗口 信息窗口。打开(地图、标记); }); })(标记、数据); } 映射边界(bounds); }
看起来您只需要将这一行添加到代码中:

markers[letter] = marker;
并更改您的功能:

function moveCenter(lat, lng, letter){
    google.maps.event.trigger(markers[letter], "click");
}
(确保标记数组在全局范围内)

markers=[];
函数addMap(addressjson,id){
var addresses=eval('('+addressesJSON+'));
var cenLat=41.677389;
var cenLng=-72.384294;
var latLow=41.4;
var lngLow=-72.8;
var Lathhigh=41.8;
var lngHigh=-71.9;
if(地址.长度){
for(地址中的变量i){
地址[i].lat=parseFloat(地址[i].lat);
地址[i].lng=parseFloat(地址[i].lng);
如果(i==0){
latLow=地址[i]。lat;
LATHHIGH=地址[i]。lat;
lngLow=地址[i].lng;
lngHigh=地址[i].lng;
}否则{
if(地址[i].latlatHigh){
LATHHIGH=地址[i]。lat;
}
if(地址[i].lnglngHigh){
lngHigh=地址[i].lng;
}
}
地址=”+地址[i]。名称+“
”+地址[i]。地址+”
方向:-”; 地址[i]。地址=地址; } cenLat=(拉低+拉高)/2; cenLng=(发光+发光)/2; } 变量映射选项={ 中心:新google.maps.LatLng(cenLat,cenLng), 缩放:12, mapTypeId:google.maps.mapTypeId.ROADMAP }; //在页面上显示地图 var map=new google.maps.map(document.getElementById(id),mapOptions); var bounds=new google.maps.LatLngBounds(); var infowindow=new google.maps.infowindow(); for(地址中的变量i){ var字母=地址[i]。字母; var data=地址[i]。地址; var mylatng=new google.maps.LatLng(地址[i].lat,地址[i].lng); var latlng=new google.maps.latlng(地址[i].lat,地址[i].lng); 边界扩展(latlng); var marker=new google.maps.marker({ 职位:myLatlng, 地图:地图, 标题:地址[i]。姓名, 图标:“