defpath = Path(__file__) / '..' / '..' / '..' / 'scenes' / 'data'
self.scene_path = os.environ.get('SCENE_PATH', defpath.resolve())
self.scene_cache = {}
- self.clear_grid()
+ self.grid = {}
def parse_geometry(self, geom, scene):
""" Create a WKT SQL term for the given geometry.
return scene
- def clear_grid(self):
+ def set_grid(self, lines, grid_step):
+ """ Replace the grid with one from the given lines.
+ """
self.grid = {}
-
- def add_grid_node(self, nodeid, x, y):
- self.grid[nodeid] = (x, y)
+ y = 0
+ for line in lines:
+ x = 0
+ for pt_id in line:
+ if pt_id.isdigit():
+ self.grid[int(pt_id)] = (x, y)
+ x += grid_step
+ y += grid_step
def grid_node(self, nodeid):
+ """ Get the coordinates for the given grid node.
+ """
return self.grid.get(nodeid)
def define_node_grid(context, grid_step):
"""
Define a grid of node positions.
+ Use a table to define the grid. The nodes must be integer ids. Optionally
+ you can give the grid distance. The default is 0.00001 degrees.
"""
if grid_step is not None:
grid_step = float(grid_step.strip())
else:
grid_step = 0.00001
- context.osm.clear_grid()
-
- i = 0
- for h in context.table.headings:
- if h.isdigit():
- context.osm.add_grid_node(int(h), 0, i)
- i += grid_step
-
- x = grid_step
- for r in context.table:
- y = 0
- for h in r:
- if h.isdigit():
- context.osm.add_grid_node(int(h), x, y)
- y += grid_step
- x += grid_step
+ context.osm.set_grid([context.table.headings] + [list(h) for h in context.table],
+ grid_step)
@when(u'loading osm data')