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); }
/// <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(); } } }
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; }
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; } }
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; }
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); } } } }