Google Maps - Panorâmica e zoom em áreas - marcadores não aparecem quando eu zoom in ou pan - AJUDA!
Estou implementando alguns clusters baseados em limites no final do servidor de marcadores para exibir no meu google maps. O que eu estou fazendo é que eu tenho uma função que é chamada toda vez que o mapa é movido ou deslocado ou ampliado que pega o limite do mapa e faz uma chamada ajax que por sua vez o script do lado do servidor executa uma consulta SQL simples para recuperar o mapa marcadores e agrupa-os. Até agora, a parte de clustering está funcionando bem, mas às vezes os getBounds não parecem estar enviando os limites corretos que sinto.
Como se eu pudesse mover um mapa um pouco para o lado e as regiões que costumavam ter marcadores agora de repente não têm marcadores e o mapa fica em branco. Eu verifiquei a consulta sql e da consulta em si mostra um limites escandalosamente diferentes do que seria esperado.
Dê uma olhada nas regiões abaixo:Original com marcadores http://i31.tinypic.com/xds4t0.jpg Sem marcadores http://i31.tinypic.com/2r22ez4.jpg
O primeiro mostra todos os marcadores.
O seguinte, no entanto, acaba de se mover um pouco para o topo e para a esquerda, mas a metade da região é a mesma da foto anterior, no entanto, não há marcadores. Eu isolei o problema para estar com a função getBounds dos mapas.
Este é o meu código javascript, que recebe os limites e faz a chamada:
var bounds = map.getBounds();
var southWest = bounds.getSouthWest();
var northEast = bounds.getNorthEast();
var data = {ne:northEast.toUrlValue(), sw:southWest.toUrlValue(), zoom:map.getZoom()};
//something getting messed up in the code above this point
$.ajax({
type: "POST",
url: 'maps/get-markers',
data: {object:$.toJSON(data)},
dataType: 'json',
success: function(response) {
//code to add markers
}
});
No meu código do lado do servidor, este é o php usado para obter os itens com base nas coordenadas:
$data = Zend_Json::decode(stripslashes($this->_request->getParam('object')));
//retrieve the variables from the GET vars
list($nelat, $nelng) = explode(',', $data['ne']);
list($swlat, $swlng) = explode(',',$data['sw']);
//clean the data
$nelng = (float)$nelng;
$swlng = (float)$swlng;
$nelat = (float)$nelat;
$swlat = (float)$swlat;
$ubound = $swlng > $nelng ? $swlng : $nelng;
$lbound = $swlng > $nelng ? $nelng : $swlng;
$sql = 'SELECT `a`.* FROM `locations` AS `a` WHERE (a.`longitude` > $lbound) AND (a.`longitude` < $ubound) AND';
$ubound = $swlat > $nelat ? $swlat : $nelat;
$lbound = $swlat > $nelat ? $nelat : $swlat;
$sql .= ' (a.`latitude` >= $lbound) AND (a.`latitude` <= $ubound)';
Estou suspeitando que é a função getbounds no javascript, mas preciso corrigi-lo o mais cedo possível. Alguma idéia por favor :(