Клуб API Карт

Как сдвинуть границы getBounds()?

Пост в архиве.

Здравствуйте, проблема в следующем:

Имеется карта, на которой расположен див шириной 500px, "приклеенный" к левой границе. Необходимо определить область getBounds(), и впоследствии сдвинуть значения таким образом, чтобы левый нижний угол карты совпадал с правым нижним углом дива. То есть получается сдвинуть активную область карты, на которой будут выводиться метки на 500px влево.

Подскажите, пожалуйста, решение

8 комментариев
Sergey Konstantinov
28 января 2016, 03:20

Чтобы сдвинуть карту на n пикселей вовсе не нужны никакие bounds.

 var oldPixelCenter = map.getGlobalPixelCenter();

map.setGlobalPixelCenter([

   oldPixelCenter[0] - 500,

   oldPixelCenter[1]

]);

Вы неправильно поняли мою задачу. Мне нужно сдвинуть активную область карты на которой будут располагаться метки. К примеру, карта шириной 1000px, а область для которой нужно вычислить границы должна начинаться с отступа в 500px. Карту двигать не нужно.

Вот пример сайта, чей результат мне необходим http://nn.yplaces.com/beauty

Там метки выводятся в пределах видимости и не заступают за .wrapper-main-filter.

Как посчитать этот отступ и уменьшить границы той самой активной области. Дальше я планирую делать выборку меток в пределах вычисленных координат области

Sergey Konstantinov
28 января 2016, 03:20

Тогда как-то так:

var projection = map.options.get('projection'),

      center = map.getGlobalPixelCenter(),

      zoom = map.getZoom(),

      size = map.container.getSize(),

      lowerCorner = projection.fromGlobalPixels([

         center[0] - size[0] / 2 - 500,

         center[1] + size[1] / 2

     ], zoom),

     upperCorner = projection.fromGlobalPixels([

        center[0] + size[0] / 2,

        center[1] - size[1] / 2

    ], zoom);

lowerCorner, upperCorner - углы вашей области.

 

Спасибо, буду пробовать

Выбрал вот какое решение, может кому-то понадобится:

boundsLeftProportionCalculate: function(bounds) {
    var aa = $(".leftside").outerWidth(true) / $(document).width();
    var bb = (bounds[1][1] - bounds[0][1]) * aa;
    bounds[0][1] = bounds[0][1] + bb;
    return bounds;
},
getBounds: function() {
    return this.boundsLeftProportionCalculate(myMap.getBounds());

}

Sergey Konstantinov
28 января 2016, 03:20

Если в bounds попадёт Берингов пролив, то произойдёт конфуз.

Может кому то еще будет полезным...

http://jsfiddle.net/t6JKF/

Спасибо, 

При подобном сдвиге центра, возникает проблема с зумированием, так как зума производиться по отношению текущего центра активной карты, а не сдвинутого цента. Таким образом постоянно происходит сдвиг видимой области.