diff --git a/src/main/java/org/leolo/map/osm/extract/ExtractElement.java b/src/main/java/org/leolo/map/osm/extract/ExtractElement.java index 3fd8fa9..358e846 100644 --- a/src/main/java/org/leolo/map/osm/extract/ExtractElement.java +++ b/src/main/java/org/leolo/map/osm/extract/ExtractElement.java @@ -4,9 +4,7 @@ import de.topobyte.osm4j.core.access.DefaultOsmHandler; import de.topobyte.osm4j.core.access.OsmInputException; import de.topobyte.osm4j.core.access.OsmIterator; import de.topobyte.osm4j.core.access.OsmReader; -import de.topobyte.osm4j.core.model.iface.OsmRelation; -import de.topobyte.osm4j.core.model.iface.OsmRelationMember; -import de.topobyte.osm4j.core.model.iface.OsmTag; +import de.topobyte.osm4j.core.model.iface.*; import de.topobyte.osm4j.pbf.seq.PbfReader; import org.apache.commons.cli.*; import org.apache.logging.log4j.LogManager; @@ -198,11 +196,75 @@ public class ExtractElement { private void processNode(InputFile dbFile) throws IOException{ if(pendingNodes.isEmpty()) return; + log.atInfo().log("Processing {} node(s)", pendingNodes.size()); + OsmReader reader = new PbfReader(dbFile.getInputStream(), true); + reader.setHandler(new DefaultOsmHandler() { + @Override + public void handle(OsmNode node) throws IOException { + super.handle(node); + if(pendingNodes.contains(node.getId())){ + log.atDebug().log("Found node #{}", node.getId()); + Node n = new Node(node.getLatitude(), node.getLongitude()); + for(int i=0;i{}", t.getKey(), t.getValue()); + n.putTag(t.getKey(), t.getValue()); + } + allEntry.put(node.getId(), n); + nodes.put(node.getId(), n); + } + } + + @Override + public void complete() throws IOException { + super.complete(); + log.atInfo().log("Finish reading the DB file"); + } + }); + try { + reader.read(); + } catch (OsmInputException e) { + log.atError().withThrowable(e).log("Error when reading the input!"); + } } private void processWay(InputFile dbFile) throws IOException{ if(pendingWays.isEmpty()) return; + log.atInfo().log("Processing {} way(s)", pendingWays.size()); + OsmReader reader = new PbfReader(dbFile.getInputStream(), true); + reader.setHandler(new DefaultOsmHandler() { + @Override + public void handle(OsmWay w) throws IOException { + super.handle(w); + if(pendingWays.contains(w.getId())){ + Way way = new Way(); + log.atDebug().log("Found way #{}", w.getId()); + for(int i=0;i{}", tag.getKey(), tag.getValue()); + way.putTag(tag.getKey(), tag.getValue()); + } + allEntry.put(w.getId(), way); + ways.put(w.getId(), way); + } + } + + @Override + public void complete() throws IOException { + super.complete(); + log.atInfo().log("Finish reading the DB file"); + } + }); + try { + reader.read(); + } catch (OsmInputException e) { + log.atError().withThrowable(e).log("Error when reading the input!"); + } } private void expandRelations(InputFile dbFile,final int round) throws IOException{ @@ -210,7 +272,6 @@ public class ExtractElement { log.atInfo().log("No relation to be expanded"); return; } - HashSet foundRelations = new HashSet<>(); HashSet nextRound = new HashSet<>(); log.atInfo().log("Expanding relations round {} with {} relation(s)", round, pendingRelations.size()); OsmReader reader = new PbfReader(dbFile.getInputStream(), true);