CameraUpdateFactory.newLatLngBounds is not workinf all the time

android, google-maps

Solution

Not sure what you want to achieve with the code in your question. It's a bit messy.

If you want to show area containing 3 LatLngs, you are better of using

LatLngBounds bounds = LatLngBounds.builder().include(latLng1).include(northeast).include(taxi).build();
map.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, padding));

This would replace all your ifs and try-catches with a few lines.

Btw. You shouldn't be doing try-catches in your code. A programming error is not something you catch and try something different, but change the code instead.

Problem

I'm having some problema to move camera on android google maps. I have that function: ``` protected void centralizeMapToBounds(final LatLng southwest, final LatLng northeast, final LatLng taxi) { final int padding = 30; Location loc1 = new Location(""); loc1.setLatitude(southwest.latitude); loc1.setLongitude(southwest.longitude); Location loc2 = new Location(""); loc2.setLatitude(northeast.latitude); loc2.setLongitude(northeast.longitude); Location loc3 = new Location(""); loc3.setLatitude(taxi.latitude); loc3.setLongitude(taxi.longitude); float d1 = loc1.distanceTo(loc2); float d2 = loc1.distanceTo(loc3); float d3 = loc2.distanceTo(loc3); LatLngBounds bounds = null; try { if(d1 > d2){ if(d1 > d3){ ICabDebug.i(TAG, "Maior distancia d1: " + d1); if(southwest.latitude > northeast.latitude) bounds = new LatLngBounds(southwest,northeast); else bounds = new LatLngBounds(northeast, southwest); }else{ ICabDebug.i(TAG, "Maior distancia d3: " + d3); if(northeast.latitude > taxi.latitude) bounds = new LatLngBounds(northeast, taxi); else bounds = new LatLngBounds(taxi,northeast); } }else{ ICabDebug.i(TAG, "Maior distancia d2: " + d2); if(southwest.latitude > taxi.latitude) bounds = new LatLngBounds(southwest, taxi); else bounds = new LatLngBounds(taxi, southwest); } }catch (Exception e) { ICabDebug.i(TAG, e.getMessage()); ICabDebug.i(TAG, "bounds = null"); bounds = null; } final LatLngBounds bounds2 = bounds; // Pan to see all markers in view. try { ICabDebug.i(TAG, "Entro aki no primeiro bounds"); googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, padding)); } catch (Exception e) { if (mapView.getViewTreeObserver().isAlive()) { mapView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @SuppressLint("NewApi") @Override public void onGlobalLayout() { mapView.getViewTreeObserver().removeGlobalOnLayoutListener(this); try { ICabDebug.i(TAG, "northeast ["+ bounds2.northeast.latitude + " / " + bounds2.northeast.longitude + "]"); ICabDebug.i(TAG, "southwest ["+ bounds2.southwest.latitude + " / " + bounds2.southwest.longitude + "]"); googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds2, padding)); } catch (Exception ee) { ICabDebug.i(TAG, "----------------------------"); ICabDebug.i(TAG, ee.getMessage()); ICabDebug.i(TAG, "----------------------------"); googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(taxi, 15)); } } }); } } } ``` When I use it with the coordinate works perfect: (-23.5804166,-46.681909) (-23.4850942,-46.5802326) (-23.5802881,-46.6819049) but when i use with the coordinate below, it moves the camera to Australia: (-23.5792416,-46.63472729999999) (-23.5436503,-47.4519223) (-23.580264,-46.6818923) Could someone help me? thanks

Original source