Javascript Bing地图-在图钉上调用单击事件

Javascript Bing地图-在图钉上调用单击事件,javascript,bing-maps,Javascript,Bing Maps,我有以下bing地图: 当在左侧列表中选择一家商店时,地图会自动在该图钉上居中,我现在需要做的是调用该图钉的click()句柄(或显示相关的信息框) 问题是,我正在将PIN推入一个Microsoft.Maps.EntityCollection()调用了dataLayer,因此我无法直接调用map.entities.get(),或者更确切地说,如果我尝试以这种方式调用它,get()不会返回任何内容 注意这段代码底部的zoomMap()函数,我已经注释掉了有问题的行 如何调用click事件 var-

我有以下bing地图:

当在左侧列表中选择一家商店时,地图会自动在该图钉上居中,我现在需要做的是调用该图钉的click()句柄(或显示相关的信息框)

问题是,我正在将PIN推入一个
Microsoft.Maps.EntityCollection()
调用了
dataLayer
,因此我无法直接调用map.entities.get(),或者更确切地说,如果我尝试以这种方式调用它,get()不会返回任何内容

注意这段代码底部的
zoomMap()
函数,我已经注释掉了有问题的行

如何调用click事件

var-map=null;
var dataLayer=null;
var infoboxLayer=null;
函数loadMap(){
//####准备默认位置
var defaultLocation=new Microsoft.Maps.Location(53.6880,-2.6646);
//####准备地图选项
变量映射选项={
凭据:“已删除密钥”,
中心:默认位置,
mapTypeId:Microsoft.Maps.mapTypeId.road,
缩放:7,
enableClickableLogo:false,
enableSearchLogo:false
}
//####初始化主映射控件
map=new Microsoft.Maps.map(document.getElementById('BobElliotMap'),mapOptions);
//####添加数据层
dataLayer=新的Microsoft.Maps.EntityCollection();
map.entities.push(数据层);
//####添加信息框层
infoboxLayer=新的Microsoft.Maps.EntityCollection();
map.entities.push(infoboxLayer);
//####准备信息盒&添加到信息盒层
var infoboxOptions={
宽度:300,
身高:200,
可见:假,
偏移量:新的Microsoft.Maps.Point(0,20)
};
infobox=new Microsoft.Maps.infobox(new Microsoft.Maps.Location(0,0),infoboxOptions);
infoboxLayer.push(infobox);
//####向地图添加数据
牵引销();
}
功能显示信息框(e){
如果(如targetType==“图钉”){
infobox.setOptions({
标题:e.target.title,
描述:e.target.description,
可见:对,
偏移量:新的Microsoft.Maps.Point(0,25)
});
setLocation(e.target.getLocation());
//####用于指定信息框的缓冲区限制必须远离地图的边缘。
var缓冲区=30;
var infoboxOffset=infobox.getOffset();
var infoboxAnchor=infobox.getAnchor();
var infoboxLocation=map.tryLocationToPixel(e.target.getLocation(),Microsoft.Maps.PixelReference.control);
var dx=infoboxLocation.x+infoboxOffset.x-infoboxAnchor.x;
var dy=infoboxLocation.y-25-infoboxAnchor.y;
如果(dy缓冲区){
dx=0;
}否则{
//####从地图的右边缘添加缓冲区。
dx-=缓冲区;
}
}
//####调整地图,使信息框处于视图中
如果(dx!=0 | | dy!=0){
map.setView({
中心偏移:新的Microsoft.Maps.Point(dx,dy),
中心:map.getCenter()
});
}
}
}
函数DrawPins(){
var pin0=新的Microsoft.Maps.Pushpin(新的Microsoft.Maps.Location(53.1913,-2.51945));
pin0.Title=“**旋风分离器循环空调关闭”;
pin0.Description=“74 WEAVER STREET
WINSFORD
柴郡
CW7 4AA

电话:+44606861992”; Microsoft.Maps.Events.addHandler(pin0,'click',displayInfobox); 数据层推送(pin0); var pin1=新的Microsoft.Maps.Pushpin(新的Microsoft.Maps.Location(53.7485,-0.348162)); pin1.Title=“**2轮循环有限-船体”; pin1.Description=“8春天街
赫尔
HU2 8RB

电话:+44482216170
传真:+44828515
网络:”; Microsoft.Maps.Events.addHandler(pin1,'click',displayInfobox); 数据层推送(pin1); } 函数zoomMap(PinID、Lat、Long){ var ZoomLocation=new Microsoft.Maps.Location(Lat,Long); map.setView({ 缩放:13, 中心:动物定位 }); //####这些行不起作用,selectedPin未定义 //var selectedPin=dataLayer.entities.get(PinID); //Microsoft.Maps.Events.invoke(选择PIN,'单击',''); }
由于某种原因,e.target似乎没有进入displayInfobox功能

我只是在2,3个地方对你的代码做了一点修改,使之接近你的目标。请检查以下内容:

var map = null;    
var dataLayer = null;    
var infoboxLayer = null;

function loadMap() {

    //Prep default location    
    var defaultLocation = new Microsoft.Maps.Location(53.6880, -2.6646);

    //Prep Map Options    
    var mapOptions = {
        //credentials: 'KEY_REMOVED',
        center: defaultLocation,
        mapTypeId: Microsoft.Maps.MapTypeId.road,
        zoom: 7,
        enableClickableLogo: false,
        enableSearchLogo: false
    }

    //Initialise the primary map control
    map = new Microsoft.Maps.Map(document.getElementById('BobElliotMap'), mapOptions);

    //Add data layer
    dataLayer = new Microsoft.Maps.EntityCollection();
    map.entities.push(dataLayer);

    // Add infobox layer
    infoboxLayer = new Microsoft.Maps.EntityCollection();
    map.entities.push(infoboxLayer);

    //Prep InfoBox & add to infobox layer
    var infoboxOptions = {
        width: 300,
        height: 200,
        visible: false,
        offset: new Microsoft.Maps.Point(0, 20)
    };

    infobox = new Microsoft.Maps.Infobox(new Microsoft.Maps.Location(0, 0), infoboxOptions);

    infoboxLayer.push(infobox);

    //Add Data to the map
    DrawPins();


    setTimeout(function() {
        //Initial zoom for testing zoomMap function
        var pushpin = dataLayer.get(0);
        var indx = dataLayer.indexOf(pushpin);
        zoomMap(indx, pushpin.getLocation().latitude, pushpin.getLocation().longitude);
    },500);

}


function displayInfobox(e) {

    if ( this.target.id && this.target.id.indexOf("pin") != -1 ) {
        alert("click event fired on pushpin");

        infobox.setOptions({
            title: this.target.Title,
            description: this.target.Description,
            visible: true,
            offset: new Microsoft.Maps.Point(0, 25)
        });

        infobox.setLocation(this.target.getLocation());

        //A buffer limit to use to specify the infobox must be away from the edges of the map.

        var buffer = 30;
        var infoboxOffset = infobox.getOffset();
        var infoboxAnchor = infobox.getAnchor();
        var infoboxLocation = map.tryLocationToPixel(this.target.getLocation(), Microsoft.Maps.PixelReference.control);
        var dx = infoboxLocation.x + infoboxOffset.x - infoboxAnchor.x;
        var dy = infoboxLocation.y - 25 - infoboxAnchor.y;

        if (dy < buffer) { //Infobox overlaps with top of map.
            //#### Offset in opposite direction.
            dy *= -1;
            //#### add buffer from the top edge of the map.
            dy += buffer;
        } else {
            //#### If dy is greater than zero than it does not overlap.
            dy = 0;
        }

        if (dx < buffer) { //Check to see if overlapping with left side of map.
            //#### Offset in opposite direction.
            dx *= -1;
            //#### add a buffer from the left edge of the map.
            dx += buffer;
        } else { //Check to see if overlapping with right side of map.
            dx = map.getWidth() - infoboxLocation.x + infoboxAnchor.x - infobox.getWidth();
            //#### If dx is greater than zero then it does not overlap.
            if (dx > buffer) {
                dx = 0;
            } else {
                //#### add a buffer from the right edge of the map.
                dx -= buffer;
            }
        }

        //#### Adjust the map so infobox is in view
        if (dx != 0 || dy != 0) {
            map.setView({
                centerOffset: new Microsoft.Maps.Point(dx, dy),
                center: map.getCenter()
            });
        }
    }
}


function DrawPins() {

    var pin0 = new Microsoft.Maps.Pushpin(new Microsoft.Maps.Location(53.1913, -2.51945));
    pin0.id = "pin_0";
    pin0.Title = "** CYCLONE CYCLES A/C CLOSED";
    pin0.Description = "74 WEAVER STREET<br />WINSFORD<br />CHESHIRE<br />CW7 4AA<br /><br /><b>Tel:</b> +44606861992";
    Microsoft.Maps.Events.addHandler(pin0, 'click', displayInfobox);
    dataLayer.push(pin0);
    var pin1 = new Microsoft.Maps.Pushpin(new Microsoft.Maps.Location(53.7485, -0.348162));
    pin1.id = "pin_1";
    pin1.Title = "**2 WHEELS CYCLES LIMITED - HULL";
    pin1.Description = "8 SPRING STREET<br />HULL<br />HU2 8RB<br /><br /><b>Tel:</b> +44482216170<br /><b>Fax:</b> +44828515<br /><b>Web:</b> <a href='http://www.2wheelscycles.co.uk' targer='_blank'>www.2wheelscycles.co.uk</a>";
    Microsoft.Maps.Events.addHandler(pin1, 'click', displayInfobox);
    dataLayer.push(pin1);
}


function zoomMap(indx, Lat, Long) {

    var ZoomLocation = new Microsoft.Maps.Location(Lat, Long);

    map.setView({
        zoom: 13,
        center: ZoomLocation
    });

    //#### These are the lines that dont work, selectedPin remains undefined
    //var selectedPin = dataLayer.entities.get(PinID);
    //Microsoft.Maps.Events.invoke(selectedPin, 'click', '');

    var selectedPin = dataLayer.get(indx);
    Microsoft.Maps.Events.invoke(selectedPin, 'click');
}
var-map=null;
var dataLayer=null;
var infoboxLayer=null;
函数loadMap(){
//准备默认位置
var defaultLocation=new Microsoft.Maps.Location(53.6880,-2.6646);
//准备地图选项
变量映射选项={
//凭据:“已删除密钥”,
中心:默认位置,
mapTypeId:Microsoft.Maps.mapTypeId.road,
缩放:7,
enableClickableLogo:false,
enableSearchLogo:false
}
//初始化主映射控件
map=new Microsoft.Maps.map(document.getElementById('BobElliotMap'),mapOptions);
//添加数据层
dataLayer=新的Microsoft.Maps.EntityCollection();
map.entities.push(数据层);
//添加信息框层
infoboxLa