コード例 #1
0
        public List <string> Get(string from, string to, string startTime = null, string priorities = null, string customize = null, string transportTypes = null, string goingSpeed = null, string dopTimeMinutes = null)
        {
            try
            {
                Database.TryInitialize();

                double my_x0;
                double my_y0;
                OptimalRoute.GeoCoords fromPosition = null;
                double my_x1;
                double my_y1;
                OptimalRoute.GeoCoords toPosition = null;

                string[] tmp = from.Split(',');
                if (tmp.Length != 2 || !double.TryParse(tmp[0], System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out my_x0) || !double.TryParse(tmp[1], System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out my_y0))
                {
                    tmp = to.Split(',');
                    if (tmp.Length == 2 && double.TryParse(tmp[0], System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out my_x1) && double.TryParse(tmp[1], System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out my_y1))
                    {
                        toPosition = new OptimalRoute.GeoCoords(my_x1, my_y1);
                    }
                    fromPosition = GoogleApi.GetCoords(from, toPosition);
                }
                else
                {
                    fromPosition = new OptimalRoute.GeoCoords(my_x0, my_y0);
                }


                if (toPosition == null)
                {
                    tmp = to.Split(',');
                    if (tmp.Length != 2 || !double.TryParse(tmp[0], System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out my_x1) || !double.TryParse(tmp[1], System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out my_y1))
                    {
                        toPosition = GoogleApi.GetCoords(to, fromPosition);
                    }
                    else
                    {
                        toPosition = new OptimalRoute.GeoCoords(my_x1, my_y1);
                    }
                }

                Dictionary <OptimalRoute.Priority, double> myPriorities = new Dictionary <OptimalRoute.Priority, double>();
                myPriorities.Add(OptimalRoute.Priority.MinimalTime, 1);

                DateTime myStartTime;
                //MessageBox.Show(DateTime.Now.ToShortTimeString());
                if (startTime == null)
                {
                    myStartTime = DateTime.Now;
                }
                else
                {
                    myStartTime = DateTime.Parse(startTime);
                    if (myStartTime < DateTime.Now)
                    {
                        myStartTime += TimeSpan.FromDays(1);
                    }
                }

                double percentTotalTime      = 1;
                double percentTotalGoingTime = 1;
                double percentTotalTransportChangingCount = 1;

                List <OptimalRoute.RouteType> types = null;
                if (transportTypes != null)
                {
                    try
                    {
                        string[] rTypes = transportTypes.Split(',');
                        types = new List <OptimalRoute.RouteType>();
                        foreach (string s in rTypes)
                        {
                            try
                            {
                                types.Add(OptimalRoute.RouteTypeConverter.FromString(s));
                            }
                            catch
                            {
                                continue;
                            }
                        }
                    }
                    catch
                    {
                        types = null;
                    }
                }

                if (customize != null)
                {
                    string[] tmpCustomize = customize.Split('|');
                    foreach (string s in tmpCustomize)
                    {
                        string[] ss = s.Split(',');
                        if (ss.Length != 2)
                        {
                            throw new FormatException();
                        }
                        if (ss[0].Equals("totalTime", StringComparison.InvariantCultureIgnoreCase))
                        {
                            percentTotalTime = double.Parse(ss[1], System.Globalization.CultureInfo.InvariantCulture);
                        }
                        else if (ss[0].Equals("totalGoingTime", StringComparison.InvariantCultureIgnoreCase))
                        {
                            percentTotalGoingTime = double.Parse(ss[1], System.Globalization.CultureInfo.InvariantCulture);
                        }
                        else if (ss[0].Equals("totalTransportChangingCount", StringComparison.InvariantCultureIgnoreCase))
                        {
                            percentTotalTransportChangingCount = double.Parse(ss[1], System.Globalization.CultureInfo.InvariantCulture);
                        }
                    }
                }
                double my_speed = 5;
                if (goingSpeed != null)
                {
                    if (!double.TryParse(goingSpeed, out my_speed) || my_speed <= 0)
                    {
                        my_speed = 5;
                    }
                }
                double my_dopTimeMinutes = 2;
                if (dopTimeMinutes != null)
                {
                    if (!double.TryParse(dopTimeMinutes, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out my_dopTimeMinutes) || my_dopTimeMinutes < 0)
                    {
                        my_dopTimeMinutes = 2;
                    }
                }

                //Database.Connect();!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                OptimalRoute res = OptimalRoute.GetBestOptimalRoute(fromPosition, toPosition, myStartTime, myPriorities, types, my_speed, my_dopTimeMinutes, percentTotalTime, percentTotalGoingTime, percentTotalTransportChangingCount);//new OptimalRoute(from, to, DateTime.Now);
                //Database.Disconnect();
                return(res.points);
            }
            catch (Exception ex)
            {
                //MessageBox.Show("111111"+ex.Message);
                return(null);
            }
            finally
            {
                //Database.Disconnect();
            }
        }