当平移地图时,针脚在地图上消失

时间:2014-02-01 16:24:33

标签: javascript map bing

我正在尝试使用Bing地图生成一个地图应用程序,其中的按钮将检索JSON字符串并根据地图中心在地图上放置图钉。

这样做很好,但是我遇到了两个我无法诊断的问题。

首先,当我放置引脚后移动地图时,除了1-3之外,大部分都会从地图中消失。我已经发现引脚仍然保存在map.entities中,但并不是全部显示。

第二个问题是我在引脚上有一个点击事件,有时当我点击一个引脚时它会消失(有时会重新出现在地图上的其他地方)。

这是我的代码:

function addPin() {
    map.entities.clear();    
    var pinImg = "images/MapPin.jpg";    
    var latLong = {};
    var name;   

    for (var i = 0; i < factualJson.response.data.length; ++i) {

        latLong['latitude'] = factualJson.response.data[i].latitude;
        latLong['longitude'] = factualJson.response.data[i].longitude;
        name = factualJson.response.data[i].name;

        var pin = new Microsoft.Maps.Pushpin(latLong, {
            icon: pinImg,
            anchor: new Microsoft.Maps.Point(latLong['latitude'], latLong['longitude']),
            draggable: true,
            width: 48,
            height: 48
        });

        Microsoft.Maps.Events.addHandler(pin, 'click', displayName);
        pin.title = name;
        pin.id = 'pin' + i;
        map.entities.push(pin);             
    }

    document.getElementById("arrayLength").innerHTML = "Number of locations: " +            map.entities.getLength();     
}

function displayName(e) {

    document.getElementById("name").innerHTML = "";

    if (this.target.id  != -1) {        
        document.getElementById("name").innerHTML = this.target.title;
    }
}

function boot() {
    Microsoft.Maps.loadModule('Microsoft.Maps.Overlays.Style', { callback: getMap });    
}

function getMap() {    
    map = new Microsoft.Maps.Map($gel("bingMap"), {
        credentials: getKey(),
        customizeOverlays: true,
        enableClickableLogo: true,
        enableSearchLogo: true,
        showDashboard: true,
        showBreadcrumb: true,
        showCopyright: true,
        zoom: 10,
        labelOverlay: Microsoft.Maps.LabelOverlay.hidden
    });        

    setGeoLocation();
    //setTimeout(optimizeMap, 100);

    window.onresize = resizeWin;
    resizeWin();
}

目前我从按钮调用ajax,回调函数调用'AddPin',它将引脚添加到地图中。我以为我会添加地图初始化代码以防它相关。目前在body load上调用boot()。

2 个答案:

答案 0 :(得分:1)

对我来说,解决方案类似于你的 @canadian coder

Microsoft.Maps.Location()只接受浮点值,没有字符串和Int。

我使用MVC架构并使用模型传递字符串。后来我将该字符串转换为float并传递给Location。 问题解决了。

var pushpin = new Microsoft.Maps.Pushpin(
center, { icon: '/Content/BingPushpin.png', width: 50, height: 50, draggable: false });
pushpin.setLocation(new Microsoft.Maps.Location
(parseFloat(@Model.Latitude) , parseFloat(@Model.Longitude))); 
dataLayer.push(pushpin); 
locations.push(new Microsoft.Maps.Location
(parseFloat(@Model.Latitude) , parseFloat(@Model.Longitude)));

编辑:

后来发现问题依然存在。另一个原因可能是您正在调用Map加载两次。因此,请检查正在加载的地图的任何其他实例。在我的情况下见下文。

$(document).ready(function () {
loadSearchModule(); //calling Map to Load at a div without pushpins

//code to do something

getMapOnLocation();
}

function getMapOnLocation()
{//code to display map with pushpin
}

在上面的示例中,我告诉控件使用PushPins加载我的地​​图,当页面完全加载时加载地图而不使用图钉。 希望这会有所帮助:)

答案 1 :(得分:0)

一如既往,我需要在自己弄明白之前先问问题。

问题是我需要将Microsoft位置对象推入引脚而不是对象。像这样:

var loc = new Microsoft.Maps.Location(47.592, -122.332);

而不是我的latLong对象。

这似乎也解决了点击事件中针脚消失的问题。