Skip to content

Commit 742613f

Browse files
committed
Complete way on encountering a power building
1 parent c95bd13 commit 742613f

2 files changed

Lines changed: 36 additions & 8 deletions

File tree

way_inference/infer_way.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,12 @@
2121
'3212195884', '3212195874', '3212195866', '3212195869', '3212195878',
2222
'3212195882', '3212195889', '3212195895', '3212195893', '3212195896'
2323
)
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
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
2626

2727
nodesWrapper = NodesWrapper(cur, bounds)
2828
clustersWrapper = ClusterWrapper(cur, bounds)
29+
waysWrapper = WaysWrapper(cur, bounds)
2930

3031
clusters = clustersWrapper.getClusters()
3132

@@ -39,23 +40,24 @@
3940

4041
# Start processing with one of the farthest nodes
4142
processing_node = farthest_nodes[0]
43+
4244
processed_nodes = []
43-
processed_nodes.append(processing_node)
4445
ignored_nodes = [] # nodes are ignored if there are too close to a node
4546

47+
processed_nodes.append(processing_node)
48+
4649
is_complete = False
4750

4851
while is_complete == False:
49-
# print(processed_nodes)
50-
# print "processing - ",
51-
# print(processing_node)
5252
# procesed nodes minus the all nodes
5353
unprocessed_nodes = tuple(set(tuple(processed_nodes)) ^ set(nodes_osmids))
5454

5555
# unprocessed nodes minus the ignored node.
5656
unprocessed_nodes = tuple(set(unprocessed_nodes) ^ set(tuple(ignored_nodes)))
57+
5758
closest_node = None
5859

60+
5961
if len(unprocessed_nodes) > 0:
6062
nodes_around = nodesWrapper.get_closest_nodes_to(
6163
processing_node,
@@ -73,6 +75,11 @@
7375
print(closest_node)
7476
processing_node = closest_node
7577
processed_nodes.append(processing_node)
78+
79+
# if the node that is just processed in
80+
if waysWrapper.is_node_in_any_polygon(processing_node):
81+
is_complete = True
82+
7683
else:
7784
print("\n*********** IS COMPLETE **************\n")
7885
is_complete = True
@@ -81,5 +88,5 @@
8188
for node_osmid in processed_nodes:
8289
print("node(%s);" % node_osmid)
8390

84-
WaysWrapper(cur).save_to_database(processed_nodes)
91+
waysWrapper.save_to_database(processed_nodes)
8592
conn.commit()

way_inference/ways_wrapper.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,30 @@
11
import json
22

33
class WaysWrapper:
4+
bounds = []
5+
cur = None
46

5-
def __init__(self, sql_cur):
7+
def __init__(self, sql_cur, bounds):
68
self.cur = sql_cur
9+
self.bounds = bounds
10+
11+
def is_node_in_any_polygon(self, node_osmid):
12+
query = '''
13+
WITH node AS (
14+
SELECT geom FROM point WHERE properties->>'osmid' = %s
15+
)
16+
SELECT powerline.id
17+
FROM powerline, node
18+
WHERE ST_Contains(ST_MakePolygon(powerline.geom), node.geom)
19+
AND ST_IsClosed(powerline.geom)
20+
LIMIT 1
21+
'''
22+
self.cur.execute(query, [str(node_osmid)])
23+
powerline = self.cur.fetchone()
24+
if powerline is not None:
25+
return True
26+
else:
27+
return False
728

829
def save_to_database(self, nodes_osmids):
930
nodes = []

0 commit comments

Comments
 (0)