1
- from osm4routing import *
1
+ from osm4routing_xml import *
2
2
from progressbar import ProgressBar
3
3
import os
4
4
import bz2 , gzip
5
5
import sys
6
6
from optparse import OptionParser
7
-
7
+ from sqlalchemy import Table , Column , MetaData , Integer , String , Float , SmallInteger , create_engine
8
+ from sqlalchemy .orm import mapper , sessionmaker
9
+
10
+ class Node (object ):
11
+ def __init__ (self , id , lon , lat ):
12
+ self .id = id
13
+ self .lon = lon
14
+ self .lat = lat
15
+
16
+
17
+ class Edge (object ):
18
+ def __init__ (self , id , source , target , length , car , car_rev , bike , bike_rev , foot , the_geom ):
19
+ self .id = id
20
+ self .source = source
21
+ self .target = target
22
+ self .length = length
23
+ self .car = car
24
+ self .car_rev = car_rev
25
+ self .bike = bike
26
+ self .bike_rev = bike
27
+ self .foot = foot
28
+ self .the_geom = the_geom
8
29
9
30
def parse (file , outformat = "csv" , edges_name = "edges" , nodes_name = "nodes" , conn = "" ):
10
31
@@ -39,19 +60,53 @@ def parse(file, outformat="csv", edges_name="edges", nodes_name="nodes", conn =
39
60
40
61
print " Read {0} nodes and {1} ways\n " .format (p .get_osm_nodes (), p .get_osm_ways ())
41
62
63
+ if outformat != "csv" :
64
+ metadata = MetaData ()
65
+ nodes_table = Table (nodes_name , metadata ,
66
+ Column ('id' , Integer , primary_key = True ),
67
+ Column ('lon' , Float ),
68
+ Column ('lat' , Float ))
69
+
70
+ edges_table = Table (edges_name , metadata ,
71
+ Column ('id' , Integer , primary_key = True ),
72
+ Column ('source' , Integer , index = True ),
73
+ Column ('target' , Integer , index = True ),
74
+ Column ('length' , Float ),
75
+ Column ('car' , SmallInteger ),
76
+ Column ('car_rev' , SmallInteger ),
77
+ Column ('bike' , SmallInteger ),
78
+ Column ('bike_rev' , SmallInteger ),
79
+ Column ('foot' , SmallInteger ),
80
+ Column ('the_geom' , String ))
81
+
82
+ engine = create_engine (conn )
83
+ metadata .drop_all (engine )
84
+ metadata .create_all (engine )
85
+ mapper (Node , nodes_table )
86
+ mapper (Edge , nodes_table )
87
+ Session = sessionmaker (bind = engine )
88
+ session = Session ()
89
+
90
+
42
91
print "Step 2: saving the nodes"
43
92
nodes = p .get_nodes ()
44
93
if outformat == "csv" :
45
94
n = open (nodes_name + '.csv' , 'w' )
46
95
n .write ('"node_id","longitude","latitude"\n ' )
96
+
47
97
pbar = ProgressBar (maxval = len (nodes ))
48
98
count = 0
49
99
for node in nodes :
50
100
if outformat == "csv" :
51
101
n .write ("{0},{1},{2}\n " .format (node .id , node .lon , node .lat ))
102
+ else :
103
+ session .add (Node (node .id , node .lon , node .lat ))
52
104
count += 1
53
105
pbar .update (count )
54
- n .close ()
106
+ if outformat == "csv" :
107
+ n .close ()
108
+ else :
109
+ session .commit ()
55
110
pbar .finish ()
56
111
57
112
print " Wrote {0} nodes\n " .format (count )
@@ -66,9 +121,14 @@ def parse(file, outformat="csv", edges_name="edges", nodes_name="nodes", conn =
66
121
for edge in edges :
67
122
if outformat == "csv" :
68
123
e .write ('{0},{1},{2},{3},{4},{5},{6},{7},{8},LINESTRING("{9}")\n ' .format (edge .edge_id , edge .source , edge .target , edge .length , edge .car , edge .car_d , edge .bike , edge .bike_d , edge .foot , edge .geom ))
124
+ else :
125
+ session .add (Edge (edge .edge_id , edge .source , edge .target , edge .length , edge .car , edge .car_d , edge .bike , edge .bike_d , edge .foot , edge .geom ))
69
126
count += 1
70
127
pbar .update (count )
71
- e .close ()
128
+ if outformat == "csv" :
129
+ e .close ()
130
+ else :
131
+ session .commit ()
72
132
pbar .finish ()
73
133
print " Wrote {0} edges\n " .format (count )
74
134
0 commit comments