Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion android/src/main/java/com/luggmaps/core/GoogleMapProvider.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import com.google.android.gms.maps.GoogleMapOptions
import com.google.android.gms.maps.MapView
import com.google.android.gms.maps.OnMapReadyCallback
import com.google.android.gms.maps.model.BitmapDescriptorFactory
import com.google.android.gms.maps.model.CameraPosition
import com.google.android.gms.maps.model.Circle
import com.google.android.gms.maps.model.CircleOptions
import com.google.android.gms.maps.model.GroundOverlay
Expand Down Expand Up @@ -1143,7 +1144,11 @@ class GoogleMapProvider(private val context: Context) :
val map = googleMap ?: return
val position = LatLng(latitude, longitude)
val targetZoom = if (zoom > 0) zoom.toFloat() else map.cameraPosition.zoom
val cameraUpdate = CameraUpdateFactory.newLatLngZoom(position, targetZoom)
val cameraPosition = CameraPosition.Builder(map.cameraPosition)
.target(position)
.zoom(targetZoom)
.build()
val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition)
when {
duration < 0 -> map.animateCamera(cameraUpdate)
duration > 0 -> map.animateCamera(cameraUpdate, duration, null)
Expand Down
4 changes: 2 additions & 2 deletions docs/MAPVIEW.md
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ mapRef.current?.setEdgeInsets(

### moveCamera

Move the camera to a coordinate with optional zoom and animation duration.
Move the camera to a coordinate with optional zoom and animation duration. The current heading and pitch are preserved.

```ts
moveCamera(coordinate: Coordinate, options: MoveCameraOptions): void
Expand All @@ -214,7 +214,7 @@ interface MoveCameraOptions {

### fitCoordinates

Fit multiple coordinates in the visible map area.
Fit multiple coordinates in the visible map area. Resets heading to north (`0°`).

```ts
fitCoordinates(coordinates: Coordinate[], options?: FitCoordinatesOptions): void
Expand Down
6 changes: 3 additions & 3 deletions ios/core/AppleMapProvider.mm
Original file line number Diff line number Diff line change
Expand Up @@ -1778,11 +1778,11 @@ - (void)moveCamera:(double)latitude
} else if (duration > 0) {
CLLocationCoordinate2D center =
CLLocationCoordinate2DMake(latitude, longitude);
MKCoordinateRegion region = [_mapView regionForCenterCoordinate:center
zoomLevel:targetZoom];
MKMapCamera *camera = [_mapView cameraForCenterCoordinate:center
zoomLevel:targetZoom];
[UIView animateWithDuration:duration / 1000.0
animations:^{
[self->_mapView setRegion:region animated:NO];
[self->_mapView setCamera:camera animated:NO];
}];
} else {
[_mapView
Expand Down
8 changes: 5 additions & 3 deletions ios/core/GoogleMapProvider.mm
Original file line number Diff line number Diff line change
Expand Up @@ -1129,9 +1129,11 @@ - (void)moveCamera:(double)latitude
return;

float targetZoom = zoom > 0 ? (float)zoom : _mapView.camera.zoom;
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:latitude
longitude:longitude
zoom:targetZoom];
GMSCameraPosition *camera = [GMSCameraPosition
cameraWithTarget:CLLocationCoordinate2DMake(latitude, longitude)
zoom:targetZoom
bearing:_mapView.camera.bearing
viewingAngle:_mapView.camera.viewingAngle];
if (duration < 0) {
[_mapView animateToCameraPosition:camera];
} else if (duration > 0) {
Expand Down
5 changes: 5 additions & 0 deletions ios/extensions/MKMapView+Zoom.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@ NS_ASSUME_NONNULL_BEGIN
zoomLevel:(double)zoomLevel
animated:(BOOL)animated;

/// Returns a camera for the given center and zoom level, preserving the current
/// heading and pitch
- (MKMapCamera *)cameraForCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate
zoomLevel:(double)zoomLevel;

- (MKCoordinateRegion)regionForCenterCoordinate:
(CLLocationCoordinate2D)centerCoordinate
zoomLevel:(double)zoomLevel;
Expand Down
14 changes: 11 additions & 3 deletions ios/extensions/MKMapView+Zoom.m
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,8 @@ - (MKCoordinateSpan)coordinateSpanForZoomLevel:(double)zoomLevel centerCoordinat
// Constant for altitude/zoom conversion (meters at zoom level 0)
static const double kAltitudeAtZoomZero = 220000000.0;

- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate
zoomLevel:(double)zoomLevel
animated:(BOOL)animated
- (MKMapCamera *)cameraForCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate
zoomLevel:(double)zoomLevel
{
// Use camera API directly to avoid region/margin interaction
CLLocationDistance altitude = kAltitudeAtZoomZero / pow(2, zoomLevel);
Expand All @@ -33,6 +32,15 @@ - (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate
eyeAltitude:altitude];
camera.pitch = self.camera.pitch;
camera.heading = self.camera.heading;
return camera;
}

- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate
zoomLevel:(double)zoomLevel
animated:(BOOL)animated
{
MKMapCamera *camera = [self cameraForCenterCoordinate:centerCoordinate
zoomLevel:zoomLevel];
[self setCamera:camera animated:animated];
}

Expand Down
Loading