fix import of relations without way members when using -limitto
parent
8949fe28c4
commit
368c6699a7
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue