Advertisement
Guest User

Untitled

a guest
Mar 1st, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.60 KB | None | 0 0
  1. import json
  2. from .isochrone import isochrone, bin_splitting
  3. from .isochrone.extra_time import extra_times_func
  4. from .ml import factors_sugar
  5. import logging
  6. import grequests
  7. from gevent import monkey,sleep
  8. from main_app.models import MapObject
  9. from main_app.models import Market
  10. from geopy.distance import vincenty
  11. from django.db.models import F
  12. import psycopg2
  13.  
  14.  
  15. def apps_amount_in_time_osrm(id,time1=360,time2=720,mode='foot',map_class='Жилые дома',field='flat_num'):
  16.     instance = Market.objects.get(id=id)
  17.     shop = (instance.lon,instance.lat)
  18.     queryset = MapObject.objects.only('lat', 'lon', field).filter(map_class=map_class, is_deleted=False).annotate(
  19.         column=F(field))
  20.     urls = []
  21.     apps = []
  22.     apps_t1,apps_t2 = 0,0
  23.     urls_add,apps_add = urls.append,apps.append
  24.     for elem in queryset:
  25.         url = 'http://178.62.250.186:5001/table/v1/{}/{};{}?sources=0'. \
  26.             format(mode,','.join(map(str,(elem.lon,elem.lat))),','.join(map(str,shop)))
  27.         urls_add(url)
  28.         apps_add(elem.column)
  29.     rs = (grequests.get(u) for u in urls)
  30.     for ind, response in enumerate(grequests.map(rs)):
  31.         try:
  32.             content = response.content
  33.         except AttributeError:
  34.             continue
  35.         elem = json.loads(content.decode())
  36.         duration = elem['durations'][0][1]
  37.         if duration is not None:
  38.             if duration<time1:
  39.                 apps_t1+=apps[ind]
  40.             if duration<time2:
  41.                 apps_t2+=apps[ind]
  42.     return apps_t1,apps_t2
  43.  
  44. def apps_amount_in_radius(id,r1=500,r2=1000,map_class='Жилые дома',field='flat_num'):
  45.     instance = Market.objects.get(id=id)
  46.     shop = (instance.lat,instance.lon)
  47.     apps_r1,apps_r2 = 0,0
  48.     queryset = MapObject.objects.only('lat','lon',field).filter(map_class=map_class, is_deleted=False).annotate(column=F(field))
  49.     for elem in queryset:
  50.         house,apps = (elem.lat,elem.lon),elem.column
  51.         if vincenty(shop,house).m<=r1:
  52.             apps_r1+=apps
  53.         if vincenty(shop,house).m<=r2:
  54.             apps_r2+=apps
  55.     return apps_r1,apps_r2,instance.lat,instance.lon
  56.  
  57. def save_geo_data(id):
  58.     #osrm_t1, osrm_t2 = apps_amount_in_time_osrm(id)
  59.     apps_r1, apps_r2, lat, lon = apps_amount_in_radius(id)
  60.     #print(osrm_t1,osrm_t2,apps_r1,apps_r2)
  61.     conn = psycopg2.connect("host=localhost dbname=postgres user=postgres password=1")
  62.     cur = conn.cursor()
  63.  
  64.     data = {'rad_500':apps_r1,'rad_1000':apps_r2}
  65.  
  66.     query = "update main_app_market set geo_data={} where lat={} and lon={}".format(data,lat,lon)
  67.  
  68.     cur.execute(query)
  69.     conn.commit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement