bing maps:如何设置缩放级别,以便用户当前位置可以看到精确定位

时间:2012-03-20 19:38:38

标签: javascript bing-maps

我正在使用bing maps ajax v7,为了简单起见,我想说我在世界各地都有10个PinPoints。我正在尝试将地图缩放到最低级别,以便最接近的PinPoint对于用户的当前位置仍然可见。如果有人能指出我正确的方向,我会非常感激。

$(document).ready(function () {
        var windowHeight = $(window).height();
        var windowWidth = $(window).width();

        map = new Microsoft.Maps.Map(document.getElementById("mapDiv"), {
            credentials: "myCredentials",
            backgroundColor: "#A4C4ED",
            zoom: 3,
            height: windowHeight,
            width: windowWidth
        });
        Microsoft.Maps.Events.addHandler(map, 'viewchange', hideInfoBox);
        Microsoft.Maps.Events.addHandler(map, 'click', hideInfoBox);

        //get users location and set view bound
        var geoLocationProvider = new Microsoft.Maps.GeoLocationProvider(map);
        var viewRectangle = Microsoft.Maps.LocationRect(geoLocationProvider.getCurrentPosition());
        map.setView({ bounds: viewRectangle });

        dataLayer = new Microsoft.Maps.EntityCollection();
        map.entities.push(dataLayer);

        var infoboxLayer = new Microsoft.Maps.EntityCollection();
        map.entities.push(infoboxLayer);

        //create initial infobox
        infobox = new Microsoft.Maps.Infobox(new Microsoft.Maps.Location(0, 0), {
            visible: false,
            offset: new Microsoft.Maps.Point(0, 20)
        });
        infoboxLayer.push(infobox);

        Microsoft.Maps.loadModule('Microsoft.Maps.Search', { callback: searchModuleLoaded });
    });

1 个答案:

答案 0 :(得分:3)

我认为你是一个针点,而你在地图上还有另外10个针点。

首先,您需要找到最接近您的精确定位点。  您可以使用此函数,该函数需要两个包含纬度和经度的位置对象。

oLocation1 = {latitude:0,longitude:0};
oLocation2 = {latitude:19,longitude:23};


 function calcDistHaversine  (oLocation1, oLocation2) {
        var dLat = (oLocation2.latitude * Math.PI / 180 - oLocation1.latitude  * Math.PI / 180);//*Math.PI*180;
        var dLon = (oLocation2.longitude * Math.PI / 180 - oLocation1.longitude  * Math.PI / 180);//*Math.PI*180;
        var lat1 = oLocation1.latitude * Math.PI / 180;//*Math.PI*180;
        var lat2 = oLocation2.latitude  * Math.PI / 180;//*Math.PI*180;

        var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
                Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2);
        var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
        var distance = 6371 * c;
        return distance;
    };

因此,您将获得这两个位置之间的距离,即地球曲率。

现在您拥有您的位置和最近的精确位置。

让我们把它们命名为你的。

接下来,您需要创建包含转换为Microsoft软件位置对象的两个位置的数组。

  var yourLocation= new Microsoft.Maps.Location(your.latitude, your.longitude);
  var theirLocation= new Microsoft.Maps.Location(their.latitude, their.longitude);

  var arr = [];
  arr.push(yourLocation);
  arr.push(theirLocation);

现在你使用bing maps功能,根据给定的位置为你提供最佳的缩放和指向。

var bestView = Microsoft.Maps.LocationRect.fromLocations(arrLocations);

然后根据我们找到的最佳视图设置地图视图。

 setTimeout((function () {
        map.setView({ bounds: bestView });
    }).bind(this), 1000);