1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- using System;
- using System.Linq;
- using Geocoding;
- using Geocoding.Google;
- using InABox.Core;
- using Address = InABox.Core.Address;
- using Location = Geocoding.Location;
- namespace Comal.Stores
- {
- public static class StoreUtils
- {
- public static string GoogleAPIKey { get; set; }
- public static void RegisterClasses()
- {
- CoreUtils.RegisterClasses(typeof(StoreUtils).Assembly);
- }
- public static void Geocode(Address address)
- {
- if (!address.IsChanged())
- return;
- if (string.IsNullOrEmpty(address.Street) || string.IsNullOrEmpty(address.City) || string.IsNullOrEmpty(address.State))
- {
- address.Location.Latitude = 0.0F;
- address.Location.Longitude = 0.0F;
- address.Location.Timestamp = DateTime.MinValue;
- return;
- }
- try
- {
- if (!string.IsNullOrWhiteSpace(GoogleAPIKey))
- {
- IGeocoder geocoder = new GoogleGeocoder(GoogleAPIKey);
- var add = geocoder.GeocodeAsync(string.Format("{0} {1} {2} Australia", address.Street, address.City, address.State)).Result
- .FirstOrDefault();
- if (add != null)
- {
- address.Location.Latitude = add.Coordinates.Latitude;
- address.Location.Longitude = add.Coordinates.Longitude;
- address.Location.Timestamp = DateTime.Now;
- }
- }
- }
- catch (Exception e)
- {
- address.Location.Latitude = 0.0F;
- address.Location.Longitude = 0.0F;
- address.Location.Timestamp = DateTime.MinValue;
- }
- }
- public static string ReverseGeocode(double latitude, double longitude)
- {
- if (string.IsNullOrEmpty(GoogleAPIKey))
- return "";
- IGeocoder geocoder = new GoogleGeocoder(GoogleAPIKey);
- var add = geocoder.ReverseGeocodeAsync(new Location(latitude, longitude)).Result.FirstOrDefault();
- return add != null ? add.FormattedAddress : "";
- }
- }
- }
|