public ActionResult Create(Attraction attraction) { attraction.AttractionType = db.AttractionType.Find(attraction.AttractionType.ID); attraction.Country = db.Country.Find(attraction.Country.ID); attraction.AvgRating = 0.0; //upload photos try { int i = 0; foreach (string upload in Request.Files) { if (Request.Files[i].ContentLength == 0) continue; string path = AppDomain.CurrentDomain.BaseDirectory + "Content/AttractionImages/"; string ext = Request.Files[i].FileName.Substring(Request.Files[i].FileName.LastIndexOf('.')); AttractionImage ai = new AttractionImage { AttractionID = attraction.ID, FileName = generateRandomString(32) + ext }; attraction.Images.Add(ai); Request.Files[i].SaveAs(Path.Combine(path, ai.FileName)); i++; } } catch (NullReferenceException) { //no photo } //end of upload user photo db.Attraction.Add(attraction); db.SaveChanges(); return RedirectToAction("Details", new { id = attraction.ID }); }
public ActionResult Attractions(int count) { Random random = new Random(); for (int i = 0; i < count; ++i) { int lat = random.Next(10) > 5 ? 1 : -1; int lon = random.Next(10) > 5 ? 1 : -1; Attraction attraction = new Attraction(); attraction.Address = new Address(); attraction.Address.City = db.Place.OrderBy(x => x.ID).Skip(random.Next(db.Place.Count() - 1)).FirstOrDefault().Name; attraction.AttractionType = db.AttractionType.OrderBy(x => x.ID).Skip(random.Next(db.AttractionType.Count() - 1)).FirstOrDefault(); attraction.Coordinates = new Coordinates(); attraction.Coordinates.Latitude = random.NextDouble() * 90 * lat; attraction.Coordinates.Longitude = random.NextDouble() * 180 * lon; attraction.Country = db.Country.OrderBy(x => x.ID).Skip(random.Next(db.Country.Count() - 1)).FirstOrDefault(); attraction.Description = generateRandomText(random.Next(3, 10)); attraction.Name = "Attraction "+i.ToString(); db.Attraction.Add(attraction); db.SaveChanges(); } return RedirectToAction("Index","Attraction"); }
public string getPoints(int id) { var attractionsLists = db.AttractionsLists.Where(x => x.ListId == id).Select(x => x.AttractionId).ToList(); var attractions = db.Attraction.Include(c=>c.Coordinates).Where(x => attractionsLists.Contains(x.ID)).ToList(); Attraction[] atTab = new Attraction[attractions.Count]; if (attractions.Count == 0) return ""; atTab = attractions.ToArray(); double[,] distances = new double[atTab.Length, atTab.Length]; for (int i = 0; i < atTab.Length; i++) for (int j = 0; j < atTab.Length; j++) { double cosq = Math.Sin(atTab[i].Coordinates.Latitude) * Math.Sin(atTab[j].Coordinates.Latitude) + Math.Cos(atTab[i].Coordinates.Latitude) * Math.Cos(atTab[j].Coordinates.Latitude) * Math.Cos(atTab[i].Coordinates.Longitude - atTab[j].Coordinates.Longitude); double R = 6400; double d = (2 * Math.PI * R * Math.Acos(cosq)) / 360; distances[i, j] = d; } List<int> all = new List<int>(); for (int i=0; i<atTab.Length; i++) all.Add(i); Greedy g = new Greedy(distances, all); List<int> tmp = g.CountDistance(0); string s = "http://dev.virtualearth.net/REST/v1/Routes?"; //wp.0=london&wp.1=leeds&avoid=minimizeTolls&key= int l=0; foreach (int i in tmp) { s+=l==0?"wp.":"&wp."; s+=l+"="+atTab[i].Coordinates.Latitude+","+atTab[i].Coordinates.Longitude; l++; } s += "&routePathOutput=Points&output=json&jsonp=RouteCallback&key="; return s; }