Как увеличить карту Bing, чтобы отобразить набор длинных / длинных точек? - PullRequest
5 голосов
/ 17 октября 2011

Я использую элемент управления Bing Maps v7.

У меня есть массив точек широты / долготы.(типа Microsoft.Map.Location)

Из этого массива я могу сгенерировать прямоугольник и центр прямоугольника, используя LocationRect.fromLocations()

При создании карты с помощью конструктора Map я могу центрировать карту, используя центр этого прямоугольника.Это выглядит примерно так:

    var LLA = [
       new Microsoft.Maps.Location(43.386,-111.6123),
       new Microsoft.Maps.Location(43.4929, -112.0349),
       new Microsoft.Maps.Location(43.2609,-115.7811),
       ...
    ];
    var r = Microsoft.Maps.LocationRect.fromLocations(LLA);
    var mapOptions = {
        credentials : bingMapsKey,
        center      : r.center,
        mapTypeId   : Microsoft.Maps.MapTypeId.road,
        zoom        : 7
    },
    elt = document.getElementById('out2');
    var map = new Microsoft.Maps.Map(elt, mapOptions);

Это работает, и создаваемая карта центрируется вокруг этих точек.Как я могу установить уровень масштабирования карты Bing, чтобы она отображала весь прямоугольник?

Смотрите здесь: http://jsfiddle.net/MQ76x/

Ответы [ 2 ]

8 голосов
/ 19 октября 2011

Забудьте прохождение center / zoom, а передайте прямоугольник как bounds вместо :

var mapOptions = {
  credentials : bingMapsKey,
  bounds      : r, // <-- HERE
  mapTypeId   : Microsoft.Maps.MapTypeId.road
}
0 голосов
/ 07 июня 2018

Для любого, кто приземлится здесь как я и ищет расчет для увеличения BingMaps V8 в зависимости от центра местоположения (широта, долгота) и радиуса местоположения в километрах:

(возможно, вытакже рисуют круг с Microsoft.Maps.SpatialMath в центре локации)

function getZoomLevel(radiusInKilometer: number, latitude: number, heightOfMapInPixels: number, widthOfMapInPixels: number): number {
    const rangeInMeters = radiusInKilometer * 1000;
    // we take the lower value of the bounding rect of the map, so the circle will be best seen
    const limitBoundPixels = Math.min(heightOfMapInPixels, widthOfMapInPixels);
    const zoom = Math.floor(Math.log(156543.03392 * Math.cos(latitude * Math.PI / 180) / (rangeInMeters / limitBoundPixels)) / Math.log(2));

    return zoom;
}
...