Получить координаты маркеров на карту - PullRequest
0 голосов
/ 29 августа 2011

Я пытаюсь получить координаты маркеров на карту или в окно, чтобы установить специальные функции, когда я делаю с помощью мыши, мой тестовый код такой:

        var multiMarker = [];
    var xmyOptions = { // Ponemos unas coordenadas iniciales al mapa de google maps.
      zoom: 16, 
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    var xmap = new google.maps.Map($('#map_canvas2').get(0), xmyOptions); // Iniciamos el mapa indicando el Div donde se va a cargar y las opciones.

    for (x=0; x<9; x++) {

        multiMarker[x] = new google.maps.Marker({ // Definimos una nueva "marca" o puntero
            position: new google.maps.LatLng('40.' + Math.floor(Math.random()*99999999), '-3.' + Math.floor(Math.random()*99999999)),
            draggable: true,
            map: xmap,
            title: 'Ejemplo marcador arrastrable'
        });

        google.maps.event.addListener(multiMarker[x], 'mouseover', function(){
            console.log(this);
        });

    }

    var bounds = new google.maps.LatLngBounds();  
    for (index in multiMarker) {  
        var data = multiMarker[index];  
        bounds.extend(new google.maps.LatLng(data.position.Oa, data.position.Pa));  
    }  
    xmap.fitBounds(bounds); 

Проблема в том,Я не могу получить эти координаты в объекте marker [x], я вижу только широту и долготу, и мне нужно верхнее, левое, нижнее или правое положение маркера для установки специальных всплывающих подсказок.У API нет этой информации?

Спасибо.

1 Ответ

0 голосов
/ 29 августа 2011

Я ответил на аналогичный вопрос здесь: Как получить доступ к DIV маркера API Карт Google v3 и его позиции в пикселях?

То, что вы можете получить, это положение маркера в мировой координате, а затем преобразовать в смещение от верхнего левого угла видимого прямоугольника. Но это только позиция, у вас нет доступа к самому маркеру, поэтому вы не можете добавлять к нему события или изменять маркер div таким образом.

var scale = Math.pow(2, map.getZoom());
var nw = new google.maps.LatLng(
    map.getBounds().getNorthEast().lat(),
    map.getBounds().getSouthWest().lng()
);
var worldCoordinateNW = map.getProjection().fromLatLngToPoint(nw);
var worldCoordinate = map.getProjection().fromLatLngToPoint(marker.getPosition());
var pixelOffset = new google.maps.Point(
    Math.floor((worldCoordinate.x - worldCoordinateNW.x) * scale),
    Math.floor((worldCoordinate.y - worldCoordinateNW.y) * scale)
);

Если по какой-то причине вам нужен доступ к элементу div маркера, вам нужно проверить, какие элементы div созданы для карты, выбрать, в каком слое (маркеры находятся в одном слое, но я не помню, какие, не путайте их с маркерными тенями :-)) и затем каким-то образом проверьте, какую позицию занимает этот div, чтобы выбрать ту, которая вам нужна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...