From fc795d3313919b1ce5fe9c4ff129db5d70afd709 Mon Sep 17 00:00:00 2001 From: michael Date: Fri, 19 Oct 2012 23:00:21 +0100 Subject: [PATCH] Java file read demonstration, to help people getting started. --- README | 2 + pom.xml | 2 + resources/sample.pbf | Bin 0 -> 9653 bytes .../crosby/binary/test/ReadFileExample.java | 86 ++++++++++++++++++ 4 files changed, 90 insertions(+) create mode 100644 resources/sample.pbf create mode 100644 src.java/crosby/binary/test/ReadFileExample.java diff --git a/README b/README index 5006cda..2e8517b 100644 --- a/README +++ b/README @@ -6,6 +6,8 @@ See http://wiki.openstreetmap.org/wiki/PBF_Format . There is a Java and a C version of the PBF library code here. +For a Java usage example, see src.java\crosby\binary\test\ReadFileExample.java + C Version ========= diff --git a/pom.xml b/pom.xml index d1e3024..f5172dc 100644 --- a/pom.xml +++ b/pom.xml @@ -26,6 +26,8 @@ ${basedir}/src.java ${basedir}/build + ${basedir}/resources + org.apache.maven.plugins diff --git a/resources/sample.pbf b/resources/sample.pbf new file mode 100644 index 0000000000000000000000000000000000000000..8a22edfee9bf1514af8cecf183e0e994bc40041d GIT binary patch literal 9653 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 literal 0 HcmV?d00001 diff --git a/src.java/crosby/binary/test/ReadFileExample.java b/src.java/crosby/binary/test/ReadFileExample.java new file mode 100644 index 0000000..082d406 --- /dev/null +++ b/src.java/crosby/binary/test/ReadFileExample.java @@ -0,0 +1,86 @@ +package crosby.binary.test; + +import crosby.binary.*; +import crosby.binary.Osmformat.*; +import crosby.binary.file.*; +import java.io.*; +import java.util.List; + +/** + * Demonstrates how to read a file. Reads sample.pbf from the resources folder + * and prints details about it to the standard output. + * + * @author Michael Tandy + */ +public class ReadFileExample { + + public static void main(String[] args) throws Exception { + InputStream input = ReadFileExample.class.getResourceAsStream("/sample.pbf"); + BlockReaderAdapter brad = new TestBinaryParser(); + new BlockInputStream(input, brad).process(); + } + + private static class TestBinaryParser extends BinaryParser { + + @Override + protected void parseRelations(List rels) { + if (!rels.isEmpty()) + System.out.println("Got some relations to parse."); + Relation r = null; + } + + @Override + protected void parseDense(DenseNodes nodes) { + long lastId=0; + long lastLat=0; + long lastLon=0; + + for (int i=0 ; i nodes) { + for (Node n : nodes) { + System.out.printf("Regular node, ID %d @ %.6f,%.6f\n", + n.getId(),parseLat(n.getLat()),parseLon(n.getLon())); + } + } + + @Override + protected void parseWays(List ways) { + for (Way w : ways) { + System.out.println("Way ID " + w.getId()); + StringBuilder sb = new StringBuilder(); + sb.append(" Nodes: "); + long lastRef = 0; + for (Long ref : w.getRefsList()) { + lastRef+= ref; + sb.append(lastRef).append(" "); + } + sb.append("\n Key=value pairs: "); + for (int i=0 ; i