Клуб API Карт

Периодически вылетает непонятная ошибка

ilyadoroshin
31 июля 2012, 15:33

Uncaught Error: geometry.component.getBoundsFromPixels: Расчет границ не возможен без добавления на карту. 

И не ставится точка на карту :(

9 комментариев
Подписаться на комментарии к посту
Кажется сообщение описывает проблему. Расчитывать границы геообъекта не добавив его на карту нельзя, т.к. карта может определять значения опций геообъекта и фактически влиять на его границы.
Если возможно дайте ссылку на страницу - посмотрим в чем проблема.

К сожалению, ссылку пока дать не могу, т.к. все в текучке. Решил простой подгрузкой библиотеки предыдущей версии (2.0.10, на 2.0.13 перестало работать..)

В 2.0.10 границы считались без добавления на карту, но считались они увы неправильно. Результат мог быть похож на правду для небольших фигур, но многие опции фатически влияющие на границы (geodesic, coordRendering) во внимание не принимались.
Без добавления на карту полностью корректно границы посчитать невозможно. Эту ошибку мы исправили в 2.0.13.

т.е. чтобы исправить эту ошибку, мне достаточно сделать так:

 

var rectangle = new ymaps.geometry.Rectangle([[0, 0], [0, 0]]);

myMap.geoObjects.add(rectangle);

........

var bounds = rectangle.getBounds();

?

 

Не путайте геометрию и геообъект - первая строка должна быть:

var rectangle = new ymaps.Rectangle([[0, 0], [0, 0]]);



Если вы используете геометрию напрямую, т.е.

var geom = new ymaps.geometry.Polygon([[[1, 2], [3, 4], [5, 6]]]);
geom.setMap(myMap);


Нужно еще обеспечить, чтобы опция projection была определена.
Ее можно задать напрямую, а можно взять из карты связав менеджер опций геометрии с менеджером опций карты:

geom.options.setParent(myMap.options);

На самом деле, я просто пытаюсь вписать все гео-объекты на карту. Но в документации не нашел ничего похожего :(

Если не трудно, подскажите, где искать. Спасибо!

Документация пока не обновилась. У коллекций появился метод getBounds. Можете добавить все геообъекты в коллекцию, добавить ее на карту, а потом сказать:

 myMap.setBounds(collection.getBounds());

Супер! Спасибо!