Changeset 1278 in josm
- Timestamp:
- 2009-01-17T15:12:46+01:00 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/io/OsmReader.java
r1254 r1278 7 7 import java.io.InputStream; 8 8 import java.io.InputStreamReader; 9 import java.io.FileInputStream; 10 import java.nio.channels.FileChannel; 9 11 import java.util.ArrayList; 10 12 import java.util.Arrays; … … 50 52 public class OsmReader { 51 53 54 static long tagsN = 0; 55 static long nodesN = 0; 56 static long waysN = 0; 57 static long relationsN = 0; 58 static long membersN = 0; 59 60 static InputStream currSource; 61 52 62 /** 53 63 * This is used as (readonly) source for finding missing references when not transferred in the … … 133 143 private OsmPrimitive current; 134 144 private String generator; 135 145 int n = 0; 146 136 147 @Override public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { 137 148 try { 149 if(n%100000 == 0) { 150 try { 151 FileInputStream fis = (FileInputStream)currSource; 152 FileChannel channel = fis.getChannel(); 153 double perc = (((double)channel.position()) / ((double)channel.size()) * 100.0); 154 System.out.format(" " + (int)perc + "%%"); 155 } 156 catch(IOException e) { 157 System.out.format("Error reading file position " + e); 158 } 159 } 160 n++; 161 138 162 if (qName.equals("osm")) { 139 163 if (atts == null) … … 187 211 188 212 } else if (qName.equals("node")) { 213 nodesN++; 189 214 current = new Node(new LatLon(getDouble(atts, "lat"), getDouble(atts, "lon"))); 190 215 readCommon(atts, current); 191 216 nodes.put(current.id, (Node)current); 192 217 } else if (qName.equals("way")) { 218 waysN++; 193 219 current = new OsmPrimitiveData(); 194 220 readCommon(atts, current); … … 206 232 207 233 } else if (qName.equals("relation")) { 234 relationsN++; 208 235 current = new OsmPrimitiveData(); 209 236 readCommon(atts, current); 210 237 relations.put((OsmPrimitiveData)current, new LinkedList<RelationMemberData>()); 211 238 } else if (qName.equals("member")) { 239 membersN++; 212 240 Collection<RelationMemberData> list = relations.get(current); 213 241 if (list == null) … … 227 255 228 256 } else if (qName.equals("tag")) { 257 tagsN++; 229 258 current.put(atts.getValue("k"), atts.getValue("v")); 230 259 } … … 365 394 */ 366 395 private Way findWay(long id) { 367 for (Way wy : ds.ways)368 if (wy.id == id)369 return wy;370 396 for (Way wy : Main.ds.ways) 371 397 if (wy.id == id) … … 407 433 } 408 434 435 // Cache the ways here for much better search performance 436 HashMap hm = new HashMap(10000); 437 for (Way wy : ds.ways) 438 hm.put(wy.id, wy); 439 409 440 // pass 2 - sort out members 410 441 for (Entry<OsmPrimitiveData, Collection<RelationMemberData>> e : relations.entrySet()) { … … 421 452 } 422 453 } else if (emd.type.equals("way")) { 423 em.member = findWay(emd.id); 454 em.member = (OsmPrimitive)hm.get(emd.id); 455 if (em.member == null) 456 em.member = findWay(emd.id); 424 457 if (em.member == null) { 425 458 em.member = new Way(emd.id); … … 438 471 } 439 472 } 473 hm = null; 440 474 } 441 475 … … 454 488 osm.references = ref == null ? new DataSet() : ref; 455 489 490 491 currSource = source; 492 456 493 // phase 1: Parse nodes and read in raw ways 457 494 InputSource inputSource = new InputSource(new InputStreamReader(source, "UTF-8")); … … 463 500 } 464 501 465 if (pleaseWaitDlg != null) { 466 pleaseWaitDlg.progress.setValue(0); 467 pleaseWaitDlg.currentAction.setText(tr("Preparing data...")); 468 } 502 System.out.println(""); 503 System.out.println("Parser finished: Tags " + tagsN + " Nodes " + nodesN + " Ways " + waysN + 504 " Relations " + relationsN + " Members " + membersN); 469 505 470 506 for (Node n : osm.nodes.values()) … … 484 520 o.id = 0; 485 521 522 System.out.println("File loaded!"); 523 486 524 return osm; 487 525 }
Note:
See TracChangeset
for help on using the changeset viewer.