Google Maps v3 - Why is LatLngBounds.contains returning false

52,518

Solution 1

Ah, brilliant. The google.maps.LatLngBounds constructor expects SouthWest and NorthEast LatLng parameters. I have somehow bungled up my coordinates and passed in NorthWest and SouthEast instead!

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

Lesson learned: getCenter doesn't care if you created the LatLngBounds with NorthWest and SouthEast instead, but if you want contains to return a useful answer you better pass in the suggested SouthWest and NorthEast!

Solution 2

I guess its easier to try this. It works for me without having to worry about 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

I know this post is old, but I came searching for answers here, so thought of updating from what I have learnt.

Solution 3

This is the way that it worked for me:

var bounds = new google.maps.LatLngBounds();
bounds.extend(54.69726685890506,-2.7379201682812226);
bounds.extend(55.38942944437183, -1.2456105979687226); 
map.fitBounds(bounds);    
Share:
52,518

Related videos on Youtube

Mario Menger
Author by

Mario Menger

.. jQuery, JavaScript, C#, SQL, Ruby, XSLT, web applications

Updated on January 23, 2020

Comments

  • Mario Menger
    Mario Menger about 4 years

    I have the following code in which I would expect the contains method to return true, but it returns 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
    

    On the same page, where map is a reference to the Map object, the following code returns true as expected:

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

    Why might my call to bounds.contains be returning false?

  • 700 Software
    700 Software over 10 years
    Yes, this is a much more productive and less confusing solution.
  • Sharky
    Sharky over 9 years
    bounds.extend needs a LatLng object, not just numbers.
  • JBS
    JBS over 8 years
    This worked for me, but like Sharky said the coords must be a LatLng object, not just numbers. ie: ` myLatLang = new google.maps.LatLng(54.69726685890506,-2.7379201682812226); bounds.extend(myLatLang ); `
  • Jason
    Jason over 4 years
    Thanks. Now that's a gotcha to look out for!