Клуб API Карт

Вычисление радиуса и центра карты по видимым границам, api v 2.0

diz2html
27 февраля 2014, 01:32

Не могу понять как в api v2 сделать тоже что я делал в v1. В видимую часть карты пытаюсь подгрузить метки. Для этого необходимо вычислить широту и долготу центра карты и радиус видимой области карты.

в api v1 это выглядело так:

 

 

var current_map = new ymaps.Map("objects_yandex_map",{
            center : [coords.lat, coords.lng],
            zoom : 11
        });

 

function getRadius(){
          
           

          var getNorthEast = function(item){
                return item.getRightTop();
            },
            getLat = function(item){
                return item.getLat();
            },
            getLng = function(item){
                return item.getLng();
            }

        var cur_zoom = current_map.getZoom(),
        map_bounds = current_map.getBounds(),
        centered = map_bounds.getCenter(),
        pt = getNorthEast(map_bounds),
        r = 6371,  // r = radius of the earth in km
        // Convert lat or lng from decimal degrees into radians (divide by 57.2958)
        lat = getLat(centered),
        lng = getLng(centered),
        lat1 = lat / 57.2958,
        lon1 = lng / 57.2958,
        lat2 = getLat(pt) / 57.2958,
        lon2 = getLng(pt) / 57.2958,
        dis = r * Math.acos(Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1)) *1000;
        return '&lat=' + lat + '&lng=' + lng + '&radius=' + dis;

}

 

 

Проблема в том что следующие методы работают не так как в v1

map_bounds = current_map.getBounds(),
centered = map_bounds.getCenter();

Также не знаю как найти крайнюю правуюю точку карты

getNorthEast = function(item){
                return item.getRightTop();
            }

Наверное этот метод тоже изменился.

Заранее благодарен за помощь!

4 комментария
Подписаться на комментарии к посту

Ну центр у меня (API 2) вычисляется вот так:

 

var centerMap = myMap.getCenter();

 

чтобы получить координаты левой верхней точки - применяю
var point = new ymaps.geometry.Point([0, 0]);var coord = point.getCoordinates();
Ну а дальше можно использовать http://api.yandex.ru/maps/doc/jsapi/2.x-stable/ref/reference/coordSystem.geo.xml чтобы найти расстояние между точками.2 вариант. Можно найти размер видимой области блока:
var rootElem = $('#map');var rootH = rootElem.height();var rootW = rootElem.width();
После чего левую верхнюю и правую нижнюю очки:
var point = new ymaps.geometry.Point([0, 0]);  var coord = point.getCoordinates();var point2 = new ymaps.geometry.Point([rootW, 0]);  var coord2 = point2.getCoordinates();
и далее:
var geoC = myMap.getBounds([coord, coord2]); var dist = ymaps.coordSystem.geo.getDistance(geoC[0], geoC[1])/1000; //получаю расстояние в км
ну и соответственно радиус - это половина полученного расстояния :)

Спасибо большое! разобрался.

 

Видимые границы можно получить методом карты getBounds — возвращает обычный javascript  массив 

Из 2-х точек. Получить каждую можно по индексу

var bounds = myMap.getBounds(),

      leftBottom = bounds[0],

      rightTop = bounds[1];

Спасибо большое! Использовал

rightTop = bounds[1];