def addPollutionLeveltoRoutes(routes, hour_offset):
    for route in routes:
        route['pollution'] = 0
        length = len(route['coords'])
        # Pollution due to weather data + traffic data
        for i in [
                0, length / 2, length - 1
        ]:  # First, middle, and last point (for these points traffic data is calculated twice
            #  but this fine since the user might be standing there for a bit of time)
            route['pollution'] += pollution.get_pollution_value(
                route['coords'][i][0], route['coords'][i][1], hour_offset)
        # Pollution due to traffic data, sample size = min(MAX_SIMPE_SIZE, length/SAMPLE_POINT_STEP)
        for i in xrange(
                0, length, SAMPLE_POINT_STEP if length <
            (SAMPLE_POINT_STEP * MAX_SAMPLE_SIZE) else length /
                MAX_SAMPLE_SIZE):
            route['pollution'] += traffic.get_traffic_data(
                route['coords'][i][0], route['coords'][i][1])
def addPollutionLeveltoRoutes(routes, hour_offset):
    for route in routes:
        route["pollution"] = 0
        length = len(route["coords"])
        # Pollution due to weather data + traffic data
        for i in [
            0,
            length / 2,
            length - 1,
        ]:  # First, middle, and last point (for these points traffic data is calculated twice
            #  but this fine since the user might be standing there for a bit of time)
            route["pollution"] += pollution.get_pollution_value(
                route["coords"][i][0], route["coords"][i][1], hour_offset
            )
        # Pollution due to traffic data, sample size = min(MAX_SIMPE_SIZE, length/SAMPLE_POINT_STEP)
        for i in xrange(
            0, length, SAMPLE_POINT_STEP if length < (SAMPLE_POINT_STEP * MAX_SAMPLE_SIZE) else length / MAX_SAMPLE_SIZE
        ):
            route["pollution"] += traffic.get_traffic_data(route["coords"][i][0], route["coords"][i][1])
예제 #3
0
def main():
    london_x1 = 51.700559
    london_y1 = -0.497709

    london_x2 = 51.308527
    london_y2 = 0.246893

    big_tile = tiles.Tile(london_x1, london_y1, london_x2, london_y2)
    smaller_tiles = tiles.fragment_tile(big_tile, tiles.m_to_lat(200),
                                        tiles.m_to_lon(200 / 3, london_x1))

    filename = 'fusion.csv'

    done_tiles = {}

    for i in xrange(len(smaller_tiles)):
        done_tiles[i] = -1.0

    for i in xrange(len(smaller_tiles)):
        tile = smaller_tiles[i]
        key = tile.key

        if done_tiles[key] >= 0:
            continue

        pollution_value = pollution.get_pollution_value(
            tile.start_x, tile.start_y, 0)

        done_tiles[key] = pollution_value

        neighbour_keys = [
            key + 1, key - 1, (key + 169), (key - 169), (key + 170),
            (key + 168), (key - 170), (key - 168)
        ]

        weights = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]

        for j in xrange(len(neighbour_keys)):
            index = neighbour_keys[j]

            if 0 < index < len(smaller_tiles):
                if done_tiles[index] >= 0:
                    done_tiles[index] = (done_tiles[index] +
                                         (weights[j] * pollution_value)) / 2.0
                else:
                    done_tiles[index] = weights[j] * pollution_value

        print "Progress: " + str(i) + "/" + str(len(smaller_tiles))

    with open(filename, 'w') as f:
        for tile in smaller_tiles:
            line = "\"" + tile.kml() + "\"" + ", " + str(
                done_tiles[tile.key]) + ", " + str(tile.key) + "\n"
            f.write(line)

    success = False
    tries = 0
    while (success is False) and tries < 3:
        tries += 1
        try:
            print "Try no:" + str(tries) + " to update table"
            update_table(filename)
            success = True
        except Exception:
            print "Failed to update table"

    if success:
        print "Last fusion update: " + str(datetime.datetime.now())
예제 #4
0
def main():
    london_x1 = 51.700559
    london_y1 = -0.497709

    london_x2 = 51.308527
    london_y2 = 0.246893

    big_tile = tiles.Tile(london_x1, london_y1, london_x2, london_y2)
    smaller_tiles = tiles.fragment_tile(big_tile, tiles.m_to_lat(200), tiles.m_to_lon(200 / 3, london_x1))

    filename = 'fusion.csv'

    done_tiles = {}

    for i in xrange(len(smaller_tiles)):
        done_tiles[i] = -1.0

    for i in xrange(len(smaller_tiles)):
        tile = smaller_tiles[i]
        key = tile.key

        if done_tiles[key] >= 0:
            continue

        pollution_value = pollution.get_pollution_value(tile.start_x, tile.start_y, 0)

        done_tiles[key] = pollution_value

        neighbour_keys = [key + 1, key - 1, (key + 169), (key - 169), (key + 170), (key + 168), (key - 170),
                          (key - 168)]

        weights = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]

        for j in xrange(len(neighbour_keys)):
            index = neighbour_keys[j]

            if 0 < index < len(smaller_tiles):
                if done_tiles[index] >= 0:
                    done_tiles[index] = (done_tiles[index] + (weights[j] * pollution_value)) / 2.0
                else:
                    done_tiles[index] = weights[j] * pollution_value

        print "Progress: " + str(i) + "/" + str(len(smaller_tiles))

    with open(filename, 'w') as f:
        for tile in smaller_tiles:
            line = "\"" + tile.kml() + "\"" + ", " + str(done_tiles[tile.key]) + ", " + str(tile.key) + "\n"
            f.write(line)

    success = False
    tries = 0
    while (success is False) and tries < 3:
        tries += 1
        try:
            print "Try no:" + str(tries) + " to update table"
            update_table(filename)
            success = True
        except Exception:
            print "Failed to update table"

    if success:
        print "Last fusion update: " + str(datetime.datetime.now())