From 868f9eba0f1e40665b5bf3482b390bf6ad3c3cf1 Mon Sep 17 00:00:00 2001 From: "j.mei7" Date: Tue, 22 Mar 2022 20:02:33 +0100 Subject: [PATCH] comments and shop types --- __pycache__/managers.cpython-310.pyc | Bin 0 -> 1203 bytes __pycache__/objects.cpython-310.pyc | Bin 1540 -> 1805 bytes __pycache__/osm.cpython-310.pyc | Bin 2704 -> 3252 bytes main.py | 58 +++++++++++++++++---------- managers.py | 21 ++++++++++ objects.py | 7 ++++ osm.py | 39 ++++++++++++++++-- places.py | 35 ---------------- publicTransport.py | 3 +- 9 files changed, 101 insertions(+), 62 deletions(-) create mode 100644 __pycache__/managers.cpython-310.pyc create mode 100644 managers.py delete mode 100644 places.py diff --git a/__pycache__/managers.cpython-310.pyc b/__pycache__/managers.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ac619741518a37a8e96b40073f6daf21c91ac664 GIT binary patch literal 1203 zcma)5L2DC16n-h2m}|_83=32n_Sop@Csk?4tOjnca0o$q%l&p$(0|NBnx;G7ZRFG z06u4epFz_Smay?_ivosol7+@m6h95Zpo4+v;e61V<_=Cx1x(lke8ks)OIAk&R-^|W zPi!swhfUkZ-6g0ZUi`Mbv(b8?rP8e@LDv6u0)GcF=E_z^pwVnWHGo9NS^g zAC0AI4KftE7LO9w_q$=&_`Xf)2}hZYmvdNa^9yZ;hx0)fU7SRz4$*Yr0?y%(rPaG{ zv4kGJIO_?Zs;GeKDCs#~i2F4K% z`ijDRZ#7b4yi)xSI0WSy!C6By15CMqFc8oUn7}btRfb(|zzKF58)DZJ+l*ql|1hP} zqRmt*^9q%NKUOU%~dj(Q>7!0KECuQFsL}J*db;b8jhCx3&Q61W`=`g@BK&YnHcy%O?lsh=^ zUHdY5l|2G)_XxS$)y|=+$QimNGBNVbOr*~7F? z06z#VbnqJURX8CFwFHx30a&DCuox@^OLPjBf=RGU55NXskt#t*TP}W`WU5<@6_+Qm;`)g&1IYfp_vqpDXImOOeNt3&JN>@2 zFPeHe{jr`Ei-V?UZvM1x4(qCY@Lg3b*2krp*3W(`XN`TZT)RxEc{Oj8;(cubNP;BD zgX0}$^`KkbKZ&@NS5V63N*&dDwO~9{>i1Q#XjjY?2>7dQ0c&X}A7Gx+n@kJ?|KvaY zHrz`W_F>M9xpsr`nYT|t8o2w4{sv9B34J6HNgqXsA|J(wVjm?qk@zS@l=>*cYUZN> zD`VJUUkH1ng4Q7W$^}MuYGn6r87ZxO?_S53|EXM9`Fz#w{`ZdT_P0;n;*RYXiHIZFSdao069p}sq zfJ@q*H+<)ud{M4l{IXcA%5m(?G#}&nBz^N{xJYqFqWqSvG<}9NiZZ8kt2GG*?Y>Fk zG9KN=LEftMi0nd-dOw+Oy3`sSc@JZ#xM=lW}i{4QhNeH`?6@a;u*p>+wQ z|F65u=TK?i&h3tg|0vdvb!);M?zjs$*Di@_x7_3EmxQ;Z>yM7Hczm_J$7Qno3j4pH upwE(QAOFm9`!~w4Wek%yT-*BFGpk+pP5U|hmR~)~#vO@KG8&H3>-j$^f>JpE delta 597 zcmaKoJxjw-6o&J0lYW>)txZ)lYBjBfj&8Pyli*SWow`Uhaj{ywrIk)Df`cfO<5+O+ zzY)j$6&LS&t*L^V;o+Wh-gC~I^XS}JcH6eIiul6R&gu5R_SD*-QZ>W$krHI+g)I)q zBTMV)BehQV+P)dHPSiT5H*JrN6z)=4J*JB8)3dti&WkzR{fPp-s#O~5jS54-5QxpI zb{HLm+(e*XME%(4HCx>%Ft`KJG!@xWelnIFbm{>IUo;AmL`^5dNBU6R1$5nRaz@BTYzSi0T33 l8ai=C4&xl@Zwr!3$LZQ-JM6ZiT~#PLX#q!ZEGL!AegM|RUKjuX diff --git a/__pycache__/osm.cpython-310.pyc b/__pycache__/osm.cpython-310.pyc index c64f50895042787bc58b8f091e63b02fb77f6211..f7ea589f67ff93b3d05ac08e1cee610e19f9fb7d 100644 GIT binary patch delta 1284 zcmaJ>L2naB6rMLbvpeh9juV^jx zG2h7LG7PU<#c!|un``GwFxfs`Jh3dR64*tixpwX|?QHR?tHnGE(+@G<#+-Pr>%$B?0Blt?otVcWcD9_BirFs$qZN5l`q|A&!uI8K zv$iAB1oA;)N9M(hM2DF;SFiR8#CoV8im28pWr9~u{R`K z;F|*3#}TSty`jT79VMc89 zM`Z*d1PD-EK?#3~yP$B-?JN$ z)2@i;@Yufej@w0f{;N2nyHV`NI4vrMR7#ObR;ZXEOkqAp*cZ3-OxaLnW(2|hEx%bX z!?Zm?aFSpY0R?%lm7u#>f>bq0)-eJq&zwdGa)w`_q%a3PB8&OmEUcC zAekxQ{foGwar>7$q7=`dD&n<$?gsgXME4!re|8IAAHY*PrWU5+tnNXoPd}pC`<7}S zJ@X7fhpGKt^>0qlev*K?W4<7mA{Zw41bu3Vq4&H)-ytid-$hnRzxxni>=>YI?b$@7xYAU{6>?^H5^F F{0#{~_b&hd delta 792 zcmZXS&rcIU6vt=w=g=Qpi&QCMfh|S0ARPS>3dWE$9xNn~K$>t^*bN$L8>aQkkxd)f+d^iy~`TA-C`o*$Uts=FPiYi=_zB;;lb zF1C)+~pjT?uf-OI8qhRwf*li#S zi~~7f0=NQ9O8h4oZ^!$9P_l|uI!uM0aS}b6jjC*hQ1onc&CbJfN+M9IXB1zM_C;~b zhQ!Bc|3xYI`+>Eza(8Bn`);@-fqR8$9>iDz=Nb;`2+B0mf`>a diff --git a/main.py b/main.py index 8677107..8412795 100644 --- a/main.py +++ b/main.py @@ -1,8 +1,17 @@ +OFFLINE = True +from managers import ShopManager from osm import OSM -from places import Shops from publicTransport import PublicTransportAccessibility import requests +# ADVANCED: +# Get external data of shops, like website +# Get General City/Region data: average age, peace index, democrazy index, average income + +# IDEAS: +# Parks +# ATMs + # 52.9152386,,15.96z # bhv 53.51500036203292, 8.603602165157444 @@ -23,28 +32,35 @@ maxLat = round(float(lat) + areaHeightRadius, 5) requestUrl = "https://overpass-api.de/api/map" requestsUrlParams = f"?bbox={minLon},{minLat},{maxLon},{maxLat}" -print(requestUrl + requestsUrlParams) -""" # ONLINE -print("Downloading OSM-File...") -# TODO Check if banned from overpass-api MAYBE get alternative API then -r = requests.get(requestUrl + requestsUrlParams, headers={'Content-Type': 'application/xml'}) -print("Done: Downloading OSM-File") -osm = OSM(r.text) -""" -# Offline -print("Using offline file!") -file = open("mapHH", encoding="utf8") -osm = OSM(file.read()) +if OFFLINE: + print("Using offline file!") + file = open("mapHH", encoding="utf8") + osm = OSM(file.read()) +else: + print(requestUrl + requestsUrlParams) + print("Downloading OSM-File...") + # TODO Check if banned from overpass-api MAYBE get alternative API then + r = requests.get(requestUrl + requestsUrlParams, headers={'Content-Type': 'application/xml'}) + print("Done: Downloading OSM-File") + osm = OSM(r.text) pta = PublicTransportAccessibility(osm) -shops = Shops(osm) +shopManager = ShopManager(osm) -print("Bus:" + str(pta.isBusAccessible())) -print("Tram:" + str(pta.isTramAccessible())) -print("Light Rail:" + str(pta.isLightRailAccessible())) -print("Subway:" + str(pta.isSubwayAccessible())) -print("Train:" + str(pta.isTrainAccessible())) -print("Monorail:" + str(pta.isMonorailAccessible())) +print("\n--- Public Transport Accessibility ---") +print("Bus: " + str(pta.isBusAccessible())) +print("Tram: " + str(pta.isTramAccessible())) +print("Light Rail: " + str(pta.isLightRailAccessible())) +print("Subway: " + str(pta.isSubwayAccessible())) +print("Train: " + str(pta.isTrainAccessible())) +print("Monorail: " + str(pta.isMonorailAccessible())) + +print("\n--- 10 Most present shop types ---") +counter = 0 +for s in shopManager.getCountsOfTypes(): + if counter <= 10: + print(s['type'] + " : " + str(s['count']) + " times") + counter = counter + 1 + -print(shops.countOfShopTypes()) diff --git a/managers.py b/managers.py new file mode 100644 index 0000000..6a8931c --- /dev/null +++ b/managers.py @@ -0,0 +1,21 @@ +from operator import itemgetter + +class ShopManager: + def __init__(self, _osm): + self.osm = _osm + + def getCountsOfTypes(self): + countDict = [] + + def isInDict(type): + for a in countDict: + if a['type'] == type: + return True + return False + + if self.osm.shopList: + for shop in self.osm.shopList: + if not isInDict(shop.type): + countDict.append({'type': shop.type, 'count': sum(a.type == shop.type for a in self.osm.shopList)}) + + return sorted(countDict, key=itemgetter('count'), reverse=True) diff --git a/objects.py b/objects.py index 3639210..671b82c 100644 --- a/objects.py +++ b/objects.py @@ -1,3 +1,10 @@ +class Shop: + # TODO More optional details/attributes. Example: "website", "brand", "Telefone", "Owner" + def __init__(self, _nodeIds, _name, _type): + self.nodeIds = _nodeIds + self.name = _name + self.type = _type + class Node: def __init__(self, _id, _lon, _lat, _version, _timestamp, _changeset, _uid, _user): self.id = int(_id) diff --git a/osm.py b/osm.py index d4be465..4465189 100644 --- a/osm.py +++ b/osm.py @@ -1,12 +1,14 @@ -from objects import Node, NodeTag, Way, WayTag +from objects import Node, NodeTag, Way, WayTag, Shop class OSM: + # TODO Average value of "last updated" to see how up to date the data is. def __init__(self, _osmContent): self.osmContent = str(_osmContent) self.nodeList = [] self.nodeTagList = [] self.wayList = [] self.wayTagList = [] + self.shopList = [] self.parseOsmContent() def parseOsmContent(self): @@ -42,8 +44,31 @@ class OSM: wayLines = [] elif len(wayLines) > 0: wayLines.append(line) - - + + def createShop(self, lines): + # TODO Make sure shops are not duplicates. + # TODO e.g. REWE(shop) is big enough to have some "Ways" of it's own and multiple nodes, which can cause duplicates. + + nodeIds = [] + type = "" + name = "" + + for line in lines: + if '