2013-05-17 12:29:23 +04:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"flag"
|
|
|
|
"goposm/cache"
|
|
|
|
"log"
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
nodeId = flag.Int64("node", -1, "node")
|
|
|
|
wayId = flag.Int64("way", -1, "way")
|
|
|
|
relId = flag.Int64("rel", -1, "relation")
|
|
|
|
full = flag.Bool("full", false, "recurse into relations/ways")
|
2013-05-30 18:04:14 +04:00
|
|
|
deps = flag.Bool("deps", false, "show dependent ways/relations")
|
2013-05-17 12:29:23 +04:00
|
|
|
cachedir = flag.String("cachedir", "/tmp/goposm", "cache directory")
|
|
|
|
)
|
|
|
|
|
|
|
|
func printRelations(osmCache *cache.OSMCache, ids []int64, recurse bool) {
|
|
|
|
for _, id := range ids {
|
|
|
|
rel, err := osmCache.Relations.GetRelation(id)
|
|
|
|
if err == cache.NotFound {
|
|
|
|
log.Println("not found")
|
|
|
|
} else if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
} else {
|
|
|
|
log.Println(rel)
|
|
|
|
if recurse {
|
|
|
|
oldPrefix := log.Prefix()
|
|
|
|
log.SetPrefix(oldPrefix + " ")
|
|
|
|
for _, m := range rel.Members {
|
2013-05-30 18:04:14 +04:00
|
|
|
printWays(osmCache, nil, []int64{m.Id}, true, false)
|
2013-05-17 12:29:23 +04:00
|
|
|
}
|
2013-05-30 18:04:14 +04:00
|
|
|
log.SetPrefix(oldPrefix)
|
2013-05-17 12:29:23 +04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-30 18:04:14 +04:00
|
|
|
func printWays(osmCache *cache.OSMCache, diffCache *cache.DiffCache, ids []int64, recurse, deps bool) {
|
2013-05-17 12:29:23 +04:00
|
|
|
for _, id := range ids {
|
|
|
|
way, err := osmCache.Ways.GetWay(id)
|
|
|
|
if err == cache.NotFound {
|
|
|
|
log.Println(id, "not found")
|
|
|
|
} else if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
} else {
|
|
|
|
log.Println(way)
|
|
|
|
if recurse {
|
|
|
|
oldPrefix := log.Prefix()
|
|
|
|
log.SetPrefix(oldPrefix + " ")
|
2013-05-30 18:04:14 +04:00
|
|
|
printNodes(osmCache, nil, way.Refs, false)
|
|
|
|
log.SetPrefix(oldPrefix)
|
|
|
|
}
|
2013-07-05 17:14:21 +04:00
|
|
|
}
|
|
|
|
if deps {
|
|
|
|
oldPrefix := log.Prefix()
|
|
|
|
log.SetPrefix(oldPrefix + " ")
|
|
|
|
rels := diffCache.Ways.Get(id)
|
|
|
|
if len(rels) != 0 {
|
|
|
|
printRelations(osmCache, rels, false)
|
2013-05-17 12:29:23 +04:00
|
|
|
}
|
2013-07-05 17:14:21 +04:00
|
|
|
log.SetPrefix(oldPrefix)
|
2013-05-17 12:29:23 +04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-30 18:04:14 +04:00
|
|
|
func printNodes(osmCache *cache.OSMCache, diffCache *cache.DiffCache, ids []int64, deps bool) {
|
2013-05-17 12:29:23 +04:00
|
|
|
for _, id := range ids {
|
|
|
|
node, err := osmCache.Nodes.GetNode(id)
|
|
|
|
if err != cache.NotFound && err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
if node == nil {
|
|
|
|
node, err = osmCache.Coords.GetCoord(id)
|
|
|
|
if err == cache.NotFound {
|
|
|
|
log.Println(id, "not found")
|
|
|
|
} else if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if node != nil {
|
|
|
|
log.Println(node)
|
2013-07-05 17:14:21 +04:00
|
|
|
}
|
|
|
|
if deps {
|
|
|
|
oldPrefix := log.Prefix()
|
|
|
|
log.SetPrefix(oldPrefix + " ")
|
|
|
|
ways := diffCache.Coords.Get(id)
|
|
|
|
if len(ways) != 0 {
|
|
|
|
printWays(osmCache, diffCache, ways, false, true)
|
2013-05-30 18:04:14 +04:00
|
|
|
}
|
2013-07-05 17:14:21 +04:00
|
|
|
log.SetPrefix(oldPrefix)
|
2013-05-17 12:29:23 +04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
flag.Parse()
|
|
|
|
log.SetFlags(0)
|
|
|
|
|
|
|
|
osmCache := cache.NewOSMCache(*cachedir)
|
|
|
|
err := osmCache.Open()
|
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
2013-05-30 18:04:14 +04:00
|
|
|
diffCache := cache.NewDiffCache(*cachedir)
|
|
|
|
err = diffCache.Open()
|
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if *full && *deps {
|
|
|
|
log.Fatal("cannot use -full and -deps option together")
|
|
|
|
}
|
2013-05-17 12:29:23 +04:00
|
|
|
|
|
|
|
if *relId != -1 {
|
|
|
|
printRelations(osmCache, []int64{*relId}, *full)
|
|
|
|
}
|
|
|
|
|
|
|
|
if *wayId != -1 {
|
2013-05-30 18:04:14 +04:00
|
|
|
printWays(osmCache, diffCache, []int64{*wayId}, *full, *deps)
|
2013-05-17 12:29:23 +04:00
|
|
|
}
|
2013-05-30 18:04:14 +04:00
|
|
|
|
2013-05-17 12:29:23 +04:00
|
|
|
if *nodeId != -1 {
|
2013-05-30 18:04:14 +04:00
|
|
|
printNodes(osmCache, diffCache, []int64{*nodeId}, *deps)
|
2013-05-17 12:29:23 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|