[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Yandex Map
T1grOK
Опыт работы с Yandex Map невелик, поэтому прошу помощи, пните в нужном направлении.
Есть необходимость центрировать карту по группе точек. Это без проблем.

// list - это список координат
var collection = new ymaps.GeoObjectCollection();
for(var p in list) {
var place = list[p];

collection.add(new ymaps.Placemark([place.lat, place.lng]));
}

map.geoObjects.add(collection);
map.setBounds(collection.getBounds());

Но смысл в том, что в некоторых наборах точек, эти самые точки могут попадать под навигацию (зумирование карты), или в верху немного обрезаться маркер.
Нужно каким то образом определить положение точек(или задать границы/отступы) в пикселях.
Проще говоря, если точка(маркер) попадает в 20px от каждого края карты делать зум меньше(-1)

map.setZoom(map.getZoom() - 1);


_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
T1grOK
Раз уж никто не ответил. Придется самому ответить. В яндексе пообещали в следующей версии сделать возможность установки отступов до маркеров штатной возможностью. А пока можно сделать так

// отступ слева
var marginLeft = 25;
// отступ справа
var marginRight = 80;
// отступ сверху
var marginTop = 50;
// отступ снизу
var marginBottom = 10;

// Текущий зум карты
zoom = map.getZoom();
// Координаты верхнего левого и нижнего правого углов
var m = map.getBounds();

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

// Получение углов в глобальных пикселях
leftTopCoordGlobalPix = projection.toGlobalPixels([m[0][0], m[0][1]], zoom);
rightBottomCoordGlobalPix = projection.toGlobalPixels([m[1][0], m[1][1]], zoom);

// Отступ в глобальных пикселах
minX = leftTopCoordGlobalPix[0] + marginLeft;
maxY = leftTopCoordGlobalPix[1] - marginTop;
maxX = rightBottomCoordGlobalPix[0] - marginRight;
minY = rightBottomCoordGlobalPix[1] + marginBottom;

// Нужно ли менять зум
var changeSize = false;

for(var p in list) {
var place = list[p];
// Перевод геокординат в глобальные пиксели
placeGlobalPix = projection.toGlobalPixels([place.lat, place.lng], zoom);
// Проверка попадает ли координата в границы
if(placeGlobalPix[0] < minX || placeGlobalPix[0] > maxX
&& placeGlobalPix[1] < minY || placeGlobalPix[1] > maxY){
console.log(placeGlobalPix);
changeSize = true;
}
}


if(changeSize) map.setZoom(zoom - 1);

P.S. Полученный алгоритм гораздо проще, от рекомендуемого яндексом.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.