diff options
| author | Gustav Sörnäs <gusso230@student.liu.se> | 2020-11-20 12:36:02 +0100 |
|---|---|---|
| committer | Gustav Sörnäs <gusso230@student.liu.se> | 2020-11-20 12:36:50 +0100 |
| commit | 4ca646cd6a1207f084a9d56df0ba90c8fdbf13f5 (patch) | |
| tree | de8a3d92a2da9021db68958c8154b0bc7dc2e726 | |
| parent | 346cc00e17443b8f72f5f683ceb5f6f63837bdb3 (diff) | |
| download | tdde25-4ca646cd6a1207f084a9d56df0ba90c8fdbf13f5.tar.gz | |
store nodes in a grid
| -rw-r--r-- | server.py | 4 | ||||
| -rw-r--r-- | store.py | 15 |
2 files changed, 15 insertions, 4 deletions
@@ -6,12 +6,14 @@ from lib import run_server, get, post, read_html nodes = None +grid = None @get('/') def index(): global nodes - nodes = store.extract_osm_nodes("university.osm") + global grid + nodes, grid = store.extract_osm_nodes("university.osm") return read_html('templates/index.html') @@ -1,3 +1,5 @@ +from collections import defaultdict +from math import floor from osm_parser import get_default_parser @@ -8,10 +10,15 @@ class Node: self.lng = float(lng) self.neighbours = [] - def coord_tuple(self): return self.lat, self.lng + def grid_tuple(self): + return floor(self.lat * 1000), floor(self.lng * 1000) + + def __repr__(self): + return f"({self.lat}, {self.lng})" + parser = None # Have a global reusable parser object @@ -37,6 +44,7 @@ def extract_osm_nodes(f_name): global parser parser = get_default_parser(f_name) nodes = dict() + grid = defaultdict(list) for node in parser.iter_nodes(): nodes[node['id']] = Node(node['id'], node['lat'], node['lon']) @@ -47,12 +55,13 @@ def extract_osm_nodes(f_name): for node_id, node in nodes.copy().items(): if not node.neighbours: del nodes[node_id] + else: + grid[(floor(node.lat * 1000), floor(node.lng * 1000))].append(node_id) - return nodes + return nodes, grid def select_nodes_in_rectangle(nodes, min_lat, max_lat, min_long, max_long): return [node for node in nodes.values() if min_lat <= node.lat <= max_lat and min_long <= node.lng <= max_long] - |
