fix import of relations without way members when using -limitto

master
Oliver Tonnhofer 2016-02-09 11:23:21 +01:00
parent 8949fe28c4
commit 368c6699a7
4 changed files with 32 additions and 19 deletions

31
cache/osm.go vendored
View File

@ -3,9 +3,11 @@ package cache
import (
bin "encoding/binary"
"errors"
"github.com/jmhodges/levigo"
"os"
"path/filepath"
"github.com/jmhodges/levigo"
"github.com/omniscale/imposm3/element"
)
var (
@ -129,6 +131,33 @@ func (c *OSMCache) Remove() error {
return nil
}
// FirstMemberIsCached checks whether the first way or node member is cached.
// Also returns true if there are no members of type WAY or NODE.
func (c *OSMCache) FirstMemberIsCached(members []element.Member) (bool, error) {
for _, m := range members {
if m.Type == element.WAY {
_, err := c.Ways.GetWay(m.Id)
if err == NotFound {
return false, nil
}
if err != nil {
return false, err
}
return true, nil
} else if m.Type == element.NODE {
_, err := c.Coords.GetCoord(m.Id)
if err == NotFound {
return false, nil
}
if err != nil {
return false, err
}
return true, nil
}
}
return true, nil
}
type cache struct {
db *levigo.DB
options *cacheOptions

16
cache/ways.go vendored
View File

@ -113,22 +113,6 @@ func (self *WaysCache) FillMembers(members []element.Member) error {
return nil
}
func (self *WaysCache) FirstMemberIsCached(members []element.Member) (bool, error) {
for _, m := range members {
if m.Type == element.WAY {
_, err := self.GetWay(m.Id)
if err == NotFound {
return false, nil
}
if err != nil {
return false, err
}
return true, nil
}
}
return false, nil
}
type InsertedWaysCache struct {
cache
}

View File

@ -242,7 +242,7 @@ func Update(oscFile string, geometryLimiter *limit.Limiter, expireor expire.Expi
if elem.Rel != nil {
// check if first member is cached to avoid caching
// unneeded relations (typical outside of our coverage)
cached, err := osmCache.Ways.FirstMemberIsCached(elem.Rel.Members)
cached, err := osmCache.FirstMemberIsCached(elem.Rel.Members)
if err != nil {
return diffError(err, "query first member %v", elem.Rel)
}

View File

@ -152,7 +152,7 @@ func ReadPbf(cache *osmcache.OSMCache, progress *stats.Statistics,
numWithTags += 1
}
if withLimiter {
cached, err := cache.Ways.FirstMemberIsCached(rels[i].Members)
cached, err := cache.FirstMemberIsCached(rels[i].Members)
if err != nil {
log.Errorf("error while checking for cached members of relation %d: %v", rels[i].Id, err)
cached = true // don't skip in case of error