make block struct private
parent
45fc51e2ca
commit
c2bb7e7d2e
|
@ -2,18 +2,25 @@ package pbf
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"code.google.com/p/goprotobuf/proto"
|
|
||||||
"compress/zlib"
|
"compress/zlib"
|
||||||
structs "encoding/binary"
|
structs "encoding/binary"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/omniscale/imposm3/parser/pbf/osmpbf"
|
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"code.google.com/p/goprotobuf/proto"
|
||||||
|
"github.com/omniscale/imposm3/parser/pbf/osmpbf"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type block struct {
|
||||||
|
filename string
|
||||||
|
offset int64
|
||||||
|
size int32
|
||||||
|
}
|
||||||
|
|
||||||
type parserError struct {
|
type parserError struct {
|
||||||
message string
|
message string
|
||||||
originalError error
|
originalError error
|
||||||
|
@ -29,7 +36,7 @@ func newParserError(message string, err error) *parserError {
|
||||||
|
|
||||||
var supportedFeatured = map[string]bool{"OsmSchema-V0.6": true, "DenseNodes": true}
|
var supportedFeatured = map[string]bool{"OsmSchema-V0.6": true, "DenseNodes": true}
|
||||||
|
|
||||||
func readBlobData(pos Block) ([]byte, error) {
|
func readBlobData(pos block) ([]byte, error) {
|
||||||
file, err := os.Open(pos.filename)
|
file, err := os.Open(pos.filename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, newParserError("file open", err)
|
return nil, newParserError("file open", err)
|
||||||
|
@ -63,7 +70,7 @@ func readBlobData(pos Block) ([]byte, error) {
|
||||||
return raw, nil
|
return raw, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func readPrimitiveBlock(pos Block) *osmpbf.PrimitiveBlock {
|
func readPrimitiveBlock(pos block) *osmpbf.PrimitiveBlock {
|
||||||
raw, err := readBlobData(pos)
|
raw, err := readBlobData(pos)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Panic(err)
|
log.Panic(err)
|
||||||
|
@ -77,7 +84,7 @@ func readPrimitiveBlock(pos Block) *osmpbf.PrimitiveBlock {
|
||||||
return block
|
return block
|
||||||
}
|
}
|
||||||
|
|
||||||
func readAndParseHeaderBlock(pos Block) (*pbfHeader, error) {
|
func readAndParseHeaderBlock(pos block) (*pbfHeader, error) {
|
||||||
raw, err := readBlobData(pos)
|
raw, err := readBlobData(pos)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -136,7 +143,7 @@ func (pbf *Pbf) parseHeader() error {
|
||||||
panic("invalid block type, expected OSMHeader, got " + header.GetType())
|
panic("invalid block type, expected OSMHeader, got " + header.GetType())
|
||||||
}
|
}
|
||||||
var err error
|
var err error
|
||||||
pbf.Header, err = readAndParseHeaderBlock(Block{pbf.Filename, offset, size})
|
pbf.Header, err = readAndParseHeaderBlock(block{pbf.Filename, offset, size})
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -150,8 +157,8 @@ func (pbf *Pbf) nextBlock() (offset int64, size int32, header *osmpbf.BlobHeader
|
||||||
return offset, size, header
|
return offset, size, header
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pbf *Pbf) BlockPositions() (positions chan Block) {
|
func (pbf *Pbf) BlockPositions() (positions chan block) {
|
||||||
positions = make(chan Block, 8)
|
positions = make(chan block, 8)
|
||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
offset, size, header := pbf.nextBlock()
|
offset, size, header := pbf.nextBlock()
|
||||||
|
@ -163,7 +170,7 @@ func (pbf *Pbf) BlockPositions() (positions chan Block) {
|
||||||
if header.GetType() != "OSMData" {
|
if header.GetType() != "OSMData" {
|
||||||
panic("invalid block type, expected OSMData, got " + header.GetType())
|
panic("invalid block type, expected OSMData, got " + header.GetType())
|
||||||
}
|
}
|
||||||
positions <- Block{pbf.Filename, offset, size}
|
positions <- block{pbf.Filename, offset, size}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
return
|
return
|
||||||
|
|
|
@ -63,7 +63,7 @@ func (p *parser) NotifyRelations(cb func()) {
|
||||||
p.relSync = util.NewSyncPoint(p.nParser, cb)
|
p.relSync = util.NewSyncPoint(p.nParser, cb)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *parser) parseBlock(pos Block) {
|
func (p *parser) parseBlock(pos block) {
|
||||||
block := readPrimitiveBlock(pos)
|
block := readPrimitiveBlock(pos)
|
||||||
stringtable := newStringTable(block.GetStringtable())
|
stringtable := newStringTable(block.GetStringtable())
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue