[mkgmap-dev] [PATCH 04/14] Refactor to pass Way's as objects.
From Jeffrey C. Ollie jeff at ocjtech.us on Thu Sep 9 21:12:04 BST 2010
From: Scott Crosby <scrosby at cs.rice.edu> --- .../me/parabola/splitter/DensityMapCollector.java | 12 +---- src/uk/me/parabola/splitter/MapProcessor.java | 32 +---------- src/uk/me/parabola/splitter/NodeCollector.java | 11 +---- src/uk/me/parabola/splitter/OSMParser.java | 10 ++-- src/uk/me/parabola/splitter/SplitProcessor.java | 58 ++++++++------------ 5 files changed, 32 insertions(+), 91 deletions(-) diff --git a/src/uk/me/parabola/splitter/DensityMapCollector.java b/src/uk/me/parabola/splitter/DensityMapCollector.java index ef13a01..b4a5953 100644 --- a/src/uk/me/parabola/splitter/DensityMapCollector.java +++ b/src/uk/me/parabola/splitter/DensityMapCollector.java @@ -56,29 +56,19 @@ class DensityMapCollector implements MapCollector { } @Override - public void startWay(int id) {} - - @Override public void startRelation(int id) {} - - @Override - public void wayTag(String key, String value) {} - @Override public void relationTag(String key, String value) {} @Override - public void wayNode(int nodeId) {} - - @Override public void relationNode(int nodeId, String role) {} @Override public void relationWay(int wayId, String role) {} @Override - public void endWay() {} + public void processWay(Way w) {} @Override public void endRelation() {} diff --git a/src/uk/me/parabola/splitter/MapProcessor.java b/src/uk/me/parabola/splitter/MapProcessor.java index 536bcb1..b179d85 100644 --- a/src/uk/me/parabola/splitter/MapProcessor.java +++ b/src/uk/me/parabola/splitter/MapProcessor.java @@ -34,12 +34,6 @@ public interface MapProcessor { void boundTag(Area bounds); /** - * Called when a way is encountered. - * @param id the way's ID. - */ - void startWay(int id); - - /** * Called when a relation is encountered. * @param id the relation's ID. */ @@ -52,15 +46,6 @@ public interface MapProcessor { void processNode(Node n); /** - * Called when a tag is encountered on a way. This method will be - * called for every tag associated with the way that was specified - * in the most recent call to {@link #startWay(int)}. - * @param key the tag's key. - * @param value the tag's value. - */ - void wayTag(String key, String value); - - /** * Called when a tag is encountered on a relation. This method will * be called for every tag associated with the relation that was * specified in the most recent call to {@link #startRelation(int)}. @@ -70,14 +55,6 @@ public interface MapProcessor { void relationTag(String key, String value); /** - * Called when a reference to a node is encountered within a way. This - * method will be called for every node associated with the way that was - * specified in the most recent call to {@link #startWay(int)} . - * @param nodeId the ID of the node. - */ - void wayNode(int nodeId); - - /** * Called when a reference to a node is encountered within a relation. * This method will be called for every node that is associated with the * relation that was specified in the most recent call to {@link #startRelation(int)} . @@ -93,13 +70,8 @@ public interface MapProcessor { */ void relationWay(int wayId, String role); - /** - * Called when processing is complete for a way. This method will be called once - * there is no further data available for the way specified in the most recent - * call to {@link #startWay(int)}. - */ - void endWay(); - + void processWay(Way w); + /** * Called when processing is complete for a relation. This method will be called once * there is no further data available for the relation specified in the most recent diff --git a/src/uk/me/parabola/splitter/NodeCollector.java b/src/uk/me/parabola/splitter/NodeCollector.java index 6556ee6..2607d18 100644 --- a/src/uk/me/parabola/splitter/NodeCollector.java +++ b/src/uk/me/parabola/splitter/NodeCollector.java @@ -49,28 +49,19 @@ class NodeCollector implements MapCollector { } @Override - public void startWay(int id) {} - - @Override public void startRelation(int id) {} @Override - public void wayTag(String key, String value) {} - - @Override public void relationTag(String key, String value) {} @Override - public void wayNode(int nodeId) {} - - @Override public void relationNode(int nodeId, String role) {} @Override public void relationWay(int wayId, String role) {} @Override - public void endWay() {} + public void processWay(Way w) {} @Override public void endRelation() {} diff --git a/src/uk/me/parabola/splitter/OSMParser.java b/src/uk/me/parabola/splitter/OSMParser.java index 80f0c29..081bc83 100644 --- a/src/uk/me/parabola/splitter/OSMParser.java +++ b/src/uk/me/parabola/splitter/OSMParser.java @@ -30,6 +30,7 @@ class OSMParser extends AbstractXppParser implements MapReader { } private Node currentNode = new Node(); + private Way currentWay = new Way(); private final MapProcessor processor; @@ -147,7 +148,8 @@ class OSMParser extends AbstractXppParser implements MapReader { } private void startWay() { - processor.startWay(getIntAttr("id")); + currentWay = new Way(); + currentWay.set(getIntAttr("id")); state = State.Way; } @@ -164,9 +166,9 @@ class OSMParser extends AbstractXppParser implements MapReader { private void processWay(CharSequence name) { if (name.equals("nd")) { - processor.wayNode(getIntAttr("ref")); + currentWay.addRef(getIntAttr("ref")); } else if (name.equals("tag")) { - processor.wayTag(getAttr("k"), getAttr("v")); + currentWay.addTag(getAttr("k"), getAttr("v")); } } @@ -248,7 +250,7 @@ class OSMParser extends AbstractXppParser implements MapReader { } else if (state == State.Way) { if (name.equals("way")) { if (!startNodeOnly) - processor.endWay(); + processor.processWay(currentWay); state = State.None; wayCount++; if (wayCount % WAY_STATUS_UPDATE_THRESHOLD == 0) { diff --git a/src/uk/me/parabola/splitter/SplitProcessor.java b/src/uk/me/parabola/splitter/SplitProcessor.java index f02c1af..693ebc5 100644 --- a/src/uk/me/parabola/splitter/SplitProcessor.java +++ b/src/uk/me/parabola/splitter/SplitProcessor.java @@ -34,8 +34,6 @@ class SplitProcessor implements MapProcessor { private final ArrayList<Thread> workerThreads; private int currentNodeAreaSet; - - private Way currentWay = new Way(); private BitSet currentWayAreaSet; private Relation currentRelation = new Relation(); @@ -76,45 +74,16 @@ class SplitProcessor implements MapProcessor { } @Override - public void startWay(int id) { - currentWay.set(id); - } - - @Override public void startRelation(int id) { currentRelation.set(id); } @Override - public void wayTag(String key, String value) { - currentWay.addTag(key, value); - } - - @Override public void relationTag(String key, String value) { currentRelation.addTag(key, value); } @Override - public void wayNode(int id) { - // Get the list of areas that the node is in. A node may be in - // more than one area because of overlap. - int set = coords.get(id); - - // add the list of areas to the currentWayAreaSet - if (set != 0) { - int mask = 0xff; - for (int slot = 0; slot < 4; slot++, mask <<= 8) { - int val = (set & mask) >>> (slot * 8); - if (val == 0) - break; - currentWayAreaSet.set(val - 1); - } - } - currentWay.addRef(id); - } - - @Override public void relationNode(int id, String role) { { currentRelation.addMember("node", id, role); @@ -171,13 +140,30 @@ class SplitProcessor implements MapProcessor { } @Override - public void endWay() { + public void processWay(Way w) { + + for (int id: w.getRefs().asArray()) { + // Get the list of areas that the node is in. A node may be in + // more than one area because of overlap. + int set = coords.get(id); + + // add the list of areas to the currentWayAreaSet + if (set != 0) { + int mask = 0xff; + for (int slot = 0; slot < 4; slot++, mask <<= 8) { + int val = (set & mask) >>> (slot * 8); + if (val == 0) + break; + currentWayAreaSet.set(val - 1); + } + } + } + try { - writeWay(); - currentWay = new Way(); + writeWay(w); currentWayAreaSet.clear(); } catch (IOException e) { - throw new RuntimeException("failed to write way " + currentWay.getId(), e); + throw new RuntimeException("failed to write way " + w.getId(), e); } } @@ -237,7 +223,7 @@ class SplitProcessor implements MapProcessor { private boolean seenWay; - private void writeWay() throws IOException { + private void writeWay(Way currentWay) throws IOException { if (!seenWay) { seenWay = true; System.out.println("Writing ways " + new Date()); -- 1.7.2.3
- Previous message: [mkgmap-dev] [PATCH 03/14] Refactor to pass Nodes as objects
- Next message: [mkgmap-dev] [PATCH 05/14] Refactor to pass Relations as objects.
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the mkgmap-dev mailing list