API do Google Maps - Problemas com a classe GLatLngBounds
-
08-06-2019 - |
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?
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.