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