Exemple #1
0
        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);
        }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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());
        }
Exemple #5
0
        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);
        }
Exemple #9
0
        // 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());
        }