public async Task <IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req, ILogger log) { double lat = double.Parse(req.Query["lat"]); double lng = double.Parse(req.Query["lng"]); var origin = new GeoCoordinate(lat, lng); var jump = 0.0025; // +1,-1 +1,0 +1,+1 // 0,-1 oo 0,+1 // -1,-1 -1,0 -1,+1 var surroundingArea = new List <GeoCoordinate> { new GeoCoordinate(origin.Latitude + jump, origin.Longitude - jump), new GeoCoordinate(origin.Latitude + jump, origin.Longitude), new GeoCoordinate(origin.Latitude + jump, origin.Longitude + jump), new GeoCoordinate(origin.Latitude, origin.Longitude - jump), origin, new GeoCoordinate(origin.Latitude, origin.Longitude + jump), new GeoCoordinate(origin.Latitude - jump, origin.Longitude - jump), new GeoCoordinate(origin.Latitude - jump, origin.Longitude), new GeoCoordinate(origin.Latitude - jump, origin.Longitude + jump) }; List <NearByResult> results = new List <NearByResult>(); try { foreach (GeoCoordinate pos in surroundingArea) { List <NearByResult> places = await GetNearByPlaces(pos.Latitude, pos.Longitude); foreach (NearByResult place in places) { if (!results.Any(x => x.PlaceId == place.PlaceId)) { results.Add(place); } } } foreach (NearByResult nearByResult in results) { GooglePlacesPto googlePlacesPto = Context.GooglePlaces.Find(nearByResult.PlaceId); if (googlePlacesPto != null) { // update log.LogInformation($"Updating Google Places {googlePlacesPto.Id}"); nearByResult.Adapt(googlePlacesPto); googlePlacesPto.Updated = DateTime.Now; Context.GooglePlaces.Update(googlePlacesPto); } else { // insert log.LogInformation($"Inserting new Google Places {nearByResult.PlaceId}"); googlePlacesPto = new GooglePlacesPto(); nearByResult.Adapt(googlePlacesPto); googlePlacesPto.Updated = DateTime.Now; PlacePto placePto = FindExistingPlace(log, lat, lng, googlePlacesPto.Name); if (placePto == null) { placePto = new PlacePto { Location = new Point(googlePlacesPto.Longitude, googlePlacesPto.Latitude) { SRID = 4326 }, Name = googlePlacesPto.Name, GooglePlaces = googlePlacesPto }; Context.Places.Add(placePto); } googlePlacesPto.Place = placePto; Context.GooglePlaces.Add(googlePlacesPto); } Context.SaveChanges(); await RemoveCachedPlace(log, googlePlacesPto.PlaceId.ToString()); } Context.SaveChanges(); } catch (Exception ex) { throw; } return(new OkResult()); }