Spaces:
Runtime error
Runtime error
| #!/usr/bin/env python3 | |
| # -*- coding: utf-8 -*- | |
| """ | |
| Created on Tue Aug 2 12:38:31 2022 | |
| @author: syed | |
| """ | |
| import regex_spatial | |
| from utils import geoutil | |
| north = ["north", "N'", "North", "NORTH"] | |
| south = ["south", "S'", "South", "SOUTH"] | |
| east = ["east", "E'", "East", "EAST"] | |
| west = ["west", "W'", "West", "WEST"] | |
| northeast = ["north-east", "NE'", "north east", "NORTH-EAST", "North East", "NORTH EAST", 'northeast'] | |
| southeast = ["south-east", "SE'", "south east", "SOUTH-EAST", "South East", "SOUTH EAST", 'southeast'] | |
| northwest = ["north-west", "NW'", "north west", "NORTH-WEST", "North West", "NORTH WEST", 'northwest'] | |
| southwest = ["south-west", "SW'", "south west", "SOUTH-WEST", "South West", "SOUTH WEST", 'southwest'] | |
| center = ["center","central", "downtown","midtown"] | |
| def get_min_max(direction): | |
| regex = regex_spatial.get_directional_regex() | |
| direction_list = regex.split("|") | |
| if direction in direction_list: | |
| if direction in east: | |
| return (337, 22) | |
| if direction in northeast: | |
| return (22, 67) | |
| if direction in north: | |
| return (67, 112) | |
| if direction in northwest: | |
| return (112, 157) | |
| if direction in west: | |
| return (157, 202) | |
| if direction in southwest: | |
| return (202, 247) | |
| if direction in south: | |
| return (247, 292) | |
| if direction in southeast: | |
| return (292, 337) | |
| return None | |
| def get_min_max(direction): | |
| regex = regex_spatial.get_directional_regex() | |
| direction_list = regex.split("|") | |
| if direction in direction_list: | |
| if direction in east: | |
| return (337, 22) | |
| if direction in northeast: | |
| return (292, 337) | |
| if direction in north: | |
| return (247, 292) | |
| if direction in northwest: | |
| return (202, 247) | |
| if direction in west: | |
| return (157, 202) | |
| if direction in southwest: | |
| return (112, 157) | |
| if direction in south: | |
| return (67, 112) | |
| if direction in southeast: | |
| return (22, 67) | |
| return None | |
| # def get_min_max(direction): | |
| # regex = regex_spatial.get_directional_regex() | |
| # direction_list = regex.split("|") | |
| # if direction in direction_list: | |
| # if direction in north: | |
| # return (337, 22) | |
| # if direction in northeast: | |
| # return (22, 67) | |
| # if direction in east: | |
| # return (67, 112) | |
| # if direction in southeast: | |
| # return (112, 157) | |
| # if direction in south: | |
| # return (157, 202) | |
| # if direction in southwest: | |
| # return (202, 247) | |
| # if direction in west: | |
| # return (247, 292) | |
| # if direction in northwest: | |
| # return (292, 337) | |
| # | |
| # return None | |
| def get_directional_coordinates_by_angle(coordinates, direction, minimum, maximum): | |
| direction_coordinates = [] | |
| for p in coordinates: | |
| if direction in east: | |
| if p[2] >= minimum or p[2] <= maximum: | |
| direction_coordinates.append(p) | |
| else: | |
| if p[2] >= minimum and p[2] <= maximum: | |
| direction_coordinates.append(p) | |
| return direction_coordinates | |
| def get_directional_coordinates(coordinates, direction, centroid , minimum, maximum, is_midmid): | |
| direction_coordinates = get_directional_coordinates_by_angle(coordinates, direction, minimum, maximum) | |
| print(direction_coordinates, 'ddddd') | |
| midmid1, midmid2= geoutil.get_midmid_point(centroid, direction_coordinates[0],direction_coordinates[-1], is_midmid) | |
| if direction in west: | |
| maxi = max(p[2] for p in direction_coordinates) | |
| mini = min(p[2] for p in direction_coordinates) | |
| index_mini = 0 | |
| index_maxi = 0 | |
| for idx,p in enumerate(direction_coordinates): | |
| if p[2] == mini: | |
| index_mini = idx | |
| if p[2] == maxi: | |
| index_maxi = idx | |
| direction_coordinates.insert(index_maxi+1, midmid2) | |
| direction_coordinates.insert(index_mini+1, midmid1) | |
| print(index_maxi+1, midmid2, 'imim') | |
| print(index_mini+1, midmid1, 'imim') | |
| else: | |
| direction_coordinates.append(midmid2) | |
| direction_coordinates.append(midmid1) | |
| return direction_coordinates, midmid1, midmid2 | |
| def get_level1_coordinates(coordinates, centroid, direction, is_midmid): | |
| min_max = get_min_max(direction) | |
| if min_max is not None: | |
| coordinates, mid1, mid2 = get_directional_coordinates(coordinates, direction, centroid, | |
| min_max[0], min_max[1],is_midmid) | |
| # print(mid1, 'min_max') | |
| # print(mid2, 'min_max') | |
| print(coordinates, 'min_max') | |
| print("Level 1 Coordinates///") | |
| for idx, p in enumerate(coordinates): | |
| print(idx, p) | |
| return coordinates, centroid, mid1, mid2 | |
| elif direction.lower() in center: | |
| return get_central(coordinates, centroid, direction, is_midmid), centroid, None, None | |
| else : | |
| return coordinates, centroid, None, None | |
| def get_central(coordinates, centroid, direction, is_midmid): | |
| n_min_max = get_min_max("north") | |
| n_coordinates=get_directional_coordinates_by_angle(coordinates, "north", n_min_max[0], n_min_max[1]) | |
| n_mid1, n_mid2 = geoutil.get_midmid_point(centroid,n_coordinates[0],n_coordinates[-1], is_midmid) | |
| ne_min_max = get_min_max("north east") | |
| ne_coordinates=get_directional_coordinates_by_angle(coordinates, "north east", ne_min_max[0], ne_min_max[1]) | |
| ne_mid1, ne_mid2 = geoutil.get_midmid_point(centroid,ne_coordinates[0],ne_coordinates[-1], is_midmid) | |
| e_min_max = get_min_max("east") | |
| e_coordinates=get_directional_coordinates_by_angle(coordinates, "east", e_min_max[0], e_min_max[1]) | |
| e_mid1, e_mid2 = geoutil.get_midmid_point(centroid,e_coordinates[0],e_coordinates[-1], is_midmid) | |
| se_min_max = get_min_max("south east") | |
| se_coordinates=get_directional_coordinates_by_angle(coordinates, "south east", se_min_max[0], se_min_max[1]) | |
| se_mid1, se_mid2 = geoutil.get_midmid_point(centroid,se_coordinates[0],se_coordinates[-1], is_midmid) | |
| s_min_max = get_min_max("south") | |
| s_coordinates=get_directional_coordinates_by_angle(coordinates, "south", s_min_max[0], s_min_max[1]) | |
| s_mid1, s_mid2 = geoutil.get_midmid_point(centroid,s_coordinates[0],s_coordinates[-1], is_midmid) | |
| sw_min_max = get_min_max("south west") | |
| sw_coordinates=get_directional_coordinates_by_angle(coordinates, "south west", sw_min_max[0], sw_min_max[1]) | |
| sw_mid1, sw_mid2 = geoutil.get_midmid_point(centroid,sw_coordinates[0],sw_coordinates[-1], is_midmid) | |
| w_min_max = get_min_max("west") | |
| w_coordinates=get_directional_coordinates_by_angle(coordinates, "west", w_min_max[0], w_min_max[1]) | |
| w_mid1, w_mid2 = geoutil.get_midmid_point(centroid,w_coordinates[0],w_coordinates[-1], is_midmid) | |
| nw_min_max = get_min_max("north west") | |
| nw_coordinates=get_directional_coordinates_by_angle(coordinates, "north west", nw_min_max[0], nw_min_max[1]) | |
| nw_mid1, nw_mid2 = geoutil.get_midmid_point(centroid,nw_coordinates[0],nw_coordinates[-1], is_midmid) | |
| central_coordindates =[e_mid1, e_mid2, ne_mid1, ne_mid2, n_mid1, n_mid2, | |
| nw_mid1, nw_mid2, w_mid1, w_mid2, sw_mid1, sw_mid2, | |
| s_mid1, s_mid2, se_mid1, se_mid2] | |
| return central_coordindates | |