public override void OnMoveToRegionRequest(MoveToRegionMessage m) { if (_nativeMap == null) { return; } var span = m.Span; var animate = m.Animate; span = span.ClampLatitude(85, -85); var ne = new LatLng(span.Center.Latitude + span.LatitudeDegrees / 2, span.Center.Longitude + span.LongitudeDegrees / 2); var sw = new LatLng(span.Center.Latitude - span.LatitudeDegrees / 2, span.Center.Longitude - span.LongitudeDegrees / 2); var update = GCameraUpdateFactory.NewLatLngBounds(new LatLngBounds(sw, ne), 0); try { if (animate) { _nativeMap.AnimateCamera(update); } else { _nativeMap.MoveCamera(update); } } catch (IllegalStateException exc) { System.Diagnostics.Debug.WriteLine("MoveToRegion exception: " + exc); } }
public static GCameraUpdate ToAndroid(this CameraUpdate self, float scaledDensity) { switch (self.UpdateType) { case CameraUpdateType.LatLng: return(GCameraUpdateFactory.NewLatLng(self.Position.ToLatLng())); case CameraUpdateType.LatLngZoom: return(GCameraUpdateFactory.NewLatLngZoom(self.Position.ToLatLng(), (float)self.Zoom)); case CameraUpdateType.LatLngBounds: try { var factory = GCameraUpdateFactory.NewLatLngBounds(self.Bounds.ToLatLngBounds(), (int)(self.Padding * scaledDensity)); // TODO: convert from px to pt. Is this collect? (looks like same iOS Maps) return(factory); } catch { return(null); } case CameraUpdateType.CameraPosition: return(GCameraUpdateFactory.NewCameraPosition(self.CameraPosition.ToAndroid())); default: throw new ArgumentException($"{nameof(self)} UpdateType is not supported."); } }