public List<TravelTime> GetTravelTimes(Location origin, Location destination) { var list = new List<TravelTime>(); GetTravelTimeForMode(origin, destination, list, TravelMode.Driving); GetTravelTimeForMode(origin, destination, list, TravelMode.Transit); return list; }
private void GetTravelTimeForMode(Location origin, Location destination, List<TravelTime> list, TravelMode mode) { var time = this.GetTravelTime(origin, destination, mode); if (time != null) { list.Add(time); } }
private string StringForm(Location loc) { if (!string.IsNullOrEmpty(loc.Latitude) && !string.IsNullOrEmpty(loc.Longitude)) { return loc.Latitude + "," + loc.Longitude; } return loc.Address + " " + loc.Suburb + " " + loc.Postcode + " Australia"; }
static void Main(string[] args) { DirectionsService ds = new DirectionsService(); Location origin = new Location { Suburb = "Sydney" }; Location destination = new Location { Suburb = "Melbourne" }; var result = ds.GetTravelTimes(origin, destination); foreach (var entry in result) { Console.WriteLine("{0}: {1}", entry.Mode, entry.Minutes); } Console.ReadLine(); }
public TravelTime GetTravelTime(Location origin, Location destination, TravelMode mode) { string originString = StringForm(origin); string destinationString = StringForm(destination); var request = new DirectionsRequest() { ApiKey = apiKey, Origin = originString, Destination = destinationString, TravelMode = mode, DepartureTime = DateTime.Now, }; var response = GoogleMapsApi.GoogleMaps.Directions.Query(request); var route = response.Routes.FirstOrDefault(); if (route != null) { // For routes that contain no waypoints, the route will consist of a single "leg". var leg = route.Legs.FirstOrDefault(); if (leg != null) { // Get the origin and destination's lat/long if not yet known. origin.Latitude = origin.Latitude ?? leg.StartLocation.Latitude.ToString(); origin.Longitude = origin.Longitude ?? leg.StartLocation.Longitude.ToString(); destination.Latitude = destination.Latitude ?? leg.EndLocation.Latitude.ToString(); destination.Longitude = destination.Longitude ?? leg.EndLocation.Longitude.ToString(); var transitStep = leg.Steps.FirstOrDefault(a => a.TransitDetails != null); TimeSpan duration = leg.Duration.Value; TravelTime time = new TravelTime { Mode = mode.ToString(), Days = duration.Days, Hours = duration.Hours, Minutes = duration.Minutes, Seconds = duration.Seconds, TransitDepartureTime = transitStep == null ? null : transitStep.TransitDetails.DepartureTime.Text, TransitDepartureStop = transitStep == null ? null : transitStep.TransitDetails.DepartureStop.Name, TransitArrivalTime = transitStep == null ? null : transitStep.TransitDetails.ArrivalTime.Text, TransitArrivalStop = transitStep == null ? null : transitStep.TransitDetails.ArrivalStop.Name, TransitRoute = transitStep == null ? null : transitStep.TransitDetails.Lines.ShortName, TransitRouteDescription = transitStep == null ? null : transitStep.TransitDetails.Lines.Name }; return time; } } return null; }
public List<Facility> Search(Location loc, FacilityType type) { string serviceCategory = null; string servicetype = null; switch (type) { case FacilityType.GP: serviceCategory = "General Practice/GP (doctor)"; break; case FacilityType.Pharmacy: servicetype = "Pharmacy"; break; } var requestDic = new Dictionary<string, string> { {"usepostcoderadialsearch", "true"}, {"suburbpostcodedata", JsonConvert.SerializeObject(new { SiteSearchSuburbPostcodeParams = new { SuburbPostcode = loc.Suburb + " " + loc.Postcode, SearchSurroundingSuburbs = true } })}, {"startpos", "1"}, {"servicetype", servicetype}, {"ServiceCategory", serviceCategory}, {"SearchSiteAddress", "true"}, {"SearchServiceCoverageArea", "false"}, {"SearchServiceAddress", "false"}, {"orderby", "Distance"}, {"endpos", "5"}, {"deliverymethod", "{\"string\":\"Site Visit\"}"}, {"callback", "angular.callbacks._4"}, {"apikey", "nhccn-9vSRwUZooHY2BebTOvAhA93n"}, {"alwaysreturn", "5"} }; string url = "https://api.nhsd.com.au/nhsd/v2.8/rest/sitesearch?"; foreach (var entry in requestDic) { if (entry.Value != null) { url += entry.Key + "=" + Uri.EscapeDataString(entry.Value) + "&"; } } WebRequest req = WebRequest.Create(url); StreamReader sr = new StreamReader(req.GetResponse().GetResponseStream()); WebResponse response = req.GetResponse(); string responseString = sr.ReadToEnd(); string json = responseString.Substring(requestDic["callback"].Length + 1, responseString.Length - requestDic["callback"].Length - 2); RootObject result = JsonConvert.DeserializeObject<RootObject>(json); FacilitySearchResult searchResult = new FacilitySearchResult(); var firstSite = result.SiteSearchResponse.SiteSearchResult.ResultList.SiteData[0]; var facilities = result.SiteSearchResponse.SiteSearchResult.ResultList.SiteData.Select(a => new Facility { Location = new Location { Address = a.SiteAddress.Address_Line_1 + " " + a.SiteAddress.Address_Line_2 + " " + a.SiteAddress.Address_Line_3, Suburb = a.SiteAddress.Suburb, Postcode = a.SiteAddress.Postcode, Latitude = a.SiteAddress.Latitude, Longitude = a.SiteAddress.Longitude, }, OpenNow = a.ServiceCollection.ServiceData.OpenNow, ClosingTime = GetClosingTime(a.ServiceCollection.ServiceData), Name = a.OrganisationName, }).ToList(); return facilities; }
public void Lookup(Location loc) { var request = new GoogleMapsApi.Entities.Geocoding.Request.GeocodingRequest { Location = new GoogleMapsApi.Entities.Common.Location(double.Parse(loc.Latitude), double.Parse(loc.Longitude)), ApiKey = apiKey }; var response = GoogleMapsApi.GoogleMaps.Geocode.Query(request); var result = response.Results.FirstOrDefault(); if (result != null) { loc.Suburb = AddressComponent(result, "locality"); loc.Postcode = AddressComponent(result, "postal_code"); loc.Address = AddressComponent(result, "street_number"); loc.Address += " " + AddressComponent(result, "route"); } }