Ejemplo n.º 1
0
        public static List <StreetCrossing> GetCrossingStreets(int estadoID, int delegacionID, int coloniaID, Street street)
        {
            var streets = new List <StreetCrossing>();

            WebClient client = new WebClient();
            string    data   = client.DownloadString(string.Format("http://santander.mapasactivos.com/corner_selector2.asp?pob={0}&suc=1&c={1}&cd=1&m={0}&e=" + estadoID + "&d=1&tu=4&icl={1}&id1={2}", delegacionID, coloniaID, street.SourceID));

            Regex regex = new Regex("parent.corners\\[ parent.corners.length \\] = \"(.*?)\";  parent.idCalles\\[ parent.idCalles.length \\] = \"(.*?)\";");

            foreach (Match match in regex.Matches(data))
            {
                StreetCrossing cs = new StreetCrossing {
                    SourceID = int.Parse(match.Groups[2].Value), Name = match.Groups[1].Value
                };
                //var coords = GetCoordinates(estadoID, delegacionID, coloniaID, street.SourceID, cs.SourceID);
                cs.Lat = 0; //coords.Item1;
                cs.Lng = 0; //coords.Item2;

                cs.Street  = street;
                cs.Street1 = street;

                streets.Add(cs);
            }

            return(streets);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Sets route active on web - doesn't do indexing!!
        /// </summary>
        /// <param name="id"></param>
        public static void ActivateRoute(int id)
        {
            using (var context = new DataContext())
            {
                var dlo = new System.Data.Linq.DataLoadOptions();
                dlo.LoadWith<Route>(x => x.RoutePieces);
                dlo.LoadWith<Route>(x => x.Type);
                context.LoadOptions = dlo;

                var route = context.Routes.FirstOrDefault(x => x.ID == id);
                if (route != null && route.Status != (int)StatusEnum.ActiveAndIndexed)
                {
                    // recalc streetcrossing ids
                    foreach (var routePiece in route.RoutePieces)
                    {
                        StreetCrossing crossing = DataHandler.GetCrossing(routePiece.Lat, routePiece.Lng);
                        routePiece.StreetCrossingID = crossing == null ? (int?)null : crossing.ID;
                    }

                    route.Status = (int)StatusEnum.Active;

                    context.SubmitChanges();
                }
            }
        }
Ejemplo n.º 3
0
        public static string GetNameAtPosition(double lat, double lng, double maxDistance = ViaDFGraph.M100_IN_DEGREES)
        {
            string poiName = GetPOIName(lat, lng);
            if (!string.IsNullOrWhiteSpace(poiName))
            {
                return poiName;
            }

            StreetCrossing crossing = GetCrossing(lat, lng, maxDistance);
            if (crossing != null)
            {
                return Utils.Capitalize(crossing.Street.Name) + " y " + Utils.Capitalize(crossing.Street1.Name);
            }
            return null;
        }
Ejemplo n.º 4
0
        public static StreetCrossing GetCrossing(double lat, double lng, double maxDistance = ViaDFGraph.M100_IN_DEGREES)
        {
            using (var context = new DataContext())
            {
                var dlo = new System.Data.Linq.DataLoadOptions();
                dlo.LoadWith<StreetCrossing>(x => x.Street);
                dlo.LoadWith<StreetCrossing>(x => x.Street1);
                context.LoadOptions = dlo;

                StreetCrossing crossing = context.ExecuteQuery<StreetCrossing>("SELECT TOP 1 * FROM StreetCrossing ORDER BY ABS(Lat - {0}) + ABS(Lng - {1}) ", lat, lng).FirstOrDefault();
                if (crossing != null && Math.Abs(crossing.Lat - lat) + Math.Abs(crossing.Lng - lng) < maxDistance)
                {
                    return crossing;
                }
                return null;
            }
        }
Ejemplo n.º 5
0
        public static StreetCrossing GetCrossingInMemory(double lat, double lng, double maxDistance = ViaDFGraph.M100_IN_DEGREES)
        {
            if (AllCrossings == null)
            {
                using (var context = new DataContext())
                {
                    var dlo = new System.Data.Linq.DataLoadOptions();
                    dlo.LoadWith<StreetCrossing>(x => x.Street);
                    dlo.LoadWith<StreetCrossing>(x => x.Street1);
                    context.LoadOptions = dlo;
                    AllCrossings = new DataContext().StreetCrossings.ToList();
                }
            }

            StreetCrossing crossing = AllCrossings.Aggregate((curmin, x) => (curmin == null || Math.Abs(x.Lat - lat) + Math.Abs(x.Lng - lng) < Math.Abs(curmin.Lat - lat) + Math.Abs(curmin.Lng - lng) ? x : curmin));
            if (crossing != null && Math.Abs(crossing.Lat - lat) + Math.Abs(crossing.Lng - lng) < maxDistance)
            {
                return crossing;
            }

            return null;
        }
Ejemplo n.º 6
0
        public static void ProcessGeoInformation()
        {
            using (var context = new DataContext())
            {
                foreach (var cs in context.StreetCrossings)
                {
                    if (cs.Lng == 0 || cs.Lat == 0)
                    {
                        StreetCrossing inverseCrossing = null;
                        var            streets         = context.Streets.Where(x => x.SourceID == cs.SourceID && x.ColoniaID == cs.Street.ColoniaID).ToList();
                        if (streets.Count == 1)
                        {
                            var street           = streets.First();
                            var inverseCrossings = context.StreetCrossings.Where(x => x.StreetID == street.ID && x.SourceID == cs.Street.SourceID).ToList();
                            if (inverseCrossings.Count == 1)
                            {
                                inverseCrossing = inverseCrossings.First();
                            }
                        }

                        if (inverseCrossing != null && inverseCrossing.Lat != 0 && inverseCrossing.Lng != 0)
                        {
                            cs.Lat = inverseCrossing.Lat;
                            cs.Lng = inverseCrossing.Lng;
                        }
                        else
                        {
                            var coords = GetCoordinates(cs.Street.Colonia.Delegacion.Estado.SourceID, cs.Street.Colonia.Delegacion.SourceID, cs.Street.Colonia.SourceID, cs.Street.SourceID, cs.SourceID);
                            cs.Lat = coords.Item1;
                            cs.Lng = coords.Item2;
                        }
                        context.SubmitChanges();
                        Console.WriteLine(cs.Street.Name + " " + cs.Name + " " + cs.Lat + " " + cs.Lng);
                    }
                }
            }
        }