예제 #1
0
        /// <inheritdoc/>
        public string ToDelimitedString()
        {
            CultureInfo culture = CultureInfo.CurrentCulture;

            return(string.Format(
                       culture,
                       StringHelper.StringFormatSequence(0, 7, Configuration.FieldSeparator),
                       Id,
                       Route?.ToDelimitedString(),
                       AdministrationSite?.ToDelimitedString(),
                       AdministrationDevice?.ToDelimitedString(),
                       AdministrationMethod?.ToDelimitedString(),
                       RoutingInstruction?.ToDelimitedString(),
                       AdministrationSiteModifier?.ToDelimitedString()
                       ).TrimEnd(Configuration.FieldSeparator.ToCharArray()));
        }
예제 #2
0
        public void CreateRoutePoint(MapPos pos, RoutingInstruction instruction, LocalVectorDataSource source)
        {
            MarkerStyle style = instructionUp;

            if (instruction.Action == RoutingAction.RoutingActionTurnRight)
            {
                style = instructionRight;
            }
            else if (instruction.Action == RoutingAction.RoutingActionTurnLeft)
            {
                style = instructionLeft;
            }

            Marker marker = new Marker(pos, style);

            source.Add(marker);
        }
예제 #3
0
        public void Show(RoutingResult result, Color lineColor)
        {
            routeDataSource.Clear();

            startMarker.Visible = false;

            Line line = CreatePolyline(startMarker.Geometry.CenterPos, stopMarker.Geometry.CenterPos, result, lineColor);

            routeDataSource.Add(line);

            // Add instruction markers
            RoutingInstructionVector instructions = result.Instructions;

            for (int i = 0; i < instructions.Count; i++)
            {
                RoutingInstruction instruction = instructions[i];
                MapPos             position    = result.Points[instruction.PointIndex];
                CreateRoutePoint(position, instruction, routeDataSource);
            }
        }
예제 #4
0
        public void Show(RoutingResult result)
        {
            routeDataSource.Clear();
            routeInstructionSource.Clear();

            var  color = new Color(0, 122, 255, 225);
            Line line  = CreatePolyline(result, color);

            routeDataSource.Add(line);

            // Add instruction markers
            RoutingInstructionVector instructions = result.Instructions;

            if (ShowTurns)
            {
                for (int i = 0; i < instructions.Count; i++)
                {
                    RoutingInstruction instruction = instructions[i];
                    MapPos             position    = result.Points[instruction.PointIndex];
                    CreateRoutePoint(position, instruction, routeInstructionSource);
                }
            }
        }
예제 #5
0
        public void showRoute(MapPos startPos, MapPos stopPos)
        {
            Log.Debug("calculating path " + startPos + " to " + stopPos);

            if (!offlinePackageReady)
            {
                RunOnUiThread(() => {
                    Toast.MakeText(ApplicationContext, "Offline package is not ready, using online routing", ToastLength.Long).Show();
                });
            }

            if (!shortestPathRunning)
            {
                shortestPathRunning = true;
                long timeStart;

                // run routing in background
                Task.Run(() => {
                    timeStart          = Java.Lang.JavaSystem.CurrentTimeMillis();
                    MapPosVector poses = new MapPosVector();
                    poses.Add(startPos);
                    poses.Add(stopPos);
                    RoutingRequest request = new RoutingRequest(baseProjection, poses);
                    RoutingResult result;
                    if (offlinePackageReady)
                    {
                        result = offlineRoutingService.CalculateRoute(request);
                    }
                    else
                    {
                        result = onlineRoutingService.CalculateRoute(request);
                    }


                    // now update response in UI thread
                    RunOnUiThread(() => {
                        if (result == null)
                        {
                            Toast.MakeText(ApplicationContext, "Routing failed", ToastLength.Long).Show();
                            shortestPathRunning = false;
                            return;
                        }

                        String routeText = "The route is " + (int)(result.TotalDistance / 100) / 10f
                                           + "km (" + secondsToHours((int)result.TotalTime)
                                           + ") calculation: " + (Java.Lang.JavaSystem.CurrentTimeMillis() - timeStart) + " ms";
                        Log.Info(routeText);

                        Toast.MakeText(ApplicationContext, routeText, ToastLength.Long).Show();

                        routeDataSource.RemoveAll();

                        startMarker.Visible = false;

                        routeDataSource.Add(createPolyline(startMarker.Geometry
                                                           .CenterPos, stopMarker.Geometry.CenterPos, result));

                        // add instruction markers
                        RoutingInstructionVector instructions = result.Instructions;
                        for (int i = 0; i < instructions.Count; i++)
                        {
                            RoutingInstruction instruction = instructions [i];
                            // Log.d(Const.LOG_TAG, instruction.toString());
                            createRoutePoint(result.Points [instruction.PointIndex], instruction.StreetName,
                                             instruction.Time, instruction.Distance, instruction.Action, routeDataSource);
                        }

                        shortestPathRunning = false;
                    });
                });
            }
        }
예제 #6
0
        public void CreateRoutePoint(MapPos pos, RoutingInstruction instruction, LocalVectorDataSource source)
        {
            MarkerStyle style = instructionUp;
            string str = "";

            switch (instruction.Action)
            {
                case RoutingAction.RoutingActionHeadOn:
                    str = "head on";
                    break;
                case RoutingAction.RoutingActionFinish:
                    str = "finish";
                    break;
                case RoutingAction.RoutingActionTurnLeft:
                    style = instructionLeft;
                    str = "turn left";
                    break;
                case RoutingAction.RoutingActionTurnRight:
                    style = instructionRight;
                    str = "turn right";
                    break;
                case RoutingAction.RoutingActionUturn:
                    str = "u turn";
                    break;
                case RoutingAction.RoutingActionNoTurn:
                case RoutingAction.RoutingActionGoStraight:
                    //style = instructionUp;
                    //str = "continue";
                    break;
                case RoutingAction.RoutingActionReachViaLocation:
                    style = instructionUp;
                    str = "stopover";
                    break;
                case RoutingAction.RoutingActionEnterAgainstAllowedDirection:
                    str = "enter against allowed direction";
                    break;
                case RoutingAction.RoutingActionLeaveAgainstAllowedDirection:
                    break;
                case RoutingAction.RoutingActionEnterRoundabout:
                    str = "enter roundabout";
                    break;
                case RoutingAction.RoutingActionStayOnRoundabout:
                    str = "stay on roundabout";
                    break;
                case RoutingAction.RoutingActionLeaveRoundabout:
                    str = "leave roundabout";
                    break;
                case RoutingAction.RoutingActionStartAtEndOfStreet:
                    str = "start at end of street";
                    break;
            }

            if (str != "")
            {
                Marker marker = new Marker(pos, style);
                BalloonPopup popup2 = new BalloonPopup(marker, balloonBuilder.BuildStyle(), str, "");

                source.Add(popup2);
                source.Add(marker);
            }
        }
예제 #7
0
        protected void CreateRoutePoint(MapPos pos, RoutingInstruction instruction, LocalVectorDataSource source)
        {
            MarkerStyle style = instructionUp;
            string      str   = "";

            switch (instruction.Action)
            {
            case RoutingAction.RoutingActionHeadOn:
                str = "head on";
                break;

            case RoutingAction.RoutingActionFinish:
                str = "finish";
                break;

            case RoutingAction.RoutingActionTurnLeft:
                style = instructionLeft;
                str   = "turn left";
                break;

            case RoutingAction.RoutingActionTurnRight:
                style = instructionRight;
                str   = "turn right";
                break;

            case RoutingAction.RoutingActionUturn:
                str = "u turn";
                break;

            case RoutingAction.RoutingActionNoTurn:
            case RoutingAction.RoutingActionGoStraight:
                //style = instructionUp;
                //str = "continue";
                break;

            case RoutingAction.RoutingActionReachViaLocation:
                style = instructionUp;
                str   = "stopover";
                break;

            case RoutingAction.RoutingActionEnterAgainstAllowedDirection:
                str = "enter against allowed direction";
                break;

            case RoutingAction.RoutingActionLeaveAgainstAllowedDirection:
                break;

            case RoutingAction.RoutingActionEnterRoundabout:
                str = "enter roundabout";
                break;

            case RoutingAction.RoutingActionStayOnRoundabout:
                str = "stay on roundabout";
                break;

            case RoutingAction.RoutingActionLeaveRoundabout:
                str = "leave roundabout";
                break;

            case RoutingAction.RoutingActionStartAtEndOfStreet:
                str = "start at end of street";
                break;
            }

            if (str != "")
            {
                Marker       marker = new Marker(pos, style);
                BalloonPopup popup2 = new BalloonPopup(marker, balloonBuilder.BuildStyle(), str, "");

                source.Add(popup2);
                source.Add(marker);
            }
        }
예제 #8
0
        public void ShowRoute(MapPos startPos, MapPos stopPos)
        {
            Log.Debug("calculating path " + startPos + " to " + stopPos);

            if (!offlinePackageReady)
            {
                RunOnUiThread(() =>
                {
                    string message = "Offline package is not ready, using online routing";
                    Toast.MakeText(ApplicationContext, message, ToastLength.Long).Show();
                });
            }

            if (!shortestPathRunning)
            {
                shortestPathRunning = true;
                long timeStart;

                // run routing in background
                Task.Run(() =>
                {
                    timeStart          = Java.Lang.JavaSystem.CurrentTimeMillis();
                    MapPosVector poses = new MapPosVector();

                    poses.Add(startPos);
                    poses.Add(stopPos);

                    RoutingRequest request = new RoutingRequest(BaseProjection, poses);
                    RoutingResult result;

                    if (offlinePackageReady)
                    {
                        result = offlineRoutingService.CalculateRoute(request);
                    }
                    else
                    {
                        result = onlineRoutingService.CalculateRoute(request);
                    }

                    // Now update response in UI thread
                    RunOnUiThread(() =>
                    {
                        if (result == null)
                        {
                            Alert("Routing failed");
                            shortestPathRunning = false;
                            return;
                        }

                        string distance    = "The route is " + (int)(result.TotalDistance / 100) / 10f + "km";
                        string time        = "(" + result.TotalTime.ConvertFromSecondsToHours() + ")";
                        string calculation = "| Calculation: " + (Java.Lang.JavaSystem.CurrentTimeMillis() - timeStart) + " ms";

                        Alert(distance + time + calculation);

                        routeDataSource.Clear();

                        startMarker.Visible = false;

                        Line line = CreatePolyline(startMarker.Geometry.CenterPos, stopMarker.Geometry.CenterPos, result);
                        routeDataSource.Add(line);

                        // Add instruction markers
                        RoutingInstructionVector instructions = result.Instructions;

                        for (int i = 0; i < instructions.Count; i++)
                        {
                            RoutingInstruction instruction = instructions[i];
                            MapPos position = result.Points[instruction.PointIndex];
                            CreateRoutePoint(position, instruction, routeDataSource);
                        }

                        shortestPathRunning = false;
                    });
                });
            }
        }
        public void ShowRoute(MapPos startPos, MapPos stopPos)
        {
            Log.Debug("calculating path " + startPos + " to " + stopPos);

            if (!offlinePackageReady)
            {
                InvokeOnMainThread(() =>
                {
                    string message = "Offline package is not ready. Using online routing";
                    Alert(message);
                });
            }

            if (!shortestPathRunning)
            {
                shortestPathRunning = true;
                long timeStart;

                // run routing in background
                System.Threading.Tasks.Task.Run(delegate
                {
                    timeStart          = DateTime.Now.ToUnixTime();
                    MapPosVector poses = new MapPosVector {
                        startPos, stopPos
                    };

                    RoutingRequest request = new RoutingRequest(BaseProjection, poses);
                    RoutingResult result;

                    if (offlinePackageReady)
                    {
                        result = offlineRoutingService.CalculateRoute(request);
                    }
                    else
                    {
                        result = onlineRoutingService.CalculateRoute(request);
                    }

                    // Now update response in UI thread
                    InvokeOnMainThread(delegate
                    {
                        if (result == null)
                        {
                            Alert("Routing failed");
                            shortestPathRunning = false;
                            return;
                        }

                        routeDataSource.Clear();

                        startMarker.Visible = false;

                        Line line = CreatePolyline(startMarker.Geometry.CenterPos, stopMarker.Geometry.CenterPos, result);
                        routeDataSource.Add(line);

                        // Add instruction markers
                        RoutingInstructionVector instructions = result.Instructions;

                        for (int i = 0; i < instructions.Count; i++)
                        {
                            RoutingInstruction instruction = instructions[i];
                            MapPos position = result.Points[instruction.PointIndex];
                            CreateRoutePoint(position, instruction, routeDataSource);
                        }

                        string distance    = "The route is " + (int)(result.TotalDistance / 100) / 10f + "km";
                        string time        = " (" + result.TotalTime.ConvertFromSecondsToHours() + ") ";
                        string calculation = "| Calculation: " + (DateTime.Now.ToUnixTime() - timeStart) + " ms";

                        Alert(distance + time + calculation);

                        shortestPathRunning = false;
                    });
                });
            }
        }