summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGustav Sörnäs <gusso230@student.liu.se>2020-11-20 12:36:02 +0100
committerGustav Sörnäs <gusso230@student.liu.se>2020-11-20 12:36:50 +0100
commit4ca646cd6a1207f084a9d56df0ba90c8fdbf13f5 (patch)
treede8a3d92a2da9021db68958c8154b0bc7dc2e726
parent346cc00e17443b8f72f5f683ceb5f6f63837bdb3 (diff)
downloadtdde25-4ca646cd6a1207f084a9d56df0ba90c8fdbf13f5.tar.gz
store nodes in a grid
-rw-r--r--server.py4
-rw-r--r--store.py15
2 files changed, 15 insertions, 4 deletions
diff --git a/server.py b/server.py
index 97cb377..f910898 100644
--- a/server.py
+++ b/server.py
@@ -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')
diff --git a/store.py b/store.py
index 9e6d4f7..5d81304 100644
--- a/store.py
+++ b/store.py
@@ -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]
-