public async Task <ICollection <AddressAM> > GetNearestAddresses(AddressKind kind, Coordinate originCoordinate, double distance = 500, int maxResultCount = 5)
        {
            var coordinateBounds = await DirectionService.GetCoordinateBounds(originCoordinate, distance);

            var domainAddresses = await DomainAddressService.GetByCoordinateBounds(
                kind,
                coordinateBounds.MinLatitude,
                coordinateBounds.MinLongitude,
                coordinateBounds.MaxLatitude,
                coordinateBounds.MaxLongitude);

            var nearestDomainAddresses = new List <Address>();

            if (domainAddresses.Any())
            {
                var nearestCoordinates = await DirectionService.GetNearestCoordinates(originCoordinate, domainAddresses.Select(a => a.ToCoordinate()), maxResultCount);

                foreach (var coordinate in nearestCoordinates)
                {
                    var domainAddress = domainAddresses.First(a => a.Latitude.Equals(coordinate.Latitude) && a.Longitude.Equals(coordinate.Longitude));
                    nearestDomainAddresses.Add(domainAddress);
                }
            }

            return(FromDomainAddresses(nearestDomainAddresses));
        }
        public async Task <Address> GetOrCreateDomainAddress(AddressAM address)
        {
            var result = await DomainAddressService.GetByCoordinate(address.Latitude, address.Longitude);

            if (result == null)
            {
                result = await CreateDomainAddress(AddressKind.Other, address);
            }

            return(result);
        }
 public Task <Address> CreateDomainAddress(AddressKind kind, AddressAM address)
 {
     return(DomainAddressService.Create(
                kind,
                address.Request,
                address.Country,
                address.Province,
                address.Area,
                address.Locality,
                address.District,
                address.Street,
                address.House,
                address.Latitude,
                address.Longitude,
                address.AdjustedLatitude,
                address.AdjustedLongitude));
 }
 public Task <string> GetShortTitle(int addressId)
 {
     return(DomainAddressService.GetShortTitle(addressId));
 }
 public Task <Address> GetDomainAddress(int addressId)
 {
     return(DomainAddressService.Get(addressId));
 }
 public Task <Address> GetDomainAddressByCoordinate(Coordinate coordinate)
 {
     return(DomainAddressService.GetByCoordinate(coordinate.Latitude, coordinate.Longitude));
 }