web-dev-qa-db-fra.com

Google Maps v3 - Pourquoi LatLngBounds.contains qui renvoie la valeur false

J'ai le code suivant dans lequel je m'attendrais à ce que la méthode contient renvoie true, mais elle renvoie false:

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

Sur la même page, où map est une référence à l'objet Map, le code suivant renvoie true comme prévu:

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

Pourquoi mon appel à bounds.contains renvoie-t-il faux?

21
Mario Menger

Ah, génial. Le constructeur google.maps.LatLngBounds attend les paramètres SouthWest et NorthEast LatLng. J'ai en quelque sorte goupillé mes coordonnées et passé à NorthWest et SouthEast à la place!

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

Leçon apprise: getCenter importe peu si vous avez créé la LatLngBounds avec NorthWest et SouthEast, mais si vous souhaitez que contains vous renvoie une réponse utile, vous feriez mieux de passer aux suggestions Sud-Ouest et Nord-Est!

45
Mario Menger

Je suppose que c'est plus facile d'essayer cela. Cela fonctionne pour moi sans avoir à vous soucier de 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

Je sais que cet article est vieux, mais je suis venu chercher des réponses ici, alors j'ai pensé à mettre à jour ce que j'ai appris.

13
axs

Voici comment cela a fonctionné pour moi:

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