public override IEnumerable <Position> GetCurrentUserRoute() { var positions = _currentUserRoute?.Points.Select(r => { var coord = MKMapPoint.ToCoordinate(r); return(CoordinateConverter.ConvertToAbstraction(coord)); }); return(positions); }
private async Task <IEnumerable <Position> > RequestMKMapRoutePoints(RouteModel route, CLLocationCoordinate2D from, CLLocationCoordinate2D to) { IEnumerable <Position> result = Enumerable.Empty <Position>(); var userPlaceMark = new MKPlacemark(from, new Foundation.NSDictionary()); var incidencePlaceMark = new MKPlacemark(to, new Foundation.NSDictionary()); var sourceItem = new MKMapItem(userPlaceMark); var destItem = new MKMapItem(incidencePlaceMark); var request = new MapKit.MKDirectionsRequest { Source = sourceItem, Destination = destItem, TransportType = MKDirectionsTransportType.Automobile }; var directions = new MKDirections(request); MKPolyline polyRoute = null; directions.CalculateDirections((response, error) => { if (error != null) { System.Diagnostics.Debug.WriteLine(error.LocalizedDescription); } else { if (response.Routes.Any()) { var firstRoute = response.Routes.First(); polyRoute = firstRoute.Polyline; route.Distance += firstRoute.Distance; route.Duration += firstRoute.ExpectedTravelTime / 60; } } }); do { await Task.Delay(100); }while (directions.Calculating); if (polyRoute != null) { result = polyRoute.Points.Select(s => { CLLocationCoordinate2D coordinate = MKMapPoint.ToCoordinate(s); return(CoordinateConverter.ConvertToAbstraction(coordinate)); }); } return(result); }
private Position GetIconPosition(DependencyObject icon) { if (icon == null) { return(default(Position)); } Geopoint geoLocation = MapControl.GetLocation(icon); return(CoordinateConverter.ConvertToAbstraction(geoLocation)); }