// get all lots from database API public async Task GetLots(Task <List <Campus> > converted) { List <Campus> campuses = await converted; foreach (Campus campus in campuses) { string text = "http://35.9.22.105/campuses/" + campus.GetId() + "/lots"; var uri = new Uri(text); var response = await client.GetAsync(uri); if (response.IsSuccessStatusCode) { var content = await response.Content.ReadAsStringAsync(); campus.ConvertLots(JsonConvert.DeserializeObject <ServerJSONLots>(content)); map.DrawLots(campus.GetName()); } } }
public MapPage(string selectedRole, string buildingName, string campusName) { InitializeComponent(); mCampusName = campusName; mBuildingName = buildingName; mRole = selectedRole; this.Title = mBuildingName; if (Application.Current.Properties.ContainsKey("map")) { map = (GMTEMap)Application.Current.Properties["map"]; } else { // Creates campuses objects and draws them map.AddCampus(campusName); // Assigns title of page to building that is to be going to this.Title = buildingName; Task addBuild = map.DrawBuildings(campusName); map.DrawLots(campusName); } string font; switch (Device.RuntimePlatform) { case "iOS": font = "AppleSDGothicNeo-UltraLight"; break; case "Android": font = "Droid Sans Mono"; break; default: font = "Comic Sans MS"; break; } client = new HttpClient(); client.MaxResponseContentBufferSize = 256000; var lotTask = GetLotOrder(); var lotLabel = new Label { FontFamily = font, TextColor = Color.Blue }; var goingToLabel = new Label { FontFamily = font, TextColor = Color.Green, }; lotLabel.SetBinding(Label.TextProperty, new Binding("Lots", stringFormat: "{0}")); goingToLabel.SetBinding(Label.TextProperty, new Binding("GoingTo", stringFormat: "Going to: {0}")); var button = new Button() { Text = "Start Directions!", Font = Font.SystemFontOfSize(NamedSize.Large), FontFamily = font, CommandParameter = new double() }; button.Clicked += OnClicked; button.SetBinding(Button.CommandParameterProperty, new Binding("Pos")); stack.Children.Add(lotLabel); stack.Children.Add(goingToLabel); stack.Children.Add(map); stack.Children.Add(button); stack.BindingContext = new { Lots = "Retrieving closest lots..." }; stack.BindingContext = stack.Children[0].BindingContext; this.Content = stack; Task stackTask = ConvertLots(lotTask); AwaitTask(stackTask); map.SpanToBuilding(buildingName, campusName); StartGeoLocation(); CrossGeolocator.Current.PositionChanged += (o, args) => { if ((map.CheckInGeofences(args.Position)) && (onCampus == false)) { Device.BeginInvokeOnMainThread(() => { mCurrentCampus = map.InWhichGeofences(args.Position); DisplayAlert("Welcome to " + mCurrentCampus + "!", "We hope you find your way around!", "Okay"); DependencyService.Get <ITextToSpeech>().Speak("Welcome to " + mCurrentCampus); onCampus = true; }); } else if ((map.CheckInGeofences(args.Position) == false) && (onCampus == true)) { Device.BeginInvokeOnMainThread(() => { DisplayAlert("Now leaving " + mCurrentCampus, "Did you mean to do that?", "Maybe?"); onCampus = false; mCurrentCampus = ""; }); } if (map.CheckInLotGeofences(args.Position, mCurrentCampus) && (mParked == false) && (inLot == false)) { Device.BeginInvokeOnMainThread(() => { mCurrentLot = map.InWhichLot(args.Position, mCurrentCampus); DisplayAlert("You are in lot " + mCurrentLot + "!", "We hope you find a spot!", "Okay"); DependencyService.Get <ITextToSpeech>().Speak("You are in lot " + mCurrentLot); }); inLot = true; } if ((mParked) && (mShown == false)) { Device.BeginInvokeOnMainThread(() => { DisplayAlert("You Parked!", "We detected that you parked in " + mLotParked, "Okay"); DependencyService.Get <ITextToSpeech>().Speak("You Parked in " + mLotParked); }); mShown = true; } if ((map.InWhichLot(args.Position, mCurrentCampus) != mCurrentLot) && (mCurrentLot != "") && (mTimerStarted == false) && (mParked == false)) { Device.BeginInvokeOnMainThread(() => { DisplayAlert("Now leaving " + mCurrentLot, "Start parking-detection algorithm", "Start"); }); mLotParked = mCurrentLot; mCurrentLot = ""; mTimerStarted = true; if (map.CheckInLotGeofences(args.Position, mCurrentCampus)) { inLot = true; } else { inLot = false; } Device.StartTimer(TimeSpan.FromSeconds(.5), new Func <bool>(() => CheckSpeed(args.Position))); } if ((map.CheckInLotGeofences(args.Position, mCurrentCampus) == false) && (mParked == false)) { mCurrentLot = ""; inLot = false; } }; }