-
Notifications
You must be signed in to change notification settings - Fork 0
/
graphroutes.py
executable file
·67 lines (53 loc) · 2.09 KB
/
graphroutes.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Graph analysis on test routes
"""
__license__ = None
import argparse
import logging
import sys
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from stanalysis.graphbuilder import build_graph
import stanalysis.graphtools as graphtools
log = logging.getLogger(__name__)
def main(args):
parser = argparse.ArgumentParser()
parser.add_argument('output', metavar='graph.pickle',
help='Ouput graph file')
parser.add_argument(
'--connection',
default='postgresql://osm:osm@localhost/osrm',
help='Postgres connection string. Default %(default)s'
)
parser.add_argument('--prune', action='store_true',
help='Collapse redundant edges, prune tails')
parser.add_argument('--verbose', action='store_true',
help='Increase logging level')
args = parser.parse_args()
logging.basicConfig(
level=logging.INFO if args.verbose else logging.WARNING)
log.info("Creating DB engine")
engine = create_engine(args.connection, echo=False)
log.info("Creating DB session")
Session = sessionmaker(bind=engine)
session = Session()
g = build_graph(session)
if args.prune:
log.info("Collapsing unidirectional strings")
pruned = graphtools.collapse_degree_2_vtxs(g)
log.info("Removed %i thru-nodes", pruned)
log.info("Collapsing bidirectional strings")
pruned = graphtools.collapse_bidirectional_streets(g)
log.info("Removed %i thru-nodes", pruned)
log.info("Snipping tails")
snipped = graphtools.delete_degree_1_vtxs(g)
log.info("Removed %i tails", snipped)
loners = graphtools.delete_degree_0_vtxs(g)
log.info("Removed %i loner-nodes (should be zero)", loners)
redundancies = graphtools.identify_rendudant_nodes(g)
log.info("Marked %i nodes as redundant", redundancies)
log.info("Saving graph to %s", args.output)
g.save(args.output)
if __name__ == "__main__": # pragma: nocover
sys.exit(main(sys.argv))