From 57184dd39922c7a9d2c219fbc3f0b897da593fec Mon Sep 17 00:00:00 2001
From: "a.pradeilles" <alexandre.pradeilles@student-cs.fr>
Date: Wed, 14 Apr 2021 15:48:08 +0200
Subject: [PATCH] faster algo

---
 .../coord_to_intersections.cpython-38.pyc     | Bin 3002 -> 3352 bytes
 __pycache__/request.cpython-38.pyc            | Bin 655 -> 717 bytes
 __pycache__/request2.cpython-38.pyc           | Bin 944 -> 944 bytes
 __pycache__/research.cpython-38.pyc           | Bin 1391 -> 2331 bytes
 coord_to_intersections.py                     |  21 +++++++-
 main.py                                       |   8 ++-
 request.py                                    |  15 ++++--
 research.py                                   |  49 ++++++++++++++++--
 8 files changed, 81 insertions(+), 12 deletions(-)

diff --git a/__pycache__/coord_to_intersections.cpython-38.pyc b/__pycache__/coord_to_intersections.cpython-38.pyc
index 4e434e589c9f348322a23a18123b699838c1e18e..28d62caf207a3a0fc43ea6b8353d4b7d8ead0dcd 100644
GIT binary patch
delta 1612
zcmdlbK0}Hxl$V!_fq{Xc=wn$zo$N%uWlSC{6Sw))Phc!^DPc-sX=Y?(s1mDTs9{;a
zT*6Yr(#*J!QIesSGn^qWgoUAmHJhvG03!nk*03&Ms9|2n$jDH`wt%6AsfIC~3CzPG
zUc!{Z3NpQhwT4ZcfsG-OA($b8p@gl5Glf}lav+nKEDN%wwcIr<3)pM8!A3GHV4v*A
zC?5`YQY|;cakV_CsvznM9ZHx|*g%$*Fx9Z8FiJ9j*y#+lyy*<JeCZ6e{3RSEj5Q3+
zjLnQL46$XCcQAUeO<*i4sNtPl$1FBkiixj&0%Ku831bawGh+%<Hp2wwB8d{F6n2m~
zRbn-~HGJUU;X?`@CrI#2U@8g&1rH+wIDo*mgZ%&sBsP#+K)e#B6b_JCSObHhhBIYy
zD3d@cQ_&J+i)y)R_~1dp3up1eSa}6CToCVOGfiMBdO)1s$)}j)tw8|`_Dn5z4Sx-{
zBtxxW4cvwajD;^sm{K@F4h97%h)!py6-sBQ6)xeJtil}1%v@wMxrSM?p1IH_g)4<C
zovBtNg|Sw&hP6f{n|T6D5hy~qYeZ9+#TlBJ7#V6rQ<%gUQW&$DCNLL$su8LI2TVGn
zIYX^b2`7l(%v39!r%=ON!<ND<$pDt&E#U<5o0)3)N|<W+K&~j^0!2`*NC|h1Xbp1>
z?_?1c=>X=!O^{#>X3*sED`I3|V0g&{B0#JvfxP_Eved*<h2+G%l+2XGl2RE428P7a
z<kGxUh0MH?)S}|l<dV$%JcW{?{L-?+D^n-?u*jQN38Cv#Fsf2?EJ`X$RY)vV$jbzq
znUboIqmFFI<ZKpIbDmpli3J6zc`3J;b5iqeu@)3%=9S!H&CE+lt+>UUo0)fuD=aam
zG}X1JD8Hx(<kVZt1^ES=ce8LaGAd6#&YDrb4wPpZS-_BkNr91vk&lUkk%>`^k&lrJ
zia8khm_!)4m_Q;t%v@k`4n{6U9!3sE9wvxh0Tv5JA+UNOxCsJ`e2jdI9E^O7Fx?<M
zd|-397{Ml)LKSc@axjAo5@4}l0vQ9+#sad431kEhSPKUe2a^;d4`Y$)=7Vg;j0T|M
zridF<<bZru#LK|Ipeb0S1QHMd5wajc0Yu1w2*t@N9L9EnAf_mY5Cak73=9mnSkv-L
z^HPeWKmyVr0u*sY${-e)Pyw+77#JAJCr{<DXB3#cpVMiwIA=fvA4q}&M6iP_XDtGo
z4l=U{Y^6L%N)kkX%>ff2!)|e=C6~mf#2dyNO=DnSC<gh2fsut#fXM>nKds68IVX5%
zq8q6QG6<KEMf?m54D+xU#y@#FS6rk9$S}qturt{p&J+R}Ck!IM!65-+VRI`7*sYnx
zCCiXa=U@b-l_KrQe%y-Qsvy0f04mY~u|Q5K(gv}>K1L8=zjN5+=BJeAq}qXUO)(Dx
S0|O5u4--c*hdc)d2L}M*(m^Hw

delta 1235
zcmbOswM(2Yl$V!_fq{V`YgJi-p!h_-WlT-X6Sw(@72T_0s9{;aRKi@t(#*J!QIesS
zvxH@G4WmST(L7{{TJ9Q_1*|pP3mF+1Y8YUwLWdgG1q?M@U{SUO3^kl!7LtLr+z_K{
zd9dp*VM}3YW@KbYXQ<^(XQ<^%XQ<^bVJ~5<;bdrLY-V&}h%K6|#pJ<M^lx$*lbTB5
zzY@k8)@H^Orfh}@OhrL8yfu7a*YlycUOM?6vUn|b4Ij+OHN0>ZKa7=EP{UQjn!+f_
zkj*rKsYr@Ay^|*}%Ugp&4s3TVcMX3Hw<JTYAi{<TjD<xdY$>cD50<cj+zs}qP&z}c
za0&b5SInV_OhsiiLJJsb7-|G08Nh+Zw}7FB1H_uZR9Ke6mco|KR4bCgSSwn?S|gIp
zJb}5Ws)Q|ty+$;JS)8GniIJg3G=)iwA%!uUX##VRPK{6v8^|Z=jOGlrLM0rN7qCc5
zbJXzGur)K)@|CdF@PS>!335%XND0^ED=dn#OoeZ1SZmnC8G;!!IsA$k85kH|GJyyX
zYqBe={N&lJs@mMQ*b)m0Qu9)7G3TV_-D1tmOG&M`#hja&R|Hagi@6}b;1+8^QD$Dr
z=I^ZBjEqW?nb|Yydq4?~kp&Dn7!??K7<m|lm_!&k82K2v7<rhu7`Yhv7&$;}Mh+&3
zIsq07Mgg!qh!kQJ0jmM2<YD9kizDj<>E-~NFTi5KBm`Cg;)BfP6K3RN<Y59?#lghE
zD8<ObSfsL9p2L{YfRllNp$L>Mz|Jq?W?*2@6f9B%i3)=V84w{4B4j~?!sI4SV><y5
zQv^haf(S7N28LU#Y5ApjDMgYX0Vxn64I-4_gffW5&%nSCHTg5AJtO~QS#GDvrCb3n
zydVh<5Wx<zoV5sSI>^i-u$6KkDG3mPYS=B#wB(Zblz78<qsqw-xrG@uC(CkAFwsCa
zL;<7~mmx)b3=9m7VC{U9zjDV#s)MvM7J;3@262iY$N(V_0rs*uh=t8P9ANik7MFA~
zFfbH@!jyrLg%J|lMOu^B@F;q#fb@a_p-2<N0$E<91!5t*24;Z*>lTMiZhlH>PO2R!
X0T%NxFfi~i@-T6PamaIUaBu(sJE890

diff --git a/__pycache__/request.cpython-38.pyc b/__pycache__/request.cpython-38.pyc
index 454e263dc447ff9d2e00c723570c962dccb8a888..f2d7bc282e9d2d99e690ff0bac818d90e7e9312d 100644
GIT binary patch
delta 292
zcmeBYJ<G}$%FD~ez`(%p;%Qkz0n0=_8ODT(+EU&zDXcL}QOr>+sm!S?DQqe1DI6)B
zb6BHTQ@B#Nk@#$>3=7y(cv4vxGDUHuaxCCn$PmSq%ALy9%*e=)!Whh;$-A-2kCBmi
z@<~SddQGNuCCiFcIYk~0&o$@YWV`g6(V>Wmfq|ij8APyv2v!CLhIH2Z!uh>L9u7sq
zAR$f$1_n)@B9J?a1Q{3@ZgIrN=OyN*#>W@2f#lgi1P=oPLlk>KVo_plu~88>NQf6i
zfQ{z^>0)IqD9X$$nH<EVtf9idz`()6!Oy|M!NkM}g}>Q2pe#nF-)tN_OdN~=gp)hP

delta 206
zcmX@h+Rw@t%FD~ez`(#DGqWtAmw6(e45QaXZ7EZ?6xI~B6!sL36wVZ`Ijm94sSFEP
zQn*u@7cxb$rn057X0bOjGBTvHF5p<m5XG6o7|fu_vvGnSBO}w~`;78j=}MLrt8$7w
z9MUIqG0C_TaWXJ4XmS;StSS;@U|_h#5g(tIn420OU&O<}z)-{uB6vX(tOZ4xc_mTo
t8L5dWsYS&_OduIP1_p-7O-#yCVhjun94s7s9IQ-?Q23jTorjT&5dgTTDx3fS

diff --git a/__pycache__/request2.cpython-38.pyc b/__pycache__/request2.cpython-38.pyc
index 2d6200b60d09ad0827b735dc5ac0aa896231d5ec..2706939884af8b3792d4bf002d805634c1a2ab10 100644
GIT binary patch
delta 68
zcmdnMzJZ-Ll$V!_fq{YH#-6f-3mbV~GBPqx{?2%dTbO}?p;!PU!!-F0(_V3Y4jv9>
TCPpSkCMGcXlZ}&ynS&7kLctA)

delta 68
zcmdnMzJZ-Ll$V!_fq{Wx>!Pv*$Bn!%85x--e`mbKEyTdUP%HqFVVr!2X|FgR2R8>Z
T6C)EN6BC&H$;QdU%)tl%7^V!j

diff --git a/__pycache__/research.cpython-38.pyc b/__pycache__/research.cpython-38.pyc
index 95da01e8ab97a032581d32d5198493c24133f2be..93e98b12919c39a7ab7e7ed717d0bc3c49314af2 100644
GIT binary patch
delta 1482
zcmaFQHCsqKl$V!_fq{X+_ETAc8xI4+V-N=!b1*P4I503U6hE7&Em@z-62+3s8pWE+
z7RAQMkiw9{oWq{W5yb&!v*d6_ai*}Qu(dEmaiy@QaI`Q)ai?&maJ4W*@uc#maAz|W
zJxbw;;!EL;;!oj=5=h~X5=`Y>z`2kiN+^{lg(rnKg|C@8N*F38k}8@ik}4#@(9Fol
z02ZqUDHKZ)ND*via$$(oiV{y1PZbbhh>}PZOA%^jbYX}UiIPm^PUTDGPnAd&OqFbA
zWn?JaR=5bPogoUv$P|`f22J6YAm3^--r_DwEi6qfNsZ4h&edeO#Zp{YRC0^CI5Y1S
zb8>$1EvAA@O~(3LLLnJNsfj58`T04n6{*RkCHX~u$;==lpqPz;fdLd|&Y&=x!oa{#
zC04>v!%)N6%#^|?$&kV%$xzE2&X6a;!cfAP%~hnw$N+*V%(cvs40%iu3^mL(OxaAu
zE;Y<4%n&-5A%&%urG_PiwLY7nXhI273LDs~I<>4N%pjv{SZbJRSesdEnW35^pqe9U
zn3)(D8G;!KBWhSu*v%PgSqeQ;7=jrzIs9(1C#Iwnr4|?8Vkyc`Ou5C7uInuG`jHuz
zeR`H`sINdNzx_*)N76rLJnq=~gT-ExrHGG-fq~%`hj(hFYf({t(PTSD7e>*^&5RN1
zAa57TfWm-@iBXJ^kCBT}fRTlfg^`1ihf#o0fRT%li?K+2^B+b-CQ(p|dkHeCh>?MT
zp$KG45$9wl7G3`$9tH*mP4*&wkhlPd5C#!~AVLI02r)1)L~$0Eq!z@dWG1E;iGl>d
zgcyj$$H2fK4hs1&uu~=<W(lnaiJ?Rh$a+o&1_p2xEn{F{NN1>JPG_iPDPc%qOkn~i
zt+-m&8rB*n5r$f}5{49JaCm#vvez&#V60)NVJl&(VNYQZVJKl1VMt+?W@u&<VGw6n
z$jHc0!?J*}hOvgNgaxXi9z#i?TA@%0D=4G%GWILfa@24vU@Kv-VXk3W$Xv@=!;!@S
z$~?V{j11unrVN1$K@1TLHJrf=nw)+`k|1A7g9vUAA;G}F@KO#GW{gqXxrr6=<@rU~
zsYS&hnvAzt$`dn7G&$>wctMfImRL}bnwL_<3epCOts)i>iyb7#oSRrs1d5Ma9K{)>
zB`Nvkd74~kaS+9klUR~jQks$)#hH_zmkws$V$8b5TwGF61d5v|j#OxlxW!&vQk0rn
zQVfcodIk{5Py~vfTYR~tIVG9#1^LC9C7JnoZlI_FNicxZ3LiMNC^4!r@-Xr-iZK?c
zgIvcEAD^3;nHL|Q&U#-szqiQ4AzgF+O}0zF86BW$^NC#*zhhZyUTLa=dtz=<YDq~V
zBB0odKp~|mHCdijsvhiTco0MhCFkcQmlhSJ=9TEBm6ntir4|=~LxiOyGdHyel#+@-
z$p`L`yu{qp_;|FSDFP+WTTCT}MQR}TGL;zJVl61j%qszhe31$$oK-=D2q;xTLIa#+
z!34<rw>WHa^HWN5Qtdz)qF9H4fq{onf{}-jgNZ|sL!X0}0~|iE{KUb;!^pu12`v#u
G4n_byUq6}v

delta 538
zcmbO&^qxyQl$V!_fq{XcOSUY*g`I)nF^GeVnHU%t92giFighMxOV%?oq%fzjv@k@m
zq_C#2wJ=1nrmzPyXmY#+Y0+f7#a)zISejar8lPXBtI2qarMR%DB$*i`3B_y-3=HfH
z3=Ga7Bg+^V7)lsw7-|@snNk=f8B&-e8ETnpm}{7_nTpkFm{XV`bTC5-OD#(cOG-U!
zHbYTS31bRdGouSbtWGU!2@^<r4NDDE4Qn$iT(cEavsDc<69XedFhikL4ND4(IYTW=
zp;ih*FoPz$-!1mUl$4^>;^JE@Mfr&-w;0ktW<2iL`s0Zml)+;El7oSPL6f-%6bQFi
zixMXXF*z^_OrFdXp~wRAfEdVEj6#e8j4X^Sj2w(Si~@`Tj9iRdj7375g_sSQL_z+2
z3DRD~$iTo*1kzQ+Iyr(>H{=$FcWR|;QBi)8CVLSm4vM%zD)>MI4~XCg5xfix3{jlL
zC8-7RDVd4sMFJo}Fd+zHaWXJ4fEdMLV3$n3!WzmB67$n!o2<hjWhMkugrpI!`xb{y
XZhlH>PO2TqZN(s`@-Xr+aqt2F%)x1V

diff --git a/coord_to_intersections.py b/coord_to_intersections.py
index 082d1e7..92b37ce 100644
--- a/coord_to_intersections.py
+++ b/coord_to_intersections.py
@@ -11,7 +11,16 @@ def coord_to_inter(liste_coord,lat,long,main_street):
         dist.append(d)
     while len(inter_street)<1 :
         #On regarde l'intersection la plus proche de l'arbre
-        candidat=liste_coord[dist.index(min(dist))]
+        print('nouveau candidat')
+        try:
+            candidat=liste_coord[dist.index(min(dist))]
+        except ValueError:
+            inter_street.append(main_street)
+            inter_street_coord.append([long, lat])
+            inter_street.append(main_street)
+            inter_street_coord.append([long, lat])
+            print('aucune intersection trouvée')
+            return inter_street+inter_street_coord
         #On regarde si cette intersection correspond bien au croisement avec une autre rue, on trouve le nom de cette autre rue
         nom_de_rue=circular_research(candidat[1], candidat[0], main_street)
         if nom_de_rue== None :
@@ -28,6 +37,7 @@ def coord_to_inter(liste_coord,lat,long,main_street):
             dist.pop(indice)
             liste_coord.pop(indice)
     print('Début du tronçon trouvé')
+    print(inter_street[0])
     #Recherche de la fin du tronçon
     liste_coord_admissibles = []
     d_1_2 = []
@@ -43,7 +53,14 @@ def coord_to_inter(liste_coord,lat,long,main_street):
             dist2.append(dist[i])
     while len(inter_street)<2 :
         #On regarde l'intersection admissible la plus proche du début du tronçon
-        candidat=liste_coord_admissibles[d_1_2.index(min(d_1_2))]
+        print('nouveau candidat 2')
+        try:
+            candidat=liste_coord_admissibles[d_1_2.index(min(d_1_2))]
+        except ValueError:
+            inter_street.append(inter_street[0])
+            inter_street_coord.append(inter_street_coord[0])
+            print("Arbre au niveau de l'intersection")
+            return inter_street+inter_street_coord
         nom_de_rue=circular_research(candidat[1], candidat[0], main_street)
         if nom_de_rue== None :
             #Si cette intersection ne donne rien, on la rejette
diff --git a/main.py b/main.py
index 8743d4f..b56b503 100644
--- a/main.py
+++ b/main.py
@@ -2,10 +2,12 @@ from request import requete_osm
 from coord_to_intersections import coord_to_inter
 from request2 import search_osm, all_intersect
 from ordre_arbres import ordre_arbre
+import time
 
 def tree_position(lat, lon):
     req = requete_osm(lat, lon)
     main_street = req['address']['road']
+    print(main_street)
     city = req['address']['town']
     country = req['address']['country']
     json = search_osm(main_street, city, country)
@@ -44,9 +46,11 @@ def classement_arbres(liste_coord):
 
 if __name__=="__main__":
     
-    lat = 48.89627806
-    lon = 2.248657510
+    t1 = time.time()
+    lat, lon = 48.892046, 2.249319
     print(tree_position(lat, lon))
+    t2 = time.time()
+    print(t2-t1)
     '''
     lat = 48.89227652
     lon = 2.253773690
diff --git a/request.py b/request.py
index 7f87b5b..16b9ddd 100644
--- a/request.py
+++ b/request.py
@@ -22,15 +22,24 @@ if __name__=="__main__":
 #    coordinates =[49.15,2.325] 
 # intersection : 48.895307, 2.247367    48.894596, 2.247958      48.853994, 2.247177    48.894998, 2.247467
     #g = geocoder.osm([48.89, 2.247], method='reverse')
+    lat, lon = 48.89394122, 2.247959188
     params = {
-        'lat':48.89394122,
+        'lat':lat,
+        'lon':lon,
+        'format':'json',
+        'zoom': 17,
+        'polygon_geojson' : 1
+    }
+    params2 = {
+        'lat':48.89494122,
         'lon':2.247959188,
         'format':'json',
         'zoom': 17,
         'polygon_geojson' : 1
     }
+
     req = requests.get("https://nominatim.openstreetmap.org/reverse",params) 
-    print(req.headers)
+    #print(req.headers)
     reqJson = req.json()
-    #print(reqJson)  #['geojson']['coordinates']
+    print(reqJson)  #['geojson']['coordinates']
 
diff --git a/research.py b/research.py
index b1f28c7..ab83ab6 100644
--- a/research.py
+++ b/research.py
@@ -1,18 +1,23 @@
 from request import requete_osm
-from math import sqrt
+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
-    street = requete_osm(lat, lon)['address']['road']
+    try:
+        street = requete_osm(lat, lon)['address']['road']
+    except KeyError:
+        street = ''
     if not(street == main_street) and not(street == ''):
         return street
-    step = 10**(-5)
-    while step < 4*10**(-5):
+    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 += 10**(-5)
+        step += 4*10**(-5)
     return None
 
 def check_position(lat, lon, step, main_street, i):
@@ -60,3 +65,37 @@ def check_position(lat, lon, step, main_street, i):
         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)
+
+    
-- 
GitLab