All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opentripplanner.ext.emissions.EmissionsModule Maven / Gradle / Ivy

The newest version!
package org.opentripplanner.ext.emissions;

import dagger.Module;
import jakarta.inject.Inject;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import org.opentripplanner.graph_builder.ConfiguredDataSource;
import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore;
import org.opentripplanner.graph_builder.model.GraphBuilderModule;
import org.opentripplanner.gtfs.graphbuilder.GtfsFeedParameters;
import org.opentripplanner.standalone.config.BuildConfig;
import org.opentripplanner.transit.model.framework.FeedScopedId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * This class allows updating the graph with emissions data from external emissions data files.
 */
@Module
public class EmissionsModule implements GraphBuilderModule {

  private static final Logger LOG = LoggerFactory.getLogger(EmissionsModule.class);
  private final BuildConfig config;
  private final EmissionsDataModel emissionsDataModel;
  private final Iterable> dataSources;
  private final DataImportIssueStore issueStore;

  @Inject
  public EmissionsModule(
    Iterable> dataSources,
    BuildConfig config,
    EmissionsDataModel emissionsDataModel,
    DataImportIssueStore issueStore
  ) {
    this.dataSources = dataSources;
    this.config = config;
    this.emissionsDataModel = emissionsDataModel;
    this.issueStore = issueStore;
  }

  public void buildGraph() {
    if (config.emissions != null) {
      LOG.info("Start emissions building");
      Co2EmissionsDataReader co2EmissionsDataReader = new Co2EmissionsDataReader(issueStore);
      double carAvgCo2PerKm = config.emissions.getCarAvgCo2PerKm();
      double carAvgOccupancy = config.emissions.getCarAvgOccupancy();
      double carAvgEmissionsPerMeter = carAvgCo2PerKm / 1000 / carAvgOccupancy;
      Map emissionsData = new HashMap<>();
      for (ConfiguredDataSource gtfsData : dataSources) {
        Map co2Emissions;
        if (gtfsData.dataSource().name().contains(".zip")) {
          co2Emissions = co2EmissionsDataReader.readGtfsZip(new File(gtfsData.dataSource().uri()));
        } else {
          co2Emissions = co2EmissionsDataReader.readGtfs(new File(gtfsData.dataSource().uri()));
        }
        emissionsData.putAll(co2Emissions);
      }
      this.emissionsDataModel.setCo2Emissions(emissionsData);
      this.emissionsDataModel.setCarAvgCo2PerMeter(carAvgEmissionsPerMeter);
      LOG.info(
        "Emissions building finished. Number of CO2 emission records saved: " + emissionsData.size()
      );
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy