it-swarm.com.de

Google Maps v3 - Warum werden LatLngBounds.contains falsch zurückgegeben?

Ich habe den folgenden Code, in dem ich erwarten würde, dass die enthaltende Methode true zurückgibt, aber false zurückgibt:

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

Auf derselben Seite, auf der map eine Referenz auf das Map-Objekt ist, gibt der folgende Code erwartungsgemäß true zurück:

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

Warum kann mein Aufruf an bounds.contains falsch sein?

21
Mario Menger

Ah, brillant. Der google.maps.LatLngBounds-Konstruktor erwartet die Parameter SouthWest und NorthEast LatLng. Ich habe meine Koordinaten irgendwie verdreht und bin stattdessen in NorthWest und SouthEast vorbeigezogen!

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

Lektion gelernt: getCenter ist es egal, ob Sie LatLngBounds stattdessen mit NorthWest und SouthEast erstellt haben, aber wenn Sie möchten, dass contains eine nützliche Antwort zurückgibt, passen Sie besser in den vorgeschlagenen SouthWest und NorthEast!

45
Mario Menger

Ich denke, es ist einfacher, das auszuprobieren. Es funktioniert für mich, ohne sich um NE orSW kümmern zu müssen

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

Ich weiß, dass dieser Beitrag alt ist, aber ich bin hier auf der Suche nach Antworten gekommen, also habe ich überlegt, was ich gelernt habe.

13
axs

So hat es für mich funktioniert:

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