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) |
| 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
| 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)
| 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 }
1.5.6