xdenisx

buoys2db(sqlite)

Jan 18th, 2013
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.31 KB | None | 0 0
  1. ####################################################################
  2. #    
  3. #    Created: 2013/01/18
  4. #    
  5. #    Buoys data 2 sqlite data base
  6. #    
  7. #    Modified: 2013/01/21
  8. #
  9. #####################################################################
  10.  
  11. import sqlite3
  12. import re
  13. import urllib
  14. import os
  15. import shapefile as sf
  16. import datetime
  17.  
  18. def makeShp(list,id):
  19.     w.poly(parts=[list[:]], shapeType=sf.POLYLINE)
  20.     w.record(id)
  21.    
  22. def makePrj(shp_filename):
  23.     prj = open("%s.prj" % shp_filename, "w")
  24.     epsg = 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]]'
  25.     prj.write(epsg)
  26.     prj.close()
  27.  
  28. def b2db(str):
  29.     urllib.urlretrieve (str, 'buoys_tmp.txt')
  30.     ffile = open('buoys_tmp.txt')
  31.     lines = ffile.readlines()
  32.     #Empty lists for coordinates, dates
  33.     data = []
  34.     i=0
  35.     for line in lines:
  36.         i_wmo_id = line.split(';')[1]
  37.         yyyy = line.split(';')[4]
  38.         mm = line.split(';')[5]
  39.         dd = line.split(';')[6]
  40.         hh = line.split(';')[7]
  41.         min = line.split(';')[8]
  42.         iidate = yyyy + '-' + mm + '-' + dd + ' ' + hh + ':' + min
  43.         lat = line.split(';')[2]
  44.         lon = line.split(';')[3]
  45.         islp = line.split(';')[10]
  46.         #print 'islp: ', islp
  47.         itemperature = line.split(';')[9]
  48.         #print 'it: ', itemperature
  49.         idata = [i_wmo_id, iidate, lat, lon,itemperature,islp,'\n']                      
  50.         idata.pop()
  51.         data.append(idata)
  52.         i = i + 1
  53.     ffile.close()
  54.     os.system('DEL buoys_tmp.txt')
  55.     return data
  56.    
  57. def url2db():
  58.     retrive_str = 'http://www.aari.nw.ru/clgmi/gts/buoy/buoy.daily.csv.n.txt'
  59.     data = b2db(retrive_str)
  60.     for t in data:
  61.         try:
  62.             c.execute("INSERT OR FAIL INTO trajectories VALUES (?,?,?,?,?,?)", t)
  63.             print 'a new data added to database!'
  64.         except:
  65.             pass
  66.  
  67. def id_data(id):
  68.     ''' retrieve data by ID '''
  69.     ll = []
  70.     idate2 = date2[0:4] + '-' + date2[4:6] + '-' + date2[6:8] + ' 23:59'
  71.     idate1 = date1[0:4] + '-' + date1[4:6] + '-' + date1[6:8] + ' 00:00'
  72.     print '\nidate1: ', idate1
  73.     print 'idate2: ', idate2
  74.     t = (id, idate1, idate2)
  75.     c.execute("SELECT * FROM trajectories WHERE (id=? AND date>=? AND date<=?) ORDER BY date", t) #AND date>=(?) AND date<=(?))
  76.     print "\nData for buoy#%s:" % (id)
  77.     for row in c:
  78.         print row
  79.         lon = float(row[3])
  80.         lat = float(row[2])
  81.         ll.append([lon,lat])
  82.     return ll
  83.    
  84. def ids():
  85.     ''' retrieve IDs of buoys '''
  86.     ids = []
  87.     c.execute("SELECT id FROM trajectories")
  88.     for row in c:
  89.         ids.append(row)
  90.     return ids
  91.  
  92. def create_db(db_name):
  93.     ''' create db and tables '''
  94.     conn = sqlite3.connect(db_name)
  95.     cursor = conn.cursor()
  96.  
  97.     # create a table
  98.     cursor.execute("""CREATE TABLE trajectories (id integer, date text, lat text, lon text, temperature text, slp text)""")
  99.     cursor.execute("""CREATE UNIQUE INDEX IDX_ll ON trajectories(id,date)""")
  100.     conn.commit()
  101.    
  102. def date_gen():
  103.     today = datetime.date.today()
  104.     today_yyyy = str(today.timetuple()[0])
  105.     if today.timetuple()[1]<10:
  106.         today_mm   = '0' + str(today.timetuple()[1])
  107.     else:
  108.         today_mm   = str(today.timetuple()[1])
  109.     if today.timetuple()[2]<10:
  110.         today_dd   = '0' + str(today.timetuple()[2])
  111.     else:
  112.         today_dd   = str(today.timetuple()[1])
  113.     today_dd   = str(today.timetuple()[2]) 
  114.     # 7 days ago
  115.     Ndays_ago = datetime.datetime.now() - datetime.timedelta(days=7)
  116.     yyyy1 = str(Ndays_ago.timetuple()[0])
  117.     if Ndays_ago.timetuple()[1]<10:
  118.         mm1 = '0' + str(Ndays_ago.timetuple()[1])
  119.     else:
  120.         mm1 = str(Ndays_ago.timetuple()[1])
  121.     if Ndays_ago.timetuple()[2]<10:
  122.         dd1 = '0' + str(Ndays_ago.timetuple()[2])
  123.     else:
  124.         dd1 = str(Ndays_ago.timetuple()[2])
  125.     date1 = yyyy1 + mm1 + dd1
  126.     date2 = today_yyyy + today_mm + today_dd
  127.     return date1, date2
  128.    
  129.  
  130.  
  131. # main programm
  132. try:
  133.     date1, date2 = date_gen()
  134.     conn = sqlite3.connect('buoys')
  135.     c = conn.cursor()
  136.     #create DB
  137.     #create_db('buoys')
  138.     #data from url 2 data base
  139.     db=url2db()
  140.     # retrieve ids
  141.     idss = ids()
  142.     # remove duplicate ids
  143.     ids_list = list(set(idss))
  144.    
  145.     try:
  146.         os.system(r"NET USE Y: \\193.227.233.12\gmo\arc %s /USER:%s " % ('aaridem', 'denis'))
  147.         print "NET USE Y: - OK!"
  148.     except:
  149.         print 'Mount ERROR!'
  150.     try:   
  151.        
  152.         shp_path = "Y:\\" + date2[0:4] + "\\" + date2[4:6] + "\\" + date2[6:8] + "\\ice_drift\\buoys\\"
  153.         print shp_path
  154.         md_dir = "MD " + shp_path
  155.         try:
  156.             os.system(md_dir)
  157.             print "MD dir - OK"
  158.         except:
  159.             print "MD dir ERROR!"
  160.        
  161.         w = sf.Writer(sf.POLYLINE)
  162.         w.field('id','C','40')
  163.         shp_filename = shp_path + date1 + '-' + date2
  164.        
  165.         for id in ids_list:
  166.             id = id[0]
  167.             # retrieve data for a buoy by id
  168.             list = id_data(id)
  169.             makeShp(list, str(id))
  170.         w.save(shp_filename)
  171.         makePrj(shp_filename)
  172.         os.system(r"NET USE Y: /DELETE")
  173.     except:
  174.         print 'Make shape error'
  175.         os.system(r"NET USE Y: /DELETE")
  176.    
  177.     conn.commit()      
  178. except:
  179.     print 'Conncetion error.'
Advertisement
Add Comment
Please, Sign In to add comment