osmpbf

package module
v0.0.0-...-cf8c579 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 28, 2015 License: MIT Imports: 10 Imported by: 0

README

osmpbf

Package osmpbf is used to decode OpenStreetMap pbf files.

Installation

$ go get github.com/qedus/osmpbf

Usage

Usage is similar to json.Decode.

	f, err := os.Open("greater-london-140324.osm.pbf")
	if err != nil {
		log.Fatal(err)
	}
	defer f.Close()

	d := osmpbf.NewDecoder(f)
	err = d.Start(runtime.GOMAXPROCS(-1)) // use several goroutines for faster decoding
	if err != nil {
		log.Fatal(err)
	}

	var nc, wc, rc uint64
	for {
		if v, err := d.Decode(); err == io.EOF {
			break
		} else if err != nil {
			log.Fatal(err)
		} else {
			switch v := v.(type) {
			case *osmpbf.Node:
				// Process Node v.
				nc++
			case *osmpbf.Way:
				// Process Way v.
				wc++
			case *osmpbf.Relation:
				// Process Relation v.
				rc++
			default:
				log.Fatalf("unknown type %T\n", v)
			}
		}
	}

	fmt.Printf("Nodes: %d, Ways: %d, Relations: %d\n", nc, wc, rc)

Documentation

http://godoc.org/github.com/qedus/osmpbf

To Do

The parseNodes code has not been tested as I can only find PBF files with DenseNode format.

The code does not decode DenseInfo or Info data structures as I currently have no need for them.

An Encoder still needs to be created to reverse the process.

Documentation

Overview

Package osmpbf decodes OpenStreetMap (OSM) PBF files. Use this package by creating a NewDecoder and passing it a PBF file. Use Start to start decoding process. Use Decode to return Node, Way and Relation structs.

Example
package main

import (
	"fmt"
	"github.com/qedus/osmpbf"
	"io"
	"log"
	"os"
	"runtime"
)

func main() {
	f, err := os.Open("greater-london-140324.osm.pbf")
	if err != nil {
		log.Fatal(err)
	}
	defer f.Close()

	d := osmpbf.NewDecoder(f)
	err = d.Start(runtime.GOMAXPROCS(-1)) // use several goroutines for faster decoding
	if err != nil {
		log.Fatal(err)
	}

	var nc, wc, rc uint64
	for {
		if v, err := d.Decode(); err == io.EOF {
			break
		} else if err != nil {
			log.Fatal(err)
		} else {
			switch v := v.(type) {
			case *osmpbf.Node:
				// Process Node v.
				nc++
			case *osmpbf.Way:
				// Process Way v.
				wc++
			case *osmpbf.Relation:
				// Process Relation v.
				rc++
			default:
				log.Fatalf("unknown type %T\n", v)
			}
		}
	}

	fmt.Printf("Nodes: %d, Ways: %d, Relations: %d\n", nc, wc, rc)
}
Output:

Nodes: 2729006, Ways: 459055, Relations: 12833

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Decoder

type Decoder struct {
	// contains filtered or unexported fields
}

A Decoder reads and decodes OpenStreetMap PBF data from an input stream.

func NewDecoder

func NewDecoder(r *os.File) *Decoder

NewDecoder returns a new decoder that reads from r.

func (*Decoder) Decode

func (dec *Decoder) Decode() (interface{}, int64, error)

Decode reads the next object from the input stream and returns either a Node, Way or Relation struct representing the underlying OpenStreetMap PBF data, or error encountered. The end of the input stream is reported by an io.EOF error.

Decode is safe for parallel execution. Only first error encountered will be returned, subsequent invocations will return io.EOF.

func (*Decoder) DecodeBlocAt

func (dec *Decoder) DecodeBlocAt(pos int64) ([]interface{}, error)

func (*Decoder) ReadFileBlock

func (dec *Decoder) ReadFileBlock() (*OSMPBF.BlobHeader, *OSMPBF.Blob, int64, error)

func (*Decoder) Start

func (dec *Decoder) Start(n int) error

Start decoding process using n goroutines.

type Member

type Member struct {
	ID   int64
	Type MemberType
	Role string
}

type MemberType

type MemberType int
const (
	NodeType MemberType = iota
	WayType
	RelationType
)

type Node

type Node struct {
	ID        int64
	Lat       float64
	Lon       float64
	Tags      map[string]string
	Timestamp time.Time
}

type Relation

type Relation struct {
	ID        int64
	Tags      map[string]string
	Members   []Member
	Timestamp time.Time
}

type Way

type Way struct {
	ID        int64
	Tags      map[string]string
	NodeIDs   []int64
	Timestamp time.Time
}

Directories

Path Synopsis
Package OSMPBF is a generated protocol buffer package.
Package OSMPBF is a generated protocol buffer package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL