Клуб API Карт

Помогите)

iytin-ne
11 сентября 2012, 13:09

есть код

console.log(self.balloon.getPosition())//возвращает пиксельные координаты
        var ballonCenter = myMap.options.get('projection').toGlobalPixels(self.balloon.getPosition(), this.getZoom())....//соответственно тут получается что-то не то, масштабирование сдвигается  непонятно куда)

увидить это можно при изменении зума с открытым балуном http://svadbagolik.cybers.net.ua/index2.php#

Вопрос: что нужно сделать, чтобы возвращало нормальные координаты?

 

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

что-то не то делаю, координаты минусовые находит(

 

      myMap.setZoom = function (zoom, options) {

    var globalPixelCenter = this.getGlobalPixelCenter(),
        scale = Math.pow(2, zoom - this.getZoom()),
        newPixelCenter = [globalPixelCenter[0] * scale, globalPixelCenter[1] * scale];

    if (self.balloon && self.balloon.isOpen()) {
        // Преобразуем координаты курсора мыши в геокоординаты
var projection = myMap.options.get('projection');
    console.log(
        projection.fromGlobalPixels(
        myMap.converter.pageToGlobal(self.balloon.getPosition()), myMap.getZoom())
    );////что-то не то получается
        var ballonCenter = myMap.options.get('projection').toGlobalPixels(self.balloon.getPosition(), this.getZoom()),
            offsetBase = [(ballonCenter[0] - globalPixelCenter[0]), (ballonCenter[1] - globalPixelCenter[1])];
        newPixelCenter[0] += offsetBase[0] * scale - offsetBase[0];

        newPixelCenter[1] += offsetBase[1] * scale - offsetBase[1];

    }

    this.setGlobalPixelCenter(newPixelCenter, zoom, options);
}

 

у тебя self.balloon это балун карты или геообъекта?

ну если я правильно понимаю то у меня балун геообъекта.

.......

 myMap.balloon.events
                // При открытии балуна начинаем слушать изменение центра карты
                    .add('open', function (e) {
                        balloon = e.get('balloon'),///вот тут оно присваивается
                        console.log(balloon);

......

могу показать эту функцию полностью если нужно

Ты проверил, у тебя там точно пиксельные координаты приходят?

просто в балуне карты, как выяснилось, приходят геокоординаты

вроде. вот в консольке после зума вывожу позицию балуна

console.log(
       self.balloon.getPosition()
    );

один с таких результатов

[633761.119891911,328735.68288703874]

 

вот тема http://clubs.ya.ru/mapsapi/replies.xml?parent_id=30350&item_no=30288&with_parent=1#reply-mapsapi-30350 где nolan23 помог мне сделать сама фишку с зумом, но потом насколько я знаю и у него возникли проблемы с позицией балуна.

myMap.converter.pageToGlobal

тебе не нужен, т.к. у тебя итак глобальные пиксельные координаты приходят


попробуй так:

 

    map.balloon.events        .add('open', function (e) {            var balloon = e.get('balloon'),                                                                                                                                                                        projection = map.options.get('projection');// тут будут геокоординаты            console.log(projection.fromGlobalPixels(balloon.getPosition(), map.getZoom())); 
// если тебе нужно центрировать карту по пиксельным - делай сразу без конверсийmap.setGlobalPixelCenter(balloon.getPosition(), map.getZoom());        });


вроде все прояснилось, спасибо. А не подскажешь как определить координаты открытого кластра?

вот как пишу я, а оно ругается

cluster.events.add('balloonopen', function (e) {
.....
    var cluster = e.get('target'),
.....

        console.log(cluster.getPosition());
console.log(cluster.geometry.getPosition());

да, там сейчас не приходит balloon в объекте события

e.get('balloon')

  обещала это поправить к след. релизу

Пока можно получить через координаты кластера

cluster.geometry.getCoordinates()

спасибо, мне впринцыпе и cluster.geometry.getCoordinates() подойдет, а когда ждать нового релиза?

 

matvei.sheogorath
14 мая 2013, 16:43

О! и мне помогло) спасибо!