Skip to content

Commit 8bc9ba8

Browse files
committed
Ignore too close nodes during inference
1 parent 1952ae4 commit 8bc9ba8

2 files changed

Lines changed: 34 additions & 17 deletions

File tree

way_inference/infer_way.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,8 @@
2121
'3212195884', '3212195874', '3212195866', '3212195869', '3212195878',
2222
'3212195882', '3212195889', '3212195895', '3212195893', '3212195896'
2323
)
24-
# bounds = [11.089153289794922, 4.593878359460639, 11.418743133544922, 4.759664350520704]
25-
# bounds = [28.212890625, -1.8261677821806805, 33.486328125, 0.8349313860427184]
26-
bounds = [15.496902465820312, -1.4843615162701949, 16.375808715820312, -1.0113763068489454] # the short line in the middle of africa
24+
bounds = [10.39529800415039, 4.050234320898018, 10.50516128540039, 4.109221809610561] # parallel lines
25+
# bounds = [15.496902465820312, -1.4843615162701949, 16.375808715820312, -1.0113763068489454] # the short line in the middle of africa
2726
clusterWrapper = ClusterWrapper(cur, bounds)
2827
clusters = clusterWrapper.getClusters()
2928

@@ -39,33 +38,37 @@
3938
processing_node = farthest_nodes[0]
4039
processed_nodes = []
4140
processed_nodes.append(processing_node)
41+
ignored_nodes = [] # nodes are ignored if there are too close to a node
4242

4343
is_complete = False
4444

4545
while is_complete == False:
4646
# print(processed_nodes)
4747
# print "processing - ",
4848
# print(processing_node)
49+
# procesed nodes minus the all nodes
4950
unprocessed_nodes = tuple(set(tuple(processed_nodes)) ^ set(nodes_osmids))
51+
52+
# unprocessed nodes minus the ignored node.
53+
unprocessed_nodes = tuple(set(unprocessed_nodes) ^ set(tuple(ignored_nodes)))
5054
closest_node = None
5155

5256
if len(unprocessed_nodes) > 0:
53-
closest_nodes = NodesWrapper(cur, []).get_closest_nodes_to(
57+
nodes_around = NodesWrapper(cur, []).get_closest_nodes_to(
5458
processing_node,
5559
unprocessed_nodes
5660
)
57-
print(closest_nodes)
61+
62+
ignored_nodes = ignored_nodes + nodes_around['too_close_node_osmids']
63+
closest_node = nodes_around['closest_node_osmid']
5864
else:
5965
is_complete = True
6066
continue
6167

62-
if len(closest_nodes) > 0:
63-
closest_node = closest_nodes[0] # There are already ordered by distance
64-
65-
if closest_node is not None and len(closest_node) > 0:
68+
if closest_node is not None:
6669
print "Closest is - ",
67-
print(closest_node[1])
68-
processing_node = closest_node[1]
70+
print(closest_node)
71+
processing_node = closest_node
6972
processed_nodes.append(processing_node)
7073
else:
7174
print("\n*********** IS COMPLETE **************\n")

way_inference/nodes_wrapper.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
class NodesWrapper:
22
bounds = []
33
cur = None
4+
closest_min_distance = 0.0004
5+
closest_max_distance = 0.09
46

57
def __init__(self, sql_cursor, bounds):
68
self.bounds = bounds
@@ -29,19 +31,31 @@ def get_closest_nodes_to(self, for_node_osmid, among_osm_ids):
2931
ST_Distance(
3032
ST_GeomFromText(current_point.geom),
3133
point.geom
32-
)
34+
) as distance
3335
FROM point, current_point
34-
WHERE ST_Distance(ST_GeomFromText(current_point.geom), point.geom) > 0.0004
35-
AND ST_Distance(ST_GeomFromText(current_point.geom), point.geom) < 0.09
36+
WHERE ST_Distance(ST_GeomFromText(current_point.geom), point.geom) < %s
3637
AND properties->>'osmid' IN %s
3738
ORDER BY ST_Distance(ST_GeomFromText(current_point.geom), point.geom) ASC
38-
LIMIT 1
3939
'''
4040
self.cur.execute(fetch_closest_query, [
4141
for_node_osmid,
42-
among_osm_ids
42+
self.closest_max_distance,
43+
among_osm_ids,
4344
])
44-
return self.cur.fetchall()
45+
closest_nodes = self.cur.fetchall()
46+
result = {
47+
'too_close_node_osmids': [],
48+
'closest_node_osmid': None
49+
}
50+
51+
for node in closest_nodes:
52+
if (node[2] < self.closest_min_distance):
53+
result['too_close_node_osmids'].append(node[1])
54+
else:
55+
result['closest_node_osmid'] = node[1]
56+
break;
57+
return result;
58+
4559

4660
def get_farthest_nodes_among_nodes(self, among_osm_ids):
4761
farthest_nodes_query = '''

0 commit comments

Comments
 (0)