public static double CalculateDistance(Xamarin.Forms.Labs.Services.Geolocation.Position location1, Xamarin.Forms.Labs.Services.Geolocation.Position location2) { double circumference = 40000.0; // Earth's circumference at the equator in km double distance = 0.0; //Calculate radians double latitude1Rad = DegreesToRadians(location1.Latitude); double longitude1Rad = DegreesToRadians(location1.Longitude); double latititude2Rad = DegreesToRadians(location2.Latitude); double longitude2Rad = DegreesToRadians(location2.Longitude); double logitudeDiff = Math.Abs(longitude1Rad - longitude2Rad); if (logitudeDiff > Math.PI) { logitudeDiff = 2.0 * Math.PI - logitudeDiff; } double angleCalculation = Math.Acos( Math.Sin(latititude2Rad) * Math.Sin(latitude1Rad) + Math.Cos(latititude2Rad) * Math.Cos(latitude1Rad) * Math.Cos(logitudeDiff)); distance = circumference * angleCalculation / (2.0 * Math.PI); return(distance); }
private async void setPinsOnMap(List <Restaurant> rest, Xamarin.Forms.Labs.Services.Geolocation.Position pos2) { foreach (Restaurant r in rest) { var position = new Position(r.lat, r.lon); var pos1 = new Xamarin.Forms.Labs.Services.Geolocation.Position() { Latitude = r.lat, Longitude = r.lon }; var distance = Xamarin.Forms.Labs.Services.Geolocation.PositionExtensions.DistanceFrom(pos1, pos2); var dist = FoodRadarDB.CalculateDistance(pos1, pos2); //maybe adjust 1000 if (dist > 500) { continue; } var pin = new Pin { Type = PinType.Place, Position = position, Label = r.name, Address = r.address }; MyMap.Pins.Add(pin); } }
private async Task <Xamarin.Forms.Labs.Services.Geolocation.Position> getUserPos() { Xamarin.Forms.Labs.Services.Geolocation.Position userPos = new Xamarin.Forms.Labs.Services.Geolocation.Position(); var locator = CrossGeolocator.Current; locator.DesiredAccuracy = 20; var position = await locator.GetPositionAsync(); userPos.Latitude = position.Latitude; userPos.Longitude = position.Longitude; return(userPos); }
private async void DibujarMapa_OnClicked(object sender, EventArgs args) { var positionsUno = (await(new Geocoder()).GetPositionsForAddressAsync(txtOrigen.Text)).ToList(); if (!positionsUno.Any()) { lblError.Text = "Origen no existe"; lblError.IsVisible = true; } var positionsDos = (await(new Geocoder()).GetPositionsForAddressAsync(txtDestino.Text)).ToList(); if (!positionsDos.Any()) { lblError.Text = "Destino no existe"; lblError.IsVisible = true; } var pos1 = new Xamarin.Forms.Labs.Services.Geolocation.Position() { Latitude = positionsUno.First().Latitude, Longitude = positionsUno.First().Longitude }; var pos2 = new Xamarin.Forms.Labs.Services.Geolocation.Position() { Latitude = positionsDos.First().Latitude, Longitude = positionsDos.First().Longitude }; Gmaps.MoveToRegion(MapSpan.FromCenterAndRadius(positionsUno.First(), Distance.FromMiles(0.1))); Gmaps.EPins.Add(new PinExtend { Name = "Origen", Location = positionsUno.First(), Details = txtOrigen.Text }); Gmaps.EPins.Add(new PinExtend { Name = "Destino", Location = positionsDos.First(), Details = txtDestino.Text }); await Gmaps.CreateRoute(positionsUno.First(), positionsDos.First()); }
private async void setPins() { //MyMap.MoveToRegion( // MapSpan.FromCenterAndRadius(new Position(position.Latitude, position.Longitude), new Distance(500))); MyMap.MoveToRegion(MapSpan.FromCenterAndRadius(new Position(-27.482276, 153.021552), new Distance(500))); var pos2 = new Xamarin.Forms.Labs.Services.Geolocation.Position() { //Latitude = position.Longitude, //Longitude = position.Latitude Latitude = -27.482276, Longitude = 153.021552 }; setPinsOnMap(App.Database.GetRestaurants().Result, pos2); }
private async void DibujarMapa_OnClicked(object sender, EventArgs args) { var positionsUno = (await (new Geocoder()).GetPositionsForAddressAsync(txtOrigen.Text)).ToList(); if (!positionsUno.Any()) { lblError.Text = "Origen no existe"; lblError.IsVisible = true; } var positionsDos = (await (new Geocoder()).GetPositionsForAddressAsync(txtDestino.Text)).ToList(); if (!positionsDos.Any()) { lblError.Text = "Destino no existe"; lblError.IsVisible = true; } var pos1 = new Xamarin.Forms.Labs.Services.Geolocation.Position() { Latitude = positionsUno.First().Latitude, Longitude = positionsUno.First().Longitude }; var pos2 = new Xamarin.Forms.Labs.Services.Geolocation.Position() { Latitude = positionsDos.First().Latitude, Longitude = positionsDos.First().Longitude }; Gmaps.MoveToRegion(MapSpan.FromCenterAndRadius(positionsUno.First(), Distance.FromMiles(0.1))); Gmaps.EPins.Add(new PinExtend { Name = "Origen", Location = positionsUno.First(), Details = txtOrigen.Text }); Gmaps.EPins.Add(new PinExtend { Name = "Destino", Location = positionsDos.First(), Details = txtDestino.Text }); await Gmaps.CreateRoute(positionsUno.First(), positionsDos.First()); }
public async Task <double> GetDistancia(string posUno, string posDos) { var positionsUno = (await(new Geocoder()).GetPositionsForAddressAsync(posUno)).ToList(); if (!positionsUno.Any()) { return(-1.0); } var positionsDos = (await(new Geocoder()).GetPositionsForAddressAsync(posDos)).ToList(); if (!positionsDos.Any()) { return(-1.0); } var pos1 = new Xamarin.Forms.Labs.Services.Geolocation.Position() { Latitude = positionsUno.First().Latitude, Longitude = positionsUno.First().Longitude //Latitude = 48.4568664, //Longitude = 35.0352648 }; var pos2 = new Xamarin.Forms.Labs.Services.Geolocation.Position() { Latitude = positionsDos.First().Latitude, Longitude = positionsDos.First().Longitude //Latitude = 48.3837615903, //Longitude = 35.0011338294 }; var distance = Xamarin.Forms.Labs.Services.Geolocation.PositionExtensions.DistanceFrom(pos1, pos2); return(distance); //System.Diagnostics.Debug.WriteLine(distance); }
public async Task<double> GetDistancia(string posUno, string posDos) { var positionsUno = (await (new Geocoder()).GetPositionsForAddressAsync(posUno)).ToList(); if (!positionsUno.Any()) { return -1.0; } var positionsDos = (await (new Geocoder()).GetPositionsForAddressAsync(posDos)).ToList(); if (!positionsDos.Any()) { return -1.0; } var pos1 = new Xamarin.Forms.Labs.Services.Geolocation.Position() { Latitude = positionsUno.First().Latitude, Longitude = positionsUno.First().Longitude //Latitude = 48.4568664, //Longitude = 35.0352648 }; var pos2 = new Xamarin.Forms.Labs.Services.Geolocation.Position() { Latitude = positionsDos.First().Latitude, Longitude = positionsDos.First().Longitude //Latitude = 48.3837615903, //Longitude = 35.0011338294 }; var distance = Xamarin.Forms.Labs.Services.Geolocation.PositionExtensions.DistanceFrom(pos1, pos2); return distance; //System.Diagnostics.Debug.WriteLine(distance); }
// ALL SEARCH FUNCTIONS ************************************* public List <Meal> SearchMeals(string searchString, Xamarin.Forms.Labs.Services.Geolocation.Position userPos = null, int distanceFilter = 0, int priceFilter = 0) { var cuisines = database.Table <Cuisine>().ToListAsync().Result; Cuisine cuisineResults = database.Table <Cuisine>().Where(i => i.name.ToLower() == searchString.ToLower()).FirstOrDefaultAsync().Result; List <Meal> mealResults = database.Table <Meal>().Where(i => i.name.ToLower().Contains(searchString.ToLower())).ToListAsync().Result; List <Meal> meals = new List <Meal>(); var ms = database.Table <Meal>().ToListAsync().Result; if (cuisineResults != null) { meals.AddRange(getMealsByCuisine(cuisineResults.Id)); } if (mealResults != null) { meals.AddRange(mealResults); } List <int> mealsToRemove = new List <int>(); if (distanceFilter != 0 && userPos != null) { //userPos = getUserPos().Result; foreach (var m in meals) { Restaurant rest = GetRestaurantById(m.restaurantId); var restPos = new Xamarin.Forms.Labs.Services.Geolocation.Position() { Latitude = rest.lat, Longitude = rest.lon }; var distance = CalculateDistance(restPos, userPos); if (distance > (distanceFilter / 1000)) { mealsToRemove.Add(m.Id); } } foreach (var i in mealsToRemove) { meals.RemoveAll(meal => meal.Id == i); } } if (priceFilter != 0) { mealsToRemove = new List <int>(); foreach (var m in meals) { if (m.price > priceFilter) { mealsToRemove.Add(m.Id); } } foreach (var i in mealsToRemove) { meals.RemoveAll(meal => meal.Id == i); } } return(meals.OrderByDescending(o => o.rating).ToList()); }