我目前有一个opentreetmap转换成可与相扑汽车一起使用的10000辆汽车,并且不限时间。作为学校作业,我们需要使用这些数据并将其加载到我们现有的应用程序中,以测试我们编写的代码的可伸缩性。
问题是如何将每辆汽车生成的信息加载到单独的Java应用程序中。我曾尝试寻找解决方案,但到目前为止还是空着。我希望我只是错过了一些事情,并且可以做到。

最佳答案

基本上有两种方法:


使用套接字连接或命名管道编写Sumo XML输出时解析
使用TraCI4J或TraaS接口直接连接到Sumo。


对于第一种方法,您需要在Java端打开服务器套接字

ServerSocket serverSocket = new ServerSocket(12345);
Socket clientSocket = serverSocket.accept();
BufferedReader in = new BufferedReader(
        new InputStreamReader(clientSocket.getInputStream()));


然后运行Sumo将输出定向到套接字。假设您都在同一台机器上运行并且使用排放输出,则应调用

sumo -c my.sumocfg --emission-output localhost:12345


(您当然可以选择不同于12345的端口,但两个呼叫必须匹配)。

然后,您可以解析从BufferedReader中读取的文件,您可能希望读取有关XML解析的内容。

第二种方法将涉及TraaS

String sumo_bin = "c:/Program Files (x86)/sumo/bin/sumo-gui.exe";
String config_file = "simulation/config.sumo.cfg";
SumoTraciConnection conn = new SumoTraciConnection(sumo_bin, config_file);

conn.runServer();

//load routes and initialize the simulation
conn.do_timestep();

//get the CO2 emission for a specific vehicle
double co2 = (double) conn.do_job_get(Vehicle.getCO2Emission("v0"));
System.out.println("CO2: " + co2 + " g/s");

//stop TraCI
conn.close();


请参阅TraaSSumo outputs上的文档以获取可用的方法和输出

10-06 14:38