Beispiel #1
0
def main(pos: Tuple[float, float],
         tomtom_key: str,
         lookup_range: float,
         timeout: int,
         list_roads: bool,
         road: int,
         file_json: str,
         road_provider_name: str = "default_road_provider",
         model_name: str = "default_model"):
    controller = Controller(provider=road_provider(road_provider_name,
                                                   tomtom_key),
                            c_model=model.model(model_name))
    for i in range(3):
        try:
            print("Road Query...")
            roads = controller.query_roads(pos)
        except OverpassGatewayTimeout:
            sys.stderr.write(
                "WARNING: Couldn't list roads. Server load too high\n")
            print("Sleeping for 60s")
            time.sleep(60)
            continue
        except OverpassTooManyRequests:
            sys.stderr.write(
                "WARNING: Couldn't list roads. Too many requests\n")
            print("Sleeping for 60s")
            time.sleep(60)
            continue
        break

    if road is None:
        print("No roads found.")
        exit()

    if list_roads:
        for i in range(len(roads)):
            print("road num:", i + 1, " - name:", roads[i])
    else:
        if len(roads) > 1:
            sys.stderr.write("WARNING: multiple roads detected\n")
        for i in range(len(roads)):
            print("road num:", i + 1, " - name:", roads[i])

        for i in range(3):
            try:
                print("Result Query...")
                result_str: str = controller.get_result(
                    roads[max(0, min(road,
                                     len(roads) - 1))], lookup_range / 2, pos,
                    timeout)
                if file_json != "":
                    if not os.path.exists("json"):
                        os.makedirs("json")
                    with open("json/" + file_json, "w") as json_out:
                        json_out.write(result_str)

                result: dict = json.loads(result_str)
                road: dict = result.get("road")
                print("road:", road.get("name"))
                print(
                    "speed:",
                    sum([
                        fragment.get("speed")
                        for fragment in road.get("fragments")
                    ]) / len(road.get("fragments")))
                print(
                    "extra lateral clearance:",
                    sum([
                        fragment.get("extra_lateral_clearance")
                        for fragment in road.get("fragments")
                    ]) / len(road.get("fragments")))
                print(
                    "bendiness:",
                    sum([
                        fragment.get("bendiness")
                        for fragment in road.get("fragments")
                    ]) / len(road.get("fragments")))
                print(
                    "width:",
                    sum([
                        fragment.get("width")
                        for fragment in road.get("fragments")
                    ]) / len(road.get("fragments")))
                print(
                    "length:",
                    sum([
                        fragment.get("length")
                        for fragment in road.get("fragments")
                    ]))
                print("intersections:", road.get("intersections"))
                print("cars per day: ", result.get("average_daily_traffic"))
            except OverpassGatewayTimeout:
                sys.stderr.write(
                    "WARNING: Couldn't get results. Server load too high\n")
                print("Sleeping for 60s")
                time.sleep(60)
                continue
            except OverpassTooManyRequests:
                sys.stderr.write(
                    "WARNING: Couldn't get results. Too many requests\n")
                print("Sleeping for 60s")
                time.sleep(60)
                continue
            except TimeoutException:
                sys.stderr.write(
                    "ERROR: Road provider timeout. Consider increasing timeout or reducing road length\n"
                )
            break