2011-03-23 7 views
20

tengo el siguiente código en el que yo esperaría que el método contains a devolver verdadero, pero vuelve falsa:Google Maps v3 - ¿Por qué se vuelven LatLngBounds.contains falsa

var bounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(55.38942944437183, -2.7379201682812226), 
    new google.maps.LatLng(54.69726685890506, -1.2456105979687226) 
); 

var center = bounds.getCenter(); // (55.04334815163844, -1.9917653831249726) 

var x = bounds.contains(center); // returns false 

En la misma página, en el mapa es una referencia al objeto Map, el código siguiente devuelve verdadero como se esperaba:

map.getBounds().contains(map.getBounds().getCenter()) 

Por qué podría mi llamada a bounds.contains volveremos falsa?

Respuesta

42

Ah, genial. El constructor google.maps.LatLngBounds espera los parámetros SouthWest y NorthEast LatLng. ¡De alguna manera he perdido mis coordenadas y pasé en el noroeste y el sudeste!

var bounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(54.69726685890506,-2.7379201682812226), 
    new google.maps.LatLng(55.38942944437183, -1.2456105979687226) 
); 

var center = bounds.getCenter(); // still returns (55.04334815163844, -1.9917653831249726) 

var x = bounds.contains(center); // now returns true 

lección aprendida: getCenter no le importa si ha creado el LatLngBounds con noroeste y sudeste lugar, pero si quieres contains para devolver una respuesta útil que pase mejor en el suroeste sugerido y Noreste!

+0

+1 no pude averiguar, pero ahora sé por qué. – kjy112

12

Supongo que es más fácil probar esto. A mí me funciona sin tener que preocuparse por NE orSW

var bounds = new google.maps.LatLngBounds(); 
bounds.extend(54.69726685890506,-2.7379201682812226); 
bounds.extend(55.38942944437183, -1.2456105979687226); 
var center = bounds.getCenter(); // still returns (55.04334815163844, -1.9917653831249726) 
var x = bounds.contains(center); // now returns true 

Sé que este post es viejo, pero vine en busca de respuestas aquí, así que pensaron en la actualización de lo que he aprendido.

+0

Sí, esta es una solución mucho más productiva y menos confusa. –

+5

'bounds.extend' necesita un objeto LatLng, no solo números. – Sharky

0

Esta es la forma en que funcionó para mí:

var bounds = new google.maps.LatLngBounds(); 
bounds.extend(54.69726685890506,-2.7379201682812226); 
bounds.extend(55.38942944437183, -1.2456105979687226); 
map.fitBounds(bounds);  
+0

Esto funcionó para mí, pero al igual que Sharky, dijo que los coords deben ser un objeto LatLng, no solo números. es decir: 'myLatLang = new google.maps.LatLng (54.69726685890506, -2.7379201682812226); bounds.extend (myLatLang); ' – JBS