void CenterOnUsersLocation(object sender, EventArgs e) { if (NativeMapView.UserLocation.Location != null) { CLLocationCoordinate2D coords = NativeMapView.UserLocation.Coordinate; MKCoordinateRegion region = MKCoordinateRegion.FromDistance(coords, 2000, 2000); NativeMapView.SetRegion(region, true); } else { centerOnUserRequested = true; } }
void CalculateRouteDetails(bool zoomMapToShowFullRoute = true, bool requestAlternateRoutes = true, MKDirectionsTransportType transportType = MKDirectionsTransportType.Automobile) { MKDirectionsRequest directionRequest = new MKDirectionsRequest(); directionRequest.Source = sourceMapItem; directionRequest.Destination = destinationMapItem; directionRequest.RequestsAlternateRoutes = requestAlternateRoutes; directionRequest.TransportType = transportType; MKDirections eta = new MKDirections(directionRequest); eta.CalculateETA((MKETAResponse response, Foundation.NSError error) => { if (error != null) { System.Diagnostics.Debug.WriteLine(error.Description); } else { TimeSpan time = TimeSpan.FromSeconds(response.ExpectedTravelTime); System.Diagnostics.Debug.WriteLine(time.ToString(@"hh\:mm\:ss\:fff")); } }); MKDirections directions = new MKDirections(directionRequest); directions.CalculateDirections((MKDirectionsResponse response, Foundation.NSError error) => { if (error != null) { System.Diagnostics.Debug.WriteLine(error.Description); } else { //remove previous route overlays ClearOverlays(); currentRouteOverlay = response.Routes[0].Polyline; MKRoute route; //loop through backwards so first most route is renderered on top for (int i = response.Routes.Length - 1; i >= 0; i--) { route = response.Routes[i]; //save overlay so it can be removed later if requested overlaysList.Add(route.Polyline); NativeMapView.AddOverlay(route.Polyline, MKOverlayLevel.AboveRoads); if (i == 0) { if (zoomMapToShowFullRoute) { MKMapRect rect = route.Polyline.BoundingMapRect; MKMapRect expandedRect = NativeMapView.MapRectThatFits(rect, new UIEdgeInsets(20, 20, 20, 20)); NativeMapView.SetRegion(MKCoordinateRegion.FromMapRect(expandedRect), true); } } } } }); }