Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }