public async Task <string> ReadFromCache(DecimalCoordinatePairModel coordinateModel) { var folderName = GetFolderName(coordinateModel.Latitude); if (!folderName.Exists()) { return(null); } var fileName = GetFileName(folderName, coordinateModel.Latitude); if (!fileName.Exists()) { return(null); } var fileContents = await fileName.ReadJson <List <ReverseGeocodeModel> >(); if (fileContents.Exists(entry => entry.Longitude == coordinateModel.Longitude)) { return(fileContents.Single(entry => entry.Longitude == coordinateModel.Longitude).LocationText); } return(null); }
public async Task SaveToCache(DecimalCoordinatePairModel coordinateModel, string locationText) { var folderName = GetFolderName(coordinateModel.Latitude); if (!folderName.Exists()) { Directory.CreateDirectory(folderName); await UpdateCacheDirectory(folderName); } var entry = new ReverseGeocodeModel { Latitude = coordinateModel.Latitude, Longitude = coordinateModel.Longitude, LocationText = locationText, }; var fileName = GetFileName(folderName, coordinateModel.Latitude); if (!fileName.Exists()) { var entries = new List <ReverseGeocodeModel> { entry }; await fileName.WriteJson(entries); } var fileContents = await fileName.ReadJson <List <ReverseGeocodeModel> >(); if (!fileContents.Exists(fc => fc.Longitude == coordinateModel.Longitude)) { fileContents.Add(entry); await fileName.WriteJson(fileContents); } }
private async Task <string> CallReverseGeocodeApi(DecimalCoordinatePairModel coordinateModel) { var url = $"https://maps.googleapis.com/maps/api/geocode/json?latlng={coordinateModel.Latitude},{coordinateModel.Longitude}&language=ja&key={apiKey}"; var client = new HttpClient(); var response = await client.GetAsync(url); var jsonResponse = await response.Content.ReadAsStringAsync(); dynamic obj = JsonConvert.DeserializeObject(jsonResponse); var result = $"{obj.results[0].address_components[2].long_name} {obj.results[0].address_components[3].long_name} {obj.results[0].address_components[5].long_name}"; return(result); }
public async Task <string> ReverseGeocode(DecimalCoordinatePairModel coordinateModel) { var helper = new CacheHelper("./"); var cachedLocationText = await helper.ReadFromCache(coordinateModel); if (string.IsNullOrWhiteSpace(cachedLocationText)) { var locationText = await CallReverseGeocodeApi(coordinateModel); await helper.SaveToCache(coordinateModel, locationText); return(locationText); } return(cachedLocationText); }