ansim::TraceReader Class Reference


Detailed Description

class for reading sumo trace file
Author:
Thimor Bohn <bohn@itm.uni-luebeck.de>

Definition at line 23 of file TraceReader.java.


Static Public Member Functions

static void readFirst (String trace, List< Vehicle > vehicles, HashMap< String, Integer > vehicleIds, List< Edge > edges)
static void readSecond (PrintWriter out, String trace, List< Vehicle > vehicles, HashMap< String, Integer > vehicleIds, List< Edge > edges)

Member Function Documentation

static void ansim::TraceReader::readFirst ( String  trace,
List< Vehicle vehicles,
HashMap< String, Integer >  vehicleIds,
List< Edge edges 
) [inline, static]

method for reading trace file - stage 1

Parameters:
trace name of trace file
vehicles holds all vehicles after execution
vehicleIds holds corresponding ids
edges net

Definition at line 31 of file TraceReader.java.

References ansim::Edge::length, ansim::Edge::xfrom, ansim::Edge::xto, ansim::Edge::yfrom, and ansim::Edge::yto.

00031                                                                                                                               {
00032         try {
00033             InputStream in = new FileInputStream(trace);
00034             XMLInputFactory factory = XMLInputFactory.newInstance();
00035             XMLStreamReader parser = factory.createXMLStreamReader(in);
00036             for (int event = parser.next(); event != XMLStreamConstants.END_DOCUMENT; event = parser.next()) {
00037                 String edgeid = "";
00038                 if (event == XMLStreamConstants.START_ELEMENT) {
00039                     // edge-element found
00040                     if (parser.getLocalName().equals("edge")) {
00041                         for (int attr=0; attr < parser.getAttributeCount(); attr++) {
00042                             String attrName = parser.getAttributeLocalName(attr);
00043                             String value = parser.getAttributeValue(attr);
00044                             if ("id".equals(attrName)) edgeid = value;
00045                         }
00046                     }
00047                     // vehicle-element found
00048                     if (parser.getLocalName().equals("vehicle")) {
00049                         String id = "";
00050                         float pos = 0;
00051                         float x = 0;
00052                         float y = 0;
00053                         for (int attr=0; attr < parser.getAttributeCount(); attr++) {
00054                             String attrName = parser.getAttributeLocalName(attr);
00055                             String value = parser.getAttributeValue(attr);
00056                             if ("id".equals(attrName))       id = value;
00057                             if ("pos".equals(attrName))      pos = Float.parseFloat(value);
00058                         }
00059                         // get vehicle position
00060                         if (!vehicleIds.containsKey(id)) {
00061                             Edge thisedge = null;
00062                             for (Edge edge: edges) {
00063                                 thisedge = edge;
00064                                 if (edge.id.equals(edgeid)) break;
00065                             }
00066                             x = thisedge.xfrom + pos * (thisedge.xto - thisedge.xfrom) / thisedge.length;
00067                             y = thisedge.yfrom + pos * (thisedge.yto - thisedge.yfrom) / thisedge.length;
00068                             Vehicle vehicle = new Vehicle(id, x, y);
00069                             vehicles.add(vehicle);
00070                             vehicleIds.put(id, vehicleIds.size());
00071                         }
00072                     }
00073                 }
00074             }
00075             parser.close();
00076         } catch (XMLStreamException e) {
00077             System.err.println(e);
00078         } catch (IOException e) {
00079             System.err.println(e);
00080             //System.out.println("IOException while parsing " + trace);
00081         }
00082     }

static void ansim::TraceReader::readSecond ( PrintWriter  out,
String  trace,
List< Vehicle vehicles,
HashMap< String, Integer >  vehicleIds,
List< Edge edges 
) [inline, static]

method for reading sumo tracefile - stage 2 (and writing movements to ansim tracefile)

Parameters:
out writer for ansim tracefile
trace name of sumo tracefile
vehicles holds all vehicles to be written
vehicleIds holds corresponding ids
edges net

Definition at line 92 of file TraceReader.java.

References ansim::Edge::length, ansim::Edge::xfrom, ansim::Edge::xto, ansim::Edge::yfrom, and ansim::Edge::yto.

00092                                                                                                                                                 {
00093         try {
00094             InputStream in = new FileInputStream(trace);
00095             XMLInputFactory factory = XMLInputFactory.newInstance();
00096             XMLStreamReader parser = factory.createXMLStreamReader(in);
00097             String edgeid = "";
00098             float time = -1;
00099             out.println("<mobility>");
00100             // parse tracefile
00101             for (int event = parser.next(); event != XMLStreamConstants.END_DOCUMENT; event = parser.next()) {
00102                 if (event == XMLStreamConstants.START_ELEMENT) {
00103                     // get current time
00104                     if (parser.getLocalName().equals("timestep")) {
00105                         for (int attr=0; attr < parser.getAttributeCount(); attr++) {
00106                             String attrName = parser.getAttributeLocalName(attr);
00107                             String value = parser.getAttributeValue(attr);
00108                             if ("time".equals(attrName))       time = Float.parseFloat(value);
00109                         }
00110                     }
00111                     // process only positive time
00112                     if (time>0) {
00113                         // edge found
00114                         if (parser.getLocalName().equals("edge")) {
00115                             for (int attr=0; attr < parser.getAttributeCount(); attr++) {
00116                                 String attrName = parser.getAttributeLocalName(attr);
00117                                 String value = parser.getAttributeValue(attr);
00118                                 if ("id".equals(attrName))       edgeid =        value;
00119                             }
00120                         }
00121                         // vehicle found
00122                         if (parser.getLocalName().equals("vehicle")) {
00123                             String id = "";
00124                             float pos = 0;
00125                             float x = 0;
00126                             float y = 0;
00127                             for (int attr=0; attr < parser.getAttributeCount(); attr++) {
00128                                 String attrName = parser.getAttributeLocalName(attr);
00129                                 String value = parser.getAttributeValue(attr);
00130                                 if ("id".equals(attrName))       id = value;
00131                                 if ("pos".equals(attrName))      pos = Float.parseFloat(value);
00132                             }
00133                             Edge thisedge = null;
00134                             // find/calc position of vehicle
00135                             for (Edge edge: edges) {
00136                                 thisedge = edge;
00137                                 if (edge.id.equals(edgeid)) break;
00138                             }
00139                             x = thisedge.xfrom + pos * (thisedge.xto - thisedge.xfrom) / thisedge.length;
00140                             y = thisedge.yfrom + pos * (thisedge.yto - thisedge.yfrom) / thisedge.length;
00141 
00142                             // write current entry to ansim tracefile
00143                             out.println("  <position_change>");
00144                             out.println("    <node_id>" + vehicleIds.get(id) + "</node_id>");
00145                             out.println("    <start_time>" + time + "</start_time>");
00146                             out.println("    <end_time>" + (time+1) + "</end_time>");
00147                             out.println("    <destination>");
00148                             out.println("      <xpos>" + x + "</xpos>");
00149                             out.println("      <ypos>" + y + "</ypos>");
00150                             out.println("    </destination>");
00151                             out.println("  </position_change>");
00152 
00153                         }
00154                     }
00155                 }
00156             }
00157             out.println("</mobility>");
00158             parser.close();
00159         } catch (XMLStreamException e) {
00160             System.err.println(e);
00161         } catch (IOException e) {
00162             System.err.println(e);
00163         }
00164     }


The documentation for this class was generated from the following file:

Generated on Wed May 5 00:07:01 2010 for Sumo - Simulation of Urban MObility by  doxygen 1.5.6