Пример #1
0
        public static DbGeography GeocodeAddress(string address)
        {
            var geocoderService = new Geocoder.GeocodeService();

            var location = geocoderService.GeocodeLocation(address);

            return(DbGeography.FromText($"POINT({location.Longitude} {location.Latitude})"));
        }
Пример #2
0
        public IHttpActionResult GetResults(JobDetail jobDetail)
        {
            var geocoder     = new Geocoder.GeocodeService();
            var fromLocation = geocoder.GeocodeLocation($"{jobDetail.FromStreetAddress} {jobDetail.FromCity} {jobDetail.FromState} {jobDetail.FromZip}");
            var toLocation   = geocoder.GeocodeLocation($"{jobDetail.ToStreetAddress} {jobDetail.ToCity} {jobDetail.ToState} {jobDetail.ToZip}");

            jobDetail.FromLocation = DbGeography.FromText($"POINT({fromLocation.Longitude} {fromLocation.Latitude})");
            jobDetail.ToLocation   = DbGeography.FromText($"POINT({toLocation.Longitude} {toLocation.Latitude})");
            var DTO =
                new
            {
                jobDetail.MovingDay,
                jobDetail.FromLocation,
                jobDetail.ToLocation,
                jobDetail.NumMovers,
                jobDetail.NumHours,
                Distance = Math.Round((jobDetail.ToLocation.Distance(jobDetail.FromLocation) ?? 0) / 1609.344, 2)
            };


            var resultSet = db.Companys

                            // go through list of companies, if c.radius is > distance between company and movingFROM location

                            .Where(c => c.Radius >= Math.Round((c.Location.Distance(DTO.FromLocation) ?? 0) / 1609.344, 2))

                            // if c.radius > distance between company and movingTO location

                            .Where(c => c.Radius >= Math.Round((c.Location.Distance(DTO.ToLocation) ?? 0) / 1609.344, 2))

                            // checks whether a company's movers are available on a given day

                            .Where(c => c.Employees -
                                   c.Orders.Where(o => o.JobDetail.MovingDay >= DTO.MovingDay && o.JobDetail.MovingDay <= (DTO.MovingDay ?? new DateTime()).AddDays(1))
                                   .Sum(o => o.JobDetail.NumMovers) >= DTO.NumMovers)
                            .Select(c => new
            {
                c.CompanyId,
                c.CompanyName,
                c.Telephone,
                c.StreetAddress,
                c.City,
                c.State,
                c.Zip,
                c.Employees,
                c.Radius,
                c.HourlyRate,
                Price = DTO.NumMovers * DTO.NumHours * c.HourlyRate + (decimal)(DTO.Distance * 0.8),                      // andrij approved
                //ToDistance = Math.Round((c.Location.Distance(DTO.ToLocation) ?? 0) / 1609.344, 2),
                //FromDistance = Math.Round((c.Location.Distance(DTO.FromLocation) ?? 0) / 1609.344, 2)
            });

            return(Ok(resultSet));
        }
Пример #3
0
        public IHttpActionResult PostCompany(Company company)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var geocoder = new Geocoder.GeocodeService();
            var location = geocoder.GeocodeLocation($"{company.StreetAddress} {company.City} {company.State} {company.Zip}");

            company.Location = DbGeography.FromText($"POINT({location.Longitude} {location.Latitude})");


            db.Companys.Add(company);
            db.SaveChanges();

            return(CreatedAtRoute("DefaultApi", new { id = company.CompanyId }, company));
        }
        public IHttpActionResult PostJobDetail(JobDetail jobDetail)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var geocoder = new Geocoder.GeocodeService();

            var fromLocation = geocoder.GeocodeLocation($"{jobDetail.FromStreetAddress} {jobDetail.FromCity} {jobDetail.FromState} {jobDetail.FromZip}");
            var toLocation   = geocoder.GeocodeLocation($"{jobDetail.ToStreetAddress} {jobDetail.ToCity} {jobDetail.ToState} {jobDetail.ToZip}");

            jobDetail.FromLocation = DbGeography.FromText($"POINT({fromLocation.Longitude} {fromLocation.Latitude})");
            jobDetail.ToLocation   = DbGeography.FromText($"POINT({toLocation.Longitude} {toLocation.Latitude})");

            db.JobDetails.Add(jobDetail);
            db.SaveChanges();

            return(CreatedAtRoute("DefaultApi", new { id = jobDetail.JobDetailId }, jobDetail));
        }