Pergunta

Estou tendo alguns problemas com o API do Google Maps.Eu tenho um array que contém um objeto que criei para armazenar pontos.

Meu array e classe:

var tPoints = [];    
function tPoint(name) {
        var id = name;
        var points = [];
        var pointsCount = 0;
        ...
        this.getHeadPoint = function() { return points[pointsCount-1]; }
    }

tPoint contém uma matriz de GLatLng pontos.Eu quero escrever uma função para retornar um Limites GLatLng objeto que é estendido dos limites atuais do mapa para mostrar todos os HeadPoints.

Aqui está o que tenho até agora.

function getBounds() {
    var mBound = map.getBounds();
    for (var i = 0; i < tPoints.length; i++) {
        alert(mBound.getSouthWest().lat() + "," + mBound.getSouthWest().lng());
        alert(mBound.getNorthEast().lat() + "," + mBound.getNorthEast().lng());
            currPoint = trackMarkers[i].getHeadPoint();        
            if (!mBound.containsLatLng(currPoint)) {
                mBound.extend(currPoint);
            }
        }
    return mBound;
}

O que retorna esses valores para o alerta.(Geralmente nos EUA)

"19.64258,NaN"
"52.69636,NaN"
"eu=0"
"19.64258,NaN"
"52.69636,-117.20701"
"eu = 1"

Não sei por que estou recebendo NaN de volta.Quando uso os limites para obter um nível de zoom, acho que o valor NaN está fazendo com que map.getBoundsZoomLevel(bounds) retorne 0, o que é incorreto.Estou usando Limites GLatLng incorretamente?

Foi útil?

Solução

O exemplo do Google Maps está usando este código...

var bounds = map.getBounds();
var southWest = bounds.getSouthWest();
var northEast = bounds.getNorthEast();
var lngSpan = northEast.lng() - southWest.lng();
var latSpan = northEast.lat() - southWest.lat();

...que está colocando os limites Sudoeste/Nordeste em uma variável antes de tentar obter as coordenadas lng/lat individuais.Talvez haja algo nas avaliações "aninhadas" que esteja causando problemas.Já tentou a abordagem granular para ver se consegue os dados de que precisa?

Outras dicas

Também encontrei esse exemplo em minhas pesquisas no Google e brinquei com ele.Esse não era o problema.

Encontrei meu bug.Ninguém teria sido capaz de resolver o problema.Acontece que logo antes de testar meus limites eu centralizei meu mapa com dados incorretos.Eu fiz algo parecido com lngSpan = northEast.lng() - southWest.lng(); no entanto, o JavaScript interpretou meu var como uma string.Então (maxLng-minLng)/2 + minLng retorna algo como "20.456-116.1178" Enquanto o lng.Eu centralizei meu mapa em var centerPoint = new GLatLng(setLat, setLng); e depois disso a API do Maps fica um pouco estranha ;)

Obrigado pela ajuda.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top