Example #1
0
    def _parse_directions_json(response, algorithm, elevation):
        if response is None:  # pragma: no cover
            if algorithm == 'alternative_route':
                return Directions()
            else:
                return Direction()

        if algorithm == 'alternative_route':
            routes = []
            for route in response['paths']:
                geometry = [
                    list(reversed(coord)) for coord in utils.decode_polyline5(
                        route['points'], elevation)
                ]
                routes.append(
                    Direction(geometry=geometry,
                              duration=int(route['time'] / 1000),
                              distance=int(route['distance']),
                              raw=route))
            return Directions(routes, response)
        else:
            geometry = [
                list(reversed(coord)) for coord in utils.decode_polyline5(
                    response['paths'][0]['points'], elevation)
            ]
            return Direction(geometry=geometry,
                             duration=int(response['paths'][0]['time'] / 1000),
                             distance=int(response['paths'][0]['distance']),
                             raw=response)
Example #2
0
    def _parse_direction_json(response, format, units):
        if response is None:  # pragma: no cover
            return Direction()

        units_factor = 1
        if units == 'mi':
            units_factor = 0.621371 * 1000
        elif units == 'km':
            units_factor = 1000

        if format == 'geojson':
            geometry = response['features'][0]['geometry']['coordinates']
            duration = int(
                response['features'][0]['properties']['summary']['duration'])
            distance = int(
                response['features'][0]['properties']['summary']['distance'])
        elif format == 'json':
            geometry = [
                list(reversed(coord)) for coord in utils.decode_polyline5(
                    response['routes'][0]['geometry'])
            ]
            duration = int(response['routes'][0]['summary']['duration'])
            distance = int(response['routes'][0]['summary']['distance'] *
                           units_factor)

        return Direction(geometry=geometry,
                         duration=duration,
                         distance=distance,
                         raw=response)
Example #3
0
    def test_full_directions_not_encoded(self):
        query = deepcopy(ENDPOINTS_QUERIES[self.name]["directions"])
        query["points_encoded"] = False
        query["algorithm"] = None

        res = ENDPOINTS_RESPONSES[self.name]["directions"]
        res["paths"][0]["points"] = dict(
            coordinates=decode_polyline5(res["paths"][0]["points"]))

        responses.add(
            responses.GET,
            "https://graphhopper.com/api/1/route",
            status=200,
            json=ENDPOINTS_RESPONSES[self.name]["directions"],
            content_type="application/json",
        )

        route = self.client.directions(**query)
        self.assertEqual(1, len(responses.calls))
        self.assertURLEqual(
            "https://graphhopper.com/api/1/route?avoid=tunnel%3Bford&"
            "block_area=48.23424%2C8.34234&calc_points=false&ch.disable=true&debug=true&details=time&details=tolls&"
            "elevation=true&heading=50%2C50%2C50&heading_penalty=100&instructions=false&key=sample_key&locale=en&"
            "optimize=true&pass_through=true&point=49.415776%2C8.680916&point=49.420577%2C8.688641&"
            "point=49.445776%2C8.780916&point_hint=Graphhopper%20Lane&point_hint=OSM%20Street&point_hint=Routing%20Broadway"
            "&points_encoded=false&vehicle=car&type=json&weighting=short_fastest&snap_prevention=trunk%2Cferry&curb_side=any%2Cright&turn_costs=true",
            responses.calls[0].request.url,
        )

        self.assertIsInstance(route, Direction)
        self.assertIsInstance(route.geometry, list)
        self.assertIsInstance(route.duration, int)
        self.assertIsInstance(route.distance, int)
        self.assertIsInstance(route.raw, dict)
Example #4
0
    def _parse_direction_json(response, alternatives):
        if response is None:  # pragma: no cover
            if alternatives:
                return Directions()
            else:
                return Direction()

        if alternatives:
            routes = []
            for route in response['routes']:
                geometry = []
                duration, distance = 0, 0
                for leg in route['legs']:
                    duration += leg['duration']['value']
                    distance += leg['distance']['value']
                    for step in leg['steps']:
                        geometry.extend([
                            list(reversed(coords)) for coords in
                            utils.decode_polyline5(step['polyline']['points'])
                        ])
                routes.append(
                    Direction(geometry=geometry,
                              duration=int(duration),
                              distance=int(distance),
                              raw=route))
            return Directions(routes, response)
        else:
            geometry = []
            duration, distance = 0, 0
            for leg in response['routes'][0]['legs']:
                duration = int(leg['duration']['value'])
                distance = int(leg['distance']['value'])
                for step in leg['steps']:
                    geometry.extend([
                        list(reversed(coords)) for coords in
                        utils.decode_polyline5(step['polyline']['points'])
                    ])
            return Direction(geometry=geometry,
                             duration=duration,
                             distance=distance,
                             raw=response)
Example #5
0
 def _parse_geometry(route_geometry):
     if geometry_format in (None, 'polyline'):
         geometry = utils.decode_polyline5(route_geometry, is3d=False)
     elif geometry_format == 'polyline6':
         geometry = utils.decode_polyline6(route_geometry, is3d=False)
     elif geometry_format == 'geojson':
         geometry = route_geometry['coordinates']
     else:
         raise ValueError(
             "OSRM: parameter geometries needs one of ['polyline', 'polyline6', 'geojson"
         )
     return geometry
Example #6
0
    def test_polyline5_3d_decoding(self):

        decoded = [(8.68864, 49.42058, 120.96), (8.68092, 49.41578, 1491.39)]
        self.assertEqual(decoded,
                         utils.decode_polyline5(self.coords3d_5prec, True))
Example #7
0
    def test_polyline5_2d_decoding(self):

        decoded = [(8.68864, 49.42058), (8.68092, 49.41578)]
        self.assertEqual(decoded, utils.decode_polyline5(self.coords2d_5prec))