diff --git a/app/api/geojsons.py b/app/api/geojsons.py index bb6ed75c5a91ea3c97ba06403f1ce0f6ea88badd..62582f22d32d52684d1008320faa968815af44be 100644 --- a/app/api/geojsons.py +++ b/app/api/geojsons.py @@ -96,7 +96,7 @@ def get_kpi_vis_info(): {"buttonValue": "pollution", "buttonLabel": "Pollution"}, { "buttonValue": "accousticPollution", - "buttonLabel": "Accoustic Pollution - WIP", + "buttonLabel": "Acoustic Pollution - WIP", }, { "buttonValue": "congestionsAndBottlenecks", @@ -118,7 +118,7 @@ def get_kpi_vis_info(): "buttonValue": "averageSpeedOfPublicTransport", "buttonLabel": "Avg Public Transport Speed", }, - {"buttonValue": "numberOfBikeTrips", "buttonLabel": "Number of Bike Trips"}, + # {"buttonValue": "numberOfBikeTrips", "buttonLabel": "Number of Bike Trips"}, { "buttonValue": "shareOfVehicles", "buttonLabel": "Share of Trips per Mode", @@ -126,7 +126,7 @@ def get_kpi_vis_info(): { "buttonValue": "dailyInternalTravels", "buttonLabel": "Daily Internal Trips", - }, + } ] else: raise ValueError("Invalid deploy parameters - city set to %s", city) @@ -137,7 +137,7 @@ def get_kpi_data_and_write(network, events, sim_id): """ get_kpi_data_final_geojson is a list of links with kpis calculated """ - app.logger.info("getting kpi data to write") + app.logger.info(f"getting kpi data to write, city {city}") results = {} emisson_object = kpis_module.get_emissions(sim_id, network) @@ -183,18 +183,21 @@ def get_kpi_data_and_write(network, events, sim_id): app.logger.info("harbour area traffic flow - TODO") elif network.city == "messina": + if emisson_object is not None: pollution = emisson_object.total_emissions_by_link() app.logger.info("Emission by link") write_geojson_links(pollution, "pollution", network, sim_id) app.logger.info("written emission") + publicTransportUse = events.public_transport_use_geojson() app.logger.info("public transport use") write_geojson_links(publicTransportUse, "publicTransportUse", network, sim_id) app.logger.info("written public transport use") - averageSpeedOfPublicTransport = events.average_bus_speed_geojson() # TODO + + averageSpeedOfPublicTransport = events.average_bus_speed_geojson() app.logger.info("average speed of public transport") write_geojson_links( averageSpeedOfPublicTransport, @@ -203,6 +206,7 @@ def get_kpi_data_and_write(network, events, sim_id): sim_id, ) app.logger.info("written averageSpeedOfPublicTransport") + numberOfBikeTrips = events.vehicles_count_per_link(only="bike") app.logger.info("number of bike trips") @@ -210,8 +214,6 @@ def get_kpi_data_and_write(network, events, sim_id): app.logger.info("written numberOfBikeTrips") shareOfVehicles = vehicleCountToShareGeojson(events.vehicles_count_per_link()) - - # shareOfPublicTransport = events.share_public_transport() app.logger.info("share of vehicles") write_geojson_links(shareOfVehicles, "shareOfVehicles", network, sim_id) app.logger.info("written shareOfVehicles") @@ -317,6 +319,7 @@ def write_geojson_pedestrian_trips(kpi_data, network, sim_id): json.dump(data, fp, indent=2) return data + def write_geojson_links(kpi_data, kpi_name, network, sim_id): """ Write a per link kpi_data object to a file. diff --git a/app/netedit/events.py b/app/netedit/events.py index e11adc1112aa18ba7d06fe2833e650fc284b74e4..acc7404a5841b912509743d17ec517891f2a3bd6 100644 --- a/app/netedit/events.py +++ b/app/netedit/events.py @@ -177,19 +177,23 @@ class VehicleEvents(Events): "bikeability_safety": 0, "capacity": capacity, } - ev_vehicle = event["vehicle"].split("_") - if len(ev_vehicle) > 1: - if ev_vehicle[1] == "bicycle": - links[event["link"]]["bike_count"] += 1 - elif ev_vehicle[1] == "bus": - links[event["link"]]["bus_count"] += 1 - elif event["vehicle"].isnumeric() or event["vehicle"].find(".1") >= 0: + ev_vehicle = event["vehicle"] + if ev_vehicle[1] == "bicycle": + links[event["link"]]["bike_count"] += 1 + elif ev_vehicle[1] == "bus": + links[event["link"]]["bus_count"] += 1 + else: links[event["link"]]["car_count"] += 1 + for link_id, link_data in links.items(): if links.get(link_id, False) and link_data["bike_count"] > 0: links[link_id]["bikeability_safety"] = 10 * ( - 1 - link_data["car_count"] / link_data["capacity"] + 1 - (link_data["car_count"] / link_data["capacity"]) ) + # links[link_id].pop("bike_count", None) + # links[link_id].pop("bus_count", None) + # links[link_id].pop("car_count", None) + # links[link_id].pop("capacity", None) return links # TODO fix after fixing bike_safety_index above @@ -297,12 +301,9 @@ class VehicleEvents(Events): Calculates the daily vehicle counts for each link. """ if local_links is None: - def filter_exp(event): return event["type"] == "entered link" - else: - def filter_exp(event): return event["type"] == "entered link" and event["link"] in local_links @@ -316,17 +317,12 @@ class VehicleEvents(Events): "car_count": 0, "bike_count": 0, } - ev_vehicle = event["vehicle"].split("_") - if len(ev_vehicle) > 1: - if ev_vehicle[1] == "bicycle" and check_only("bike"): + ev_vehicle = event["vehicle"] + if "bicycle" in ev_vehicle: links[event["link"]]["bike_count"] += 1 - elif ev_vehicle[1] == "bus" and check_only("bus"): + elif "bus" in ev_vehicle and not check_only == "bike": links[event["link"]]["bus_count"] += 1 - elif ( - event["vehicle"].isnumeric() - or event["vehicle"].find(".1") >= 0 - and check_only("car") - ): + elif not check_only == "bike": links[event["link"]]["car_count"] += 1 return links @@ -347,46 +343,24 @@ class VehicleEvents(Events): filtered_events = self.timeslot_filter_events(timeslot) for event in filter(filter_exp, filtered_events): - ev_vehicle = event["vehicle"].split("_") - if len(ev_vehicle) > 1: - if ev_vehicle[1] == "bicycle": - bicycles.add(event["vehicle"]) - elif ev_vehicle[1] == "bus": - busses.add(event["vehicle"]) - elif event["vehicle"].isnumeric() or event["vehicle"].find(".1") >= 0: - cars.add(event["vehicle"]) - results = { - "bus_count": len(busses), - "car_count": len(cars), - "bike_count": len(bicycles), - } + ev_vehicle = event["vehicle"] + if "bicycle" in ev_vehicle: bicycles.add(event["vehicle"]) + elif "bus" in ev_vehicle: busses.add(event["vehicle"]) + else: cars.add(event["vehicle"]) + + logger.error(f"BUSSES: {len(busses)}") + logger.error(f"BIKES: {len(bicycles)}") + logger.error(f"CARS: {len(cars)}") + + results = {} + if len(busses) > 0: results["bus_count"] = len(busses) + if len(cars) > 0: results["car_count"] = len(cars) + if len(bicycles) > 0: results["bike_count"] = len(bicycles) return results - # TODO moyua links - def capacity_to_moyua(self, moyua_square_links=None, timeslot=None): - if moyua_square_links is None: - moyua_square_links = [ - "22691", - "22692", - "51616", - "51617", - "52446", - "52447", - "45116", - "45117", - "45118", - "37953", - "45140", - "33748", - "33749", - "2484", - "2485", - "26087", - "47250", - "26024", - "43904", - "20252", - ] + + def capacity_to_moyua(self, moyua_square_links, timeslot=None): + links = {} free_capacity = {} filtered_events = self.timeslot_filter_events(timeslot) @@ -836,7 +810,7 @@ class VehicleEvents(Events): continue data_by_link[item["link"]] = { "pt_users": item["occ"], - "pt_vehicles": [veh_id], + # "pt_vehicles": [veh_id], } else: data_by_link[item["link"]]["pt_users"] += item["occ"]