package cz.agents.agentpolis.darptestbed.siminfrastructure.request.generator.support; import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Injector; import com.vividsolutions.jts.geom.Coordinate; import cz.agents.agentpolis.darptestbed.global.Utils; import cz.agents.agentpolis.darptestbed.siminfrastructure.planner.init.TestbedPlannerModuleFactory; import cz.agents.agentpolis.darptestbed.simmodel.environment.TestbedEnvironmentModul; import cz.agents.agentpolis.darptestbed.simulator.initializator.osm.KNearestNodesInitModuleFactory; import cz.agents.agentpolis.darptestbed.simulator.initializator.osm.KNodesExtendedFunction; import cz.agents.agentpolis.darptestbed.simulator.initializator.osm.NodeExtendedFunction; import cz.agents.agentpolis.darptestbed.simulator.initializator.osm.init.NodeDensityMapInit; import cz.agents.agentpolis.darptestbed.simulator.initializator.osm.init.TestbedMapInit; import cz.agents.agentpolis.simmodel.environment.AgentPolisEnvironmentModule; import cz.agents.agentpolis.simmodel.environment.model.citymodel.restaurantnetwork.elements.RestaurantNode; import cz.agents.agentpolis.simmodel.environment.model.citymodel.transportnetwork.elemets.highway.HighwayNetwork; import cz.agents.agentpolis.simmodel.environment.model.citymodel.transportnetwork.elemets.highway.HighwayNode; import cz.agents.agentpolis.simulator.creator.initializator.InitModuleFactory; import cz.agents.agentpolis.simulator.creator.initializator.impl.MapData; import cz.agents.agentpolis.simulator.importer.osm.selector.impl.RestaurantImportSelector; import cz.agents.agentpolis.utils.config.ConfigReader; import cz.agents.alite.common.event.EventProcessor; import org.apache.log4j.Logger; import org.openstreetmap.osm.data.coordinates.LatLon; import java.io.File; import java.util.*; public class RestaurantDensityCalculator { private final static Logger LOGGER = Logger.getLogger(LenientPassengerGenerator.class); private final Utils utils; private final KNodesExtendedFunction nearestNodeFinder; private MapData osmDTO; private final Collection<HighwayNode> allNetworkNodes; private Map<Long, RestaurantNode> allRestaurantNodes; public RestaurantDensityCalculator(String osmFileName, String benchmarkDir, Injector injector) { super(); // Injector injector = createInjector(benchmarkDir, new File(osmFileName)); injector = createInjector(benchmarkDir, new File(osmFileName)); this.utils = injector.getInstance(Utils.class); this.nearestNodeFinder = (KNodesExtendedFunction) injector.getInstance(NodeExtendedFunction.class); allNetworkNodes = injector.getInstance( HighwayNetwork.class).getNetwork().getAllNodes(); } public RestaurantDensityCalculator(Injector injector) { super(); this.utils = injector.getInstance(Utils.class); this.nearestNodeFinder = (KNodesExtendedFunction) injector.getInstance(NodeExtendedFunction.class); allNetworkNodes = injector.getInstance( HighwayNetwork.class).getNetwork().getAllNodes(); } protected Injector createInjector(String benchmarkDir, File osmMap) { try { Injector injector = Guice.createInjector(); // select the benchmark directory File experiment = new File(benchmarkDir); ConfigReader scenario = ConfigReader.initConfigReader(new File(experiment, "config/scenario.groovy").toURL()); int epsg = scenario.getIntegerValueFromConfig("epsg"); NodeDensityMapInit mapInitFactory = new NodeDensityMapInit(epsg); osmDTO = mapInitFactory.initMap(osmMap, injector); allRestaurantNodes = mapInitFactory.getRestaurantGraph(); EventProcessor eventProcessor = new EventProcessor(); injector = injector.createChildInjector(new AgentPolisEnvironmentModule( eventProcessor, new Random(4), osmDTO.graphByType, osmDTO.nodesFromAllGraphs)); List<InitModuleFactory> initModuleFactories = new ArrayList<>(); initModuleFactories.add(new KNearestNodesInitModuleFactory(epsg)); initModuleFactories.add(new TestbedPlannerModuleFactory()); injector = injector.createChildInjector(new TestbedEnvironmentModul(eventProcessor)); for (InitModuleFactory initFactory : initModuleFactories) { AbstractModule module = initFactory.injectModule(injector); injector = injector.createChildInjector(module); } return injector; } catch (Exception e) { System.out.println(e.toString()); return null; } } // protected Injector createInjector(String benchmarkDir, File osmMap) { // try { // Injector injector = Guice.createInjector(); // // // // select the benchmark directory // File experiment = new File(benchmarkDir); // // ConfigReader scenario = ConfigReader.initConfigReader(new File(experiment, "config/scenario.groovy").toURL()); // // int epsg = scenario.getIntegerValueFromConfig("epsg"); // // NodeDensityMapInit mapInitFactory = new NodeDensityMapInit(epsg); // // osmDTO = mapInitFactory.initMap(osmMap, injector); // allRestaurantNodes = mapInitFactory.getRestaurantGraph(); // // EventProcessor eventProcessor = new EventProcessor(); // injector = injector.createChildInjector(new AgentPolisEnvironmentModule( // eventProcessor, new Random(4), // osmDTO.graphByType, osmDTO.nodesFromAllGraphs)); // // List<InitModuleFactory> initModuleFactories = new ArrayList<>(); // // initModuleFactories.add(new KNearestNodesInitModuleFactory(epsg)); // initModuleFactories.add(new TestbedPlannerModuleFactory()); // // injector = injector.createChildInjector(new TestbedEnvironmentModul(eventProcessor)); // // // for (InitModuleFactory initFactory : initModuleFactories) { // AbstractModule module = initFactory.injectModule(injector); // injector = injector.createChildInjector(module); // } // // return injector; // // } catch (Exception e) { // System.out.println(e.toString()); // return null; // } // // } public Map<RestaurantNode, Integer> calculateFrequencies() { Map<RestaurantNode, Integer> frequencies = new HashMap<>(); for (Map.Entry<Long, RestaurantNode> node : allRestaurantNodes.entrySet()) { List<Long> kNearestNodesByNode = nearestNodeFinder.getSquareWithNodeInCenter(node.getValue(), 500); int size = kNearestNodesByNode.size(); frequencies.put(node.getValue(), size); } // for (Map.Entry<RestaurantNode, Integer> entry : frequencies.entrySet()) { // System.out.println( // String.format("Node: %d - %d", entry.getKey().getId(), entry.getValue()) // ); // } return frequencies; } public List<Coordinate> getTransportationNodesCoordinates() { List<Coordinate> coordinates = new ArrayList<>(); for (HighwayNode node : allNetworkNodes) { LatLon latLon = node.getLatLon(); coordinates.add(new Coordinate(latLon.lon(), latLon.lat())); } return coordinates; } public List<Coordinate> getRestaurantNodesCoordinates() { List<Coordinate> coordinates = new ArrayList<>(); for (RestaurantNode node : allRestaurantNodes.values()) { LatLon latLon = node.getLatLon(); coordinates.add(new Coordinate(latLon.lon(), latLon.lat())); } return coordinates; } }