Marianne Abdelmalek
Marianne Abdelmalek

Reputation: 77

Osmdroid maximum zoom level displaying two geo locations

I am using osmdroid library to render maps. I have two geo points that vary intermittently, and want the org.osmdroid.views.MapView to resize and translate making sure both points are always visible. I can easily re-centre the map on the point mid-way between the two, but how do I set the zoom level to ensure my two points are visible?

UPDATE

  //Getting pickup and destination latitude and longitude
                GeoPoint pickupLocation = null;
                if (tripRequest.getPickupLat() != null && tripRequest.getPickupLong() != null) {
                    pickupLocation = new GeoPoint(tripRequest.getPickupLat(), tripRequest.getPickupLong());
                }
                GeoPoint destinationLocation = null;
                if (tripRequest.getDestinationLat() != null && tripRequest.getDestinationLong() != null) {
                    destinationLocation = new GeoPoint(tripRequest.getDestinationLat(), tripRequest.getDestinationLong());
                }

                if (destinationLocation != null && pickupLocation != null) {
                    //Adding destination marker to map
                    Marker destinationLocationMarker = new Marker(map);
                    destinationLocationMarker.setPosition(destinationLocation);
                    destinationLocationMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
                    destinationLocationMarker.setIcon(context.getResources().getDrawable(R.mipmap.pin_green_small));
                    map.getOverlays().add(destinationLocationMarker);
                    //Adding pickup marker to map
                    Marker pickupLocationMarker = new Marker(map);
                    pickupLocationMarker.setPosition(pickupLocation);
                    pickupLocationMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
                    pickupLocationMarker.setIcon(context.getResources().getDrawable(R.mipmap.pin_red_small));
                    map.getOverlays().add(pickupLocationMarker);


                    BoundingBox boundingBox = BoundingBox.fromGeoPoints(Arrays.asList(destinationLocation, pickupLocation));
                    mapController = map.getController();

                    mapController.setCenter(boundingBox.getCenter());

                    mapController.setZoom(10);// I need to set this zoom properly
                    touchListener = new TouchListener();
                    map.setOnTouchListener(touchListener);

Upvotes: 1

Views: 1187

Answers (2)

Josef Adamcik
Josef Adamcik

Reputation: 5780

Use zoomToBoundingBox. It should work and if it doesn't problem will be elsewhere.

Try:

map.zoomToBoundingBox(boundingBox, false);
map.invalidate();

It this still don't work, check this response: zoom mapView to a certain bounding box on osmdroid

If you really want to calculate zoom yourself you can always find an inspiration in source code of zoomToBoundingBox method and modify the calculation to fit your needs.

Upvotes: 4

spy
spy

Reputation: 3258

I believe your are looking for zoom to bounds which is in mapview or map controller. Use the max/min lat lon from your points. You'll want to test at the date line and equator

Upvotes: 0

Related Questions