#!/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