예제 #1
0
        protected async override void AddPushpinToMap(CustomPin pin)
        {
            try
            {
                var geoLocation = CoordinateConverter.ConvertToNative(pin.Position);

                var mapIcon = new MapIcon();
                mapIcon.CollisionBehaviorDesired = MapElementCollisionBehavior.RemainVisible;
                mapIcon.Location = geoLocation;
                mapIcon.NormalizedAnchorPoint = new Point(0.5, 1.0);
                mapIcon.ZIndex = 1000;

                if (pin.Icon != null)
                {
                    var iconImageUri = default(Uri);
                    iconImageUri = new Uri("ms-appx:///Assets/" + pin.Icon);
                    RandomAccessStreamReference stream = RandomAccessStreamReference.CreateFromUri(iconImageUri);
                    mapIcon.Image = await stream.ScaleTo(40, 58);
                }

                _nativeMap.MapElements.Add(mapIcon);
                _pushpinMappings.Add(mapIcon, pin.Id);
                if (pin.Duration.HasValue)
                {
                    ShowPushpinInformationPanel(pin);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
        }
예제 #2
0
        private void SetMapIconPosition(DependencyObject icon, Position geoLocation, Point anchorPoint)
        {
            var nativeCoordinate = CoordinateConverter.ConvertToNative(geoLocation);

            MapControl.SetLocation(icon, nativeCoordinate);
            MapControl.SetNormalizedAnchorPoint(icon, anchorPoint);
        }
        protected override void DrawCalculatedRouteInMap(RouteModel route)
        {
            var drawingManager = new MapDrawingManager(FormsMap, route.Color);

            _nativeMap.OverlayRenderer = drawingManager.GetOverlayRenderer;

            var nativeCoordinates = route.RoutePoints.Select(p => CoordinateConverter.ConvertToNative(p));

            _currentUserRoute = MKPolyline.FromCoordinates(nativeCoordinates.ToArray());

            _nativeMap.AddOverlay(_currentUserRoute);
        }
예제 #4
0
        protected override void DrawCalculatedRouteInMap(CarPool.Clients.Core.Maps.Model.RouteModel route)
        {
            var polyLine = new PolylineOptions();

            foreach (var position in route.RoutePoints)
            {
                LatLng nativePosition = CoordinateConverter.ConvertToNative(position);
                polyLine.Add(nativePosition);
            }

            polyLine.InvokeColor(route.Color.ToAndroid());

            _currentUserRoute = _nativeMap.AddPolyline(polyLine);
        }
        public override async Task <IEnumerable <Position> > CalculateRoute(RouteModel route)
        {
            Geopoint nativeFrom = CoordinateConverter.ConvertToNative(route.From);
            Geopoint nativeTo   = CoordinateConverter.ConvertToNative(route.To);

            // add route starts
            List <Geopoint> routeWaypoints = new List <Geopoint>()
            {
                nativeFrom
            };

            // add route waypoints if any
            if (route.WayPoints != null && route.WayPoints.Any())
            {
                foreach (var point in route.WayPoints)
                {
                    routeWaypoints.Add(CoordinateConverter.ConvertToNative(point));
                }
            }

            // add route ends
            routeWaypoints.Add(nativeTo);

            MapRouteFinderResult routeResult = await MapRouteFinder.GetDrivingRouteFromWaypointsAsync(
                routeWaypoints,
                MapRouteOptimization.Time,
                MapRouteRestrictions.None);

            List <Position> result = new List <Position>();
            IReadOnlyList <BasicGeoposition> routePositions = routeResult?.Route?.Path?.Positions;

            route.Distance = routeResult?.Route?.LengthInMeters ?? 0;
            route.Duration = routeResult?.Route?.EstimatedDuration.TotalMinutes ?? 0;

            if (routePositions?.Any() == true)
            {
                foreach (BasicGeoposition position in routePositions)
                {
                    result.Add(new Position(position.Latitude, position.Longitude));
                }
            }

            return(result);
        }
        public override async Task <IEnumerable <Position> > CalculateRoute(RouteModel route)
        {
            List <Position> result = new List <Position>();

            var nativeFrom = CoordinateConverter.ConvertToNative(route.From);
            var nativeTo   = CoordinateConverter.ConvertToNative(route.To);

            var actualOriginPoint = nativeFrom;

            // ios waypoints not nativelly supported
            if (route.WayPoints != null && route.WayPoints.Any())
            {
                foreach (var waypoint in route.WayPoints)
                {
                    var actualDestinationPoint = CoordinateConverter.ConvertToNative(waypoint);
                    result.AddRange(await RequestMKMapRoutePoints(route, actualOriginPoint, actualDestinationPoint));
                    actualOriginPoint = actualDestinationPoint;
                }
            }

            result.AddRange(await RequestMKMapRoutePoints(route, actualOriginPoint, nativeTo));
            return(result);
        }