write coords->way index

master
Oliver Tonnhofer 2013-05-30 12:00:11 +02:00
parent 51ccd02645
commit 773cbaac94
4 changed files with 22 additions and 15 deletions

4
cache/coords.go vendored
View File

@ -114,9 +114,9 @@ func NewRefIndex(path string) (*RefIndex, error) {
if err != nil {
return nil, err
}
index.write = make(chan map[int64][]int64)
index.write = make(chan map[int64][]int64, 2)
index.cache = make(map[int64][]int64, cacheSize)
index.add = make(chan idRef)
index.add = make(chan idRef, 1024)
index.waitWrite = &sync.WaitGroup{}
index.waitAdd = &sync.WaitGroup{}

View File

@ -180,13 +180,16 @@ func main() {
if err != nil {
die(err)
}
var diffCache *cache.DiffCache
diffCache := cache.NewDiffCache(*cachedir)
if err = diffCache.Remove(); err != nil {
die(err)
}
if err = diffCache.Open(); err != nil {
die(err)
if *diff {
diffCache = cache.NewDiffCache(*cachedir)
if err = diffCache.Remove(); err != nil {
die(err)
}
if err = diffCache.Open(); err != nil {
die(err)
}
}
insertBuffer := writer.NewInsertBuffer()
@ -206,7 +209,7 @@ func main() {
relWriter.Close()
ways := osmCache.Ways.Iter()
wayWriter := writer.NewWayWriter(osmCache, ways, insertBuffer,
wayWriter := writer.NewWayWriter(osmCache, diffCache, ways, insertBuffer,
lineStringsTagMatcher, polygonsTagMatcher, progress)
wayWriter.SetClipper(geometryClipper)
wayWriter.Start()
@ -217,14 +220,16 @@ func main() {
nodeWriter.SetClipper(geometryClipper)
nodeWriter.Start()
diffCache.Coords.Close()
wayWriter.Close()
nodeWriter.Close()
insertBuffer.Close()
dbWriter.Close()
progress.Stop()
if *diff {
diffCache.Close()
}
log.StopStep(stepWrite)
if db, ok := db.(database.Generalizer); ok {

View File

@ -19,12 +19,13 @@ type WayWriter struct {
polygonTagMatcher *mapping.TagMatcher
}
func NewWayWriter(osmCache *cache.OSMCache, ways chan *element.Way,
func NewWayWriter(osmCache *cache.OSMCache, diffCache *cache.DiffCache, ways chan *element.Way,
insertBuffer *InsertBuffer, lineStringTagMatcher *mapping.TagMatcher,
polygonTagMatcher *mapping.TagMatcher, progress *stats.Statistics) *OsmElemWriter {
ww := WayWriter{
OsmElemWriter: OsmElemWriter{
osmCache: osmCache,
diffCache: diffCache,
progress: progress,
wg: &sync.WaitGroup{},
insertBuffer: insertBuffer,
@ -65,9 +66,9 @@ func (ww *WayWriter) loop() {
}
}
// if *diff {
// ww.diffCache.Coords.AddFromWay(w)
// }
if ww.diffCache != nil {
ww.diffCache.Coords.AddFromWay(w)
}
}
ww.wg.Done()
}

View File

@ -55,6 +55,7 @@ type looper interface {
type OsmElemWriter struct {
osmCache *cache.OSMCache
diffCache *cache.DiffCache
progress *stats.Statistics
insertBuffer *InsertBuffer
wg *sync.WaitGroup