All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.osmtools.pbf.OsmPbfParser Maven / Gradle / Ivy

The newest version!
package org.osmtools.pbf;

import java.util.List;

import org.osmtools.pbf.data.Bounds;
import org.osmtools.pbf.data.Node;

import crosby.binary.BinaryParser;
import crosby.binary.OsmObjectFactory;
import crosby.binary.Osmformat;

public class OsmPbfParser extends BinaryParser {

	private OsmProcessor sink;

	public OsmPbfParser(OsmProcessor sink) {
		this.sink = sink;
	}

	@Override
	public void complete() {
	}

	@Override
	protected void parseNodes(List nodes, OsmObjectFactory blockContext) {
		for (Osmformat.Node pbfNode : nodes) {
			sink.process(blockContext.createNode(pbfNode));
		}
	}

	@Override
	protected void parseWays(List ways, OsmObjectFactory blockContext) {
		for (Osmformat.Way way : ways) {
			sink.process(blockContext.createWay(way));
		}
	}

	@Override
	public void parse(Osmformat.HeaderBlock block) {
		for (String s : block.getRequiredFeaturesList()) {
			if (s.equals("OsmSchema-V0.6")) {
				continue; // We can parse this.
			}
			if (s.equals("DenseNodes")) {
				continue; // We can parse this.
			}
			throw new RuntimeException("File requires unknown feature: " + s);
		}

		if (block.hasBbox()) {
			String source = "myVersion";
			if (block.hasSource()) {
				source = block.getSource();
			}

			double multiplier = .000000001;
			double rightf = block.getBbox().getRight() * multiplier;
			double leftf = block.getBbox().getLeft() * multiplier;
			double topf = block.getBbox().getTop() * multiplier;
			double bottomf = block.getBbox().getBottom() * multiplier;

			sink.process(new Bounds(rightf, leftf, topf, bottomf, source));
		}
	}

	@Override
	protected void parseDense(Osmformat.DenseNodes nodes, OsmObjectFactory blockContext) {
		for (Node node : blockContext.createNodes(nodes)) {
			sink.process(node);
		}
	}

	@Override
	protected void parseRelations(List rels, OsmObjectFactory objectFactory) {
		for (Osmformat.Relation relation : rels) {
			sink.process(objectFactory.createRelation(relation));
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy