Example #1
0
        public Route Execute()
        {
            string uri = this.GetRequestUri();

            System.Net.WebRequest request = System.Net.HttpWebRequest.Create(uri);

            AutoResetEvent waitEvent = new AutoResetEvent(false);
            IAsyncResult   result    = request.BeginGetResponse((AsyncCallback) delegate(IAsyncResult ar)
            {
                waitEvent.Set();
                Thread.Sleep(0);
            }, this);

            waitEvent.WaitOne();

            RouteRestResponse response;

            using (System.IO.StreamReader str = new System.IO.StreamReader(request.EndGetResponse(result).GetResponseStream()))
            {
                response = DeserializeResponse(str.ReadToEnd());
            }

            Route restRoute = null;

            if (response.ResourceSets.Length > 0 && response.ResourceSets[0].Resources.Length > 0)
            {
                restRoute = response.ResourceSets[0].Resources[0] as Route;
            }

            if (null != restRoute)
            {
                StringBuilder sb1 = new StringBuilder();
                StringBuilder sb2 = new StringBuilder();

                foreach (RouteLeg leg in restRoute.RouteLeg)
                {
                    foreach (ItineraryItem item in leg.ItineraryItem)
                    {
                        sb1.AppendLine(item.Instruction.maneuverType + "\t" + item.Instruction.Value);
                    }
                    sb1.AppendLine();
                }

                // Apparently we don't get good traffic data from this call
                MobileSrc.Services.RouteServices.RouteServiceClient client = new Services.RouteServices.RouteServiceClient("BasicHttpBinding_IRouteService");
#if SERVER
                if (response.ResourceSets.Length > 0 && response.ResourceSets[0].Resources.Length > 0)
                {
                    Services.RouteServices.RouteRequest soapRequest = GetRequest(response.ResourceSets[0].Resources[0] as Route);

                    try
                    {
                        Services.RouteServices.RouteResponse soapResponse = client.CalculateRoute(soapRequest);
                        restRoute.TravelDuration = soapResponse.Result.Summary.TimeInSeconds;

                        foreach (MobileSrc.Services.RouteServices.RouteLeg leg in soapResponse.Result.Legs)
                        {
                            foreach (MobileSrc.Services.RouteServices.ItineraryItem item in leg.Itinerary)
                            {
                                sb2.AppendLine(item.ManeuverType + "\t" + item.Text);
                            }
                            sb2.AppendLine();
                        }
                    }
                    catch
                    {
                    }
                }
#else
                client.CalculateRouteCompleted += new EventHandler <Services.RouteServices.CalculateRouteCompletedEventArgs>
                                                  (
                    delegate(object sender, Services.RouteServices.CalculateRouteCompletedEventArgs e)
                {
                    if (null == e.Error)
                    {
                        restRoute.TravelDuration = e.Result.Result.Summary.TimeInSeconds;

                        foreach (MobileSrc.Services.RouteServices.RouteLeg leg in e.Result.Result.Legs)
                        {
                            foreach (MobileSrc.Services.RouteServices.ItineraryItem item in leg.Itinerary)
                            {
                                sb2.AppendLine(item.ManeuverType + "\t" + item.Text);
                            }
                            sb2.AppendLine();
                        }
                    }
                    waitEvent.Set();
                }
                                                  );
                if (response.ResourceSets.Length > 0 && response.ResourceSets[0].Resources.Length > 0)
                {
                    Services.RouteServices.RouteRequest soapRequest = GetRequest(response.ResourceSets[0].Resources[0] as Route);
                    client.CalculateRouteAsync(soapRequest);
                }

                waitEvent.WaitOne();
#endif
            }

            return(restRoute);
        }
Example #2
0
        private Services.RouteServices.RouteRequest GetRequest(Route response)
        {
            Services.RouteServices.RouteRequest request = new Services.RouteServices.RouteRequest();
            request.Waypoints = new List <Services.RouteServices.Waypoint>();
            request.Waypoints.Add(new Services.RouteServices.Waypoint());

            request.Credentials = new Services.RouteServices.Credentials();
            request.Credentials.ApplicationId = this.ApplicationId;
            request.Waypoints[0].Location     = new Services.RouteServices.Location();

            request.Waypoints[0].Location.Latitude  = this.Waypoints[0].Location.Latitude;
            request.Waypoints[0].Location.Longitude = this.Waypoints[0].Location.Longitude;

            ItineraryItem[] items = new ItineraryItem[response.RouteLeg[0].ItineraryItem.Length];
            response.RouteLeg[0].ItineraryItem.CopyTo(items, 0);

            Array.Sort <ItineraryItem>(items, new Comparison <ItineraryItem>(CompareItinerary));

            int counter = 1;

            List <ItineraryItem> validItems = new List <ItineraryItem>();

            for (int i = 0; i < 23 && i < items.Length; ++i)
            {
                validItems.Add(items[i]);
            }

            foreach (ItineraryItem item in response.RouteLeg[0].ItineraryItem)
            {
                if (validItems.Contains(item))
                {
                    request.Waypoints.Add(new Services.RouteServices.Waypoint());
                    request.Waypoints[request.Waypoints.Count - 1].Location           = new Services.RouteServices.Location();
                    request.Waypoints[request.Waypoints.Count - 1].Location.Latitude  = item.ManeuverPoint.Latitude;
                    request.Waypoints[request.Waypoints.Count - 1].Location.Longitude = item.ManeuverPoint.Longitude;

                    counter++;

                    if (counter >= 23)
                    {
                        break;
                    }
                }
            }

            /*
             * int itemCount = 23;
             * int increment = (int)Math.Max(1, Math.Floor(response.RoutePath.Line.Point.Length / (double)itemCount));
             * for (int i = 0; i < itemCount && i < response.RoutePath.Line.Point.Length; i += increment)
             * {
             *  Point item = response.RoutePath.Line.Point[i];
             *  request.Waypoints.Add(new Services.RouteServices.Waypoint());
             *  request.Waypoints[request.Waypoints.Count - 1].Location = new Services.RouteServices.Location();
             *  request.Waypoints[request.Waypoints.Count - 1].Location.Latitude = item.Latitude;
             *  request.Waypoints[request.Waypoints.Count - 1].Location.Longitude = item.Longitude;
             * }
             */
            request.Waypoints.Add(new Services.RouteServices.Waypoint());
            request.Waypoints[request.Waypoints.Count - 1].Location           = new Services.RouteServices.Location();
            request.Waypoints[request.Waypoints.Count - 1].Location.Latitude  = this.Waypoints[this.Waypoints.Count - 1].Location.Latitude;
            request.Waypoints[request.Waypoints.Count - 1].Location.Longitude = this.Waypoints[this.Waypoints.Count - 1].Location.Longitude;

            // Only accept results with high confidence.
            request.Options = new Services.RouteServices.RouteOptions();
            request.Options.RoutePathType = Services.RouteServices.RoutePathType.None;
            request.Options.TrafficUsage  = Services.RouteServices.TrafficUsage.TrafficBasedTime;

            return(request);
        }
Example #3
0
        private Services.RouteServices.RouteRequest GetRequest(Route response)
        {
            Services.RouteServices.RouteRequest request = new Services.RouteServices.RouteRequest();
            request.Waypoints = new List<Services.RouteServices.Waypoint>();
            request.Waypoints.Add(new Services.RouteServices.Waypoint());

            request.Credentials = new Services.RouteServices.Credentials();
            request.Credentials.ApplicationId = this.ApplicationId;
            request.Waypoints[0].Location = new Services.RouteServices.Location();

            request.Waypoints[0].Location.Latitude = this.Waypoints[0].Location.Latitude;
            request.Waypoints[0].Location.Longitude = this.Waypoints[0].Location.Longitude;

            ItineraryItem[] items = new ItineraryItem[response.RouteLeg[0].ItineraryItem.Length];
            response.RouteLeg[0].ItineraryItem.CopyTo(items, 0);

            Array.Sort<ItineraryItem>(items, new Comparison<ItineraryItem>(CompareItinerary));

            int counter = 1;

            List<ItineraryItem> validItems = new List<ItineraryItem>();

            for (int i = 0; i < 23 && i < items.Length; ++i)
            {
                validItems.Add(items[i]);
            }

            foreach (ItineraryItem item in response.RouteLeg[0].ItineraryItem)
            {
                if (validItems.Contains(item))
                {
                    request.Waypoints.Add(new Services.RouteServices.Waypoint());
                    request.Waypoints[request.Waypoints.Count - 1].Location = new Services.RouteServices.Location();
                    request.Waypoints[request.Waypoints.Count - 1].Location.Latitude = item.ManeuverPoint.Latitude;
                    request.Waypoints[request.Waypoints.Count - 1].Location.Longitude = item.ManeuverPoint.Longitude;

                    counter++;

                    if (counter >= 23)
                    {
                        break;
                    }
                }
            }

            /*
            int itemCount = 23;
            int increment = (int)Math.Max(1, Math.Floor(response.RoutePath.Line.Point.Length / (double)itemCount));
            for (int i = 0; i < itemCount && i < response.RoutePath.Line.Point.Length; i += increment)
            {
                Point item = response.RoutePath.Line.Point[i];
                request.Waypoints.Add(new Services.RouteServices.Waypoint());
                request.Waypoints[request.Waypoints.Count - 1].Location = new Services.RouteServices.Location();
                request.Waypoints[request.Waypoints.Count - 1].Location.Latitude = item.Latitude;
                request.Waypoints[request.Waypoints.Count - 1].Location.Longitude = item.Longitude;
            }
            */
            request.Waypoints.Add(new Services.RouteServices.Waypoint());
            request.Waypoints[request.Waypoints.Count - 1].Location = new Services.RouteServices.Location();
            request.Waypoints[request.Waypoints.Count - 1].Location.Latitude = this.Waypoints[this.Waypoints.Count - 1].Location.Latitude;
            request.Waypoints[request.Waypoints.Count - 1].Location.Longitude = this.Waypoints[this.Waypoints.Count-1].Location.Longitude;

            // Only accept results with high confidence.
            request.Options = new Services.RouteServices.RouteOptions();
            request.Options.RoutePathType = Services.RouteServices.RoutePathType.None;
            request.Options.TrafficUsage = Services.RouteServices.TrafficUsage.TrafficBasedTime;

            return request;
        }