from request import requete_osm from math import sqrt, sin, cos, pi from concurrent.futures import ThreadPoolExecutor import time def circular_research(lat, lon, main_street): #Recherche un rue autre que main_street par recherche circulaire autour du point d'intersection try: street = requete_osm(lat, lon)['address']['road'] except KeyError: street = '' if not(street == main_street) and not(street == ''): return street step = 5*10**(-5) while step < 6*10**(-5): for i in range(8): street = check_position(lat, lon, step, main_street, i) if not(street == main_street) and not(street == ''): return street step += 4*10**(-5) return None def check_position(lat, lon, step, main_street, i): #Calcul les positions autour du point centrale et récupère la rue associée à cette position street = '' step_diag = step/sqrt(2) if i == 0: try: street = requete_osm(lat+step, lon)['address']['road'] except KeyError: pass elif i == 1: try: street = requete_osm(lat+step_diag, lon+step_diag)['address']['road'] except KeyError: pass elif i == 2: try: street = requete_osm(lat, lon+step)['address']['road'] except KeyError: pass elif i == 3: try: street = requete_osm(lat-step_diag, lon+step_diag)['address']['road'] except KeyError: pass elif i == 4: try: street = requete_osm(lat-step, lon)['address']['road'] except KeyError: pass elif i == 5: try: street = requete_osm(lat-step_diag, lon-step_diag)['address']['road'] except KeyError: pass elif i == 6: try: street = requete_osm(lat, lon-step)['address']['road'] except KeyError: pass elif i == 7: try: street = requete_osm(lat+step_diag, lon-step_diag)['address']['road'] except KeyError: pass return street def multi_position(lat, lon, step): latitude = [] longitude = [] for j in range(1,4): stp = j*step for i in range(8): latitude.append(lat+stp*cos(i*2*pi/8)) longitude.append(lon+stp*sin(i*2*pi/8)) with ThreadPoolExecutor(max_workers=30) as executor: streets = executor.map(requete_osm, latitude, longitude) executor.shutdown(wait=True) return streets if __name__=="__main__": lat = 48.89494122 lon = 2.247959188 step = 10**(-5) main_street = 'Avenue Gambetta' t1 = time.time() streets = multi_position(48.89494122, 2.247959188, 10**(-5)) t2 = time.time() #print(len(list(streets))) print(t2-t1) t1 = time.time() for j in range(1,4): stp = j*step for i in range(8): check_position(lat, lon, stp, main_street, i) t2 = time.time() print(t2-t1)