pub struct Location {
pub lat_lng: LatLng,
pub heading: Option<u32>,
}Expand description
Encapsulates a location (a geographic point, and an optional heading).
See https://developers.google.com/maps/documentation/routes/reference/rest/v2/Location
Fields§
§lat_lng: LatLng§heading: Option<u32>Heading values can be from 0 to 360, where 0 specifies a heading of due North, 90 specifies a heading of due East, and so on. You can use this field only for DRIVE and TWO_WHEELER RouteTravelMode.
Implementations§
Source§impl Location
impl Location
Sourcepub fn new(latitude: f32, longitude: f32, heading: Option<u32>) -> Self
pub fn new(latitude: f32, longitude: f32, heading: Option<u32>) -> Self
Create a Location at a geographic point, and an optional heading
Examples found in repository?
examples/route_service.rs (line 31)
23async fn get_route() -> Result<()> {
24 dotenv().ok();
25
26 // api auth
27 let api_key = env::var("API_KEY")?;
28 let mut route_service = RouteService::new_with_api_key(api_key);
29
30 let masks = vec!["routes.duration", "routes.distanceMeters"];
31 let origin = WayPoint::new_from_location(Location::new(37.419734, -122.0827784, None), None)?;
32 let destination = WayPoint::new_from_location(Location::new(35.419734, -100.0827784, None), None)?;
33
34 let mut mid_waypoint_option: HashMap<String, Value> = HashMap::new();
35 mid_waypoint_option.insert("via".to_string(), true.into());
36
37 let mut route_option: HashMap<String, Value> = HashMap::new();
38 // let mid_waypoint = WayPoint::new_from_place_id("ChIJgUbEo8cfqokR5lP9_Wh_DaM", Some(mid_waypoint_option))?;
39 // route_option.insert("intermediates".to_owned(), serde_json::to_value(vec![mid_waypoint.clone()])?);
40 route_option.insert("travelMode".to_owned(), serde_json::to_value(RouteTravelMode::Drive)?);
41 route_option.insert("routingPreference".to_owned(), serde_json::to_value(RoutingPreference::TrafficAwareOptimal)?);
42 // route_option.insert("departureTime".to_owned(), serde_json::to_value(Utc::now() + Duration::seconds(60 * 60 * 24))?);
43 // let route_modifiers = RouteModifiers::new(Some(true), Some(true), Some(true), None, None, None);
44 // route_option.insert("routeModifiers".to_owned(), serde_json::to_value(route_modifiers)?);
45 // route_option.insert("requestedReferenceRoutes".to_owned(), serde_json::to_value(vec![ReferenceRoute::FuelEfficient])?);
46 let transit_preference = TransitPreferences::new(Some(vec![TransitTravelMode::Bus]), None);
47 route_option.insert("transitPreferences".to_owned(), serde_json::to_value(transit_preference)?);
48
49 let response = route_service.get_route(&origin, &destination, Some(masks.clone()), Some(route_option.clone())).await?;
50 println!("response: {}", serde_json::to_string_pretty(&response)?);
51
52
53 // service account auth
54 let filepath: PathBuf = PathBuf::from_str("credentials.json")?;
55 let credentials = ServiceAccountCredentials::from_service_account_file(filepath)?;
56 let mut route_service = RouteService::new_with_credentials(credentials);
57 let response = route_service.get_route(&origin, &destination, Some(masks.clone()), Some(route_option.clone())).await?;
58 println!("response: {}", serde_json::to_string(&response)?);
59
60 Ok(())
61}
62
63
64async fn get_route_matrix() -> Result<()> {
65 dotenv().ok();
66
67 // api auth
68 let api_key = env::var("API_KEY")?;
69 let mut route_service = RouteService::new_with_api_key(api_key);
70
71 let masks = vec!["originIndex", "destinationIndex", "status", "condition", "distanceMeters", "duration"];
72 let origin = WayPoint::new_from_location(Location::new(37.419734, -122.0827784, None), None)?;
73 let destination = WayPoint::new_from_location(Location::new(35.419734, -100.0827784, None), None)?;
74
75 let mut route_option: HashMap<String, Value> = HashMap::new();
76 // let mid_waypoint = WayPoint::new_from_place_id("ChIJgUbEo8cfqokR5lP9_Wh_DaM", Some(mid_waypoint_option))?;
77 // route_option.insert("intermediates".to_owned(), serde_json::to_value(vec![mid_waypoint.clone()])?);
78 route_option.insert("travelMode".to_owned(), serde_json::to_value(RouteTravelMode::Drive)?);
79
80 let response = route_service.get_route_matrix(&vec![RouteMatrixOrigin::new(&origin)], &vec![RouteMatrixOrigin::new(&destination)], Some(masks.clone()), Some(route_option.clone())).await?;
81 println!("response: {}", serde_json::to_string_pretty(&response)?);
82
83
84 // service account auth
85 let filepath: PathBuf = PathBuf::from_str("credentials.json")?;
86 let credentials = ServiceAccountCredentials::from_service_account_file(filepath)?;
87 let mut route_service = RouteService::new_with_credentials(credentials);
88 let response = route_service.get_route_matrix(&vec![RouteMatrixOrigin::new(&origin)], &vec![RouteMatrixOrigin::new(&destination)], Some(masks.clone()), Some(route_option.clone())).await?;
89 println!("response: {}", serde_json::to_string_pretty(&response)?);
90
91 Ok(())
92}Trait Implementations§
Source§impl<'de> Deserialize<'de> for Location
impl<'de> Deserialize<'de> for Location
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Auto Trait Implementations§
impl Freeze for Location
impl RefUnwindSafe for Location
impl Send for Location
impl Sync for Location
impl Unpin for Location
impl UnwindSafe for Location
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more