Source code for here_location_services.config.routing_config

# Copyright (C) 2019-2021 HERE Europe B.V.
# SPDX-License-Identifier: Apache-2.0

"""This module defines all the configs which will be required as inputs to routing APIs."""

import json
from typing import Optional

from .base_config import Bunch, PlaceOptions, WayPointOptions


[docs]class RoutingReturn(Bunch): """A class to define constant attributes which are included in routing API's response as part of the data representation of route or section. * ``polyline`` - Polyline for the route in Flexible Polyline Encoding. Either a 2D polyline (without elevation specified) or a 3D polyline with the 3rd dimension type Elevation (with elevation specified). * ``actions`` - Actions (such as maneuvers or tasks) that must be taken to complete the section. * instructions - Include instructions in returned actions. Instructions are localized to the requested language. * ``summary`` - Include a summary for the section. * ``travelSummary`` - Include a summary for the travel portion of the section. * ``turnByTurnActions`` - Include all information necessary to support turn by turn guidance to complete the section. * ``mlDuration`` - Use a region-specific machine learning model to calculate route duration. Disclaimer: This parameter is currently in beta release, and is therefore subject to breaking changes. * ``elevation`` - Include elevation information in coordinate and geometry types. See e.g. polyline or location. * ``routeHandle`` - Encode calculated route and return a handle which can be used with routes/{routeHandle} to decode the route at a later point in time. * ``incidents`` - Include a list of all incidents applicable to each section. Following restrictions apply when specifying return parameter: * If ``actions`` is requested, then ``polyline`` must also be requested as well. * If ``instructions`` is requested, then ``actions`` must also be requested as well. * If ``turnByTurnActions`` is requested, then ``polyline`` must also be requested as well. * If at least one attribute is requested within the ``spans`` parameter, then ``polyline`` must be requested as well. """
return_attributes = { "polyline": "polyline", "actions": "actions", "instructions": "instructions", "summary": "summary", "travelSummary": "travelSummary", "mlDuration": "mlDuration", "turnByTurnActions": "turnByTurnActions", "elevation": "elevation", "routeHandle": "routeHandle", "passthrough": "passthrough", "incidents": "incidents", } #: Use this config for return attributes from routing API for param ``return_results``. #: Example: To return polyline in results use ``ROUTING_RETURN.polyline``. ROUTING_RETURN = RoutingReturn(**return_attributes)
[docs]class RoutingSpans(Bunch): """A class to define constant attributes which are included in the response spans. ``walkAttributes`` ``streetAttributes`` ``carAttributes`` ``truckAttributes`` ``scooterAttributes`` ``names`` ``length`` ``duration`` ``baseDuration`` ``countryCode`` ``functionalClass`` ``routeNumbers`` ``speedLimit`` ``maxSpeed`` ``dynamicSpeedInfo`` ``segmentId`` ``segmentRef`` ``consumption``. """
routing_spans = { "walkAttributes": "walkAttributes", "streetAttributes": "streetAttributes", "carAttributes": "streetAttributes", "truckAttributes": "truckAttributes", "scooterAttributes": "scooterAttributes", "names": "names", "length": "length", "duration": "duration", "baseDuration": "baseDuration", "countryCode": "countryCode", "functionalClass": "functionalClass", "routeNumbers": "routeNumbers", "speedLimit": "speedLimit", "maxSpeed": "maxSpeed", "dynamicSpeedInfo": "dynamicSpeedInfo", "segmentId": "segmentId", "segmentRef": "segmentRef", "consumption": "consumption", } #: Use this config for spans of routing API. #: Example: for ``walkAttributes`` routing_mode use ``ROUTING_SPANS.walkAttributes``. ROUTING_SPANS = RoutingSpans(**routing_spans)
[docs]class RoutingTransportMode(Bunch): """A class to define constant attributes for mode of transport to be used for the calculation of the route. * ``car`` * ``truck`` * ``pedestrian`` * ``bicycle`` * ``scooter`` """
transport_mode = { "car": "car", "truck": "truck", "pedestrian": "pedestrian", "bicycle": "bicycle", "scooter": "scooter", } #: Use this config for transport_mode of routing API. #: Example: for ``car`` transport_mode use ``ROUTING_TRANSPORT_MODE.car``. ROUTING_TRANSPORT_MODE = RoutingTransportMode(**transport_mode)
[docs]class RouteCourse(Bunch): """A class to define constant attributes for Course option."""
route_course = {"east": 90, "south": 180, "west": 270, "north": 360} ROUTE_COURSE = RouteCourse(**route_course)
[docs]class RouteMatchSideOfStreet(Bunch): """A class to define constant attribuites for ``matchSideOfStreet``."""
match_sideof_street = {"always": "always", "onlyIfDivided": "onlyIfDivided"} #: Use this config for transport_mode of routing API. #: Example: for ``car`` transport_mode use ``ROUTING_TRANSPORT_MODE.car``. ROUTE_MATCH_SIDEOF_STREET = RouteMatchSideOfStreet(**match_sideof_street)
[docs]class AvoidFeatures(Bunch): """A class to define constant values for features to avoid during route calculation."""
#: Use this config for match_sideof_street for PlaceOptions. #: Example: for match_sideof_street ``always`` use ``ROUTE_MATCH_SIDEOF_STREET.always``. AVOID_FEATURES = AvoidFeatures( **{ "seasonalClosure": "seasonalClosure", "tollRoad": "tollRoad", "controlledAccessHighway": "controlledAccessHighway", "ferry": "ferry", "carShuttleTrain": "carShuttleTrain", "tunnel": "tunnel", "dirtRoad": "dirtRoad", "difficultTurns": "difficultTurns", } )
[docs]class Scooter: """A class to define attributes specific for the scooter route. Scooter specific parameters: allowHighway: Specifies whether the scooter is allowed on the highway or not. This parameter is optional. If not provided, then by default scooter is not allowed to use highway. There is a similar parameter ``avoid[features]=controlledAccessHighway`` to disallow highway usage. avoid[features] takes precedence so if this parameter is also used then scooters are not allowed to use highways even if allowHighway is used with value as true. Possible values: true: scooter is allowed to use the highway. false: scooter is not allowed to use the highway. """
[docs] def __init__(self, allow_highway: bool): self.allowHighway = allow_highway
[docs] def __repr__(self): """Return string representation of this instance.""" return json.dumps(self.__dict__)
[docs]class Via: """A class to define ``via`` waypoint. A via waypoint is a location between origin and destination. The route will do a stop at the via waypoint. """
[docs] def __init__( self, lat: float, lng: float, place_options: Optional[PlaceOptions] = None, waypoint_options: Optional[WayPointOptions] = None, ): self.lat = lat self.lng = lng self.place_options = place_options self.waypoint_options = waypoint_options