空气质量国控站点数据插值出全国3181个城市值,利用了多线程
2017-11-02 13:04
246 查看
#coding=utf-8 import arcpy import math import sys import datetime import pymssql import json import os import time import uuid import logging import multiprocessing import random from arcpy import env from arcpy.sa import * def drawpng(date1,hour1,pullute,where): logging.debug(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')+"进入drawpng:"+pullute); #消除多进程报错 time.sleep(1.1) newTempDir = r"E:\temp\IDWmpenvr_" + str(time.strftime('%Y%m%d%H%M%S')) + str(random.random()*10000); os.mkdir(newTempDir) os.environ["TEMP"] = newTempDir os.environ["TMP"] = newTempDir env.workspace = r"E:\idw\tif_hour"; mapPath =r"E:\idw\tif_hour"; cnxn =pymssql.connect(host='127.0.0.1', user='sa', password='xzs@123', database='nationAir') cursor = cnxn.cursor(); #查询污染物数据 sql="SELECT b.stationcode,"+pullute+" from monitor_site_hour a,hf_site b where a.site=b.stationname and a.city=b.cityname and datetime='"+date1+" "+hour1+":00:00'"+" and "+where; cursor.execute(sql); cursorData = cursor.fetchall(); #把查询数据保存到SHP for item in cursorData: fc = "sites_"+pullute+".shp"; where ="SITEID='"+str(item[0])+"'"; rows = arcpy.UpdateCursor(fc,where); for row in rows: row.setValue(str(pullute),float(item[1])); rows.updateRow(row) del rows,fc; logging.debug(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')+"数据保存到shp完成:"+pullute); #进行差值操作 inPointFeatures = "sites_"+pullute+".shp"; arcpy.CheckOutExtension("Spatial") outSplineBarriers = Idw(inPointFeatures,pullute); tif ="pointraster_"+pullute+".tif"; if os.path.exists(mapPath+r"\pointraster_"+pullute+".tif"): #老tif文件删除 os.remove(mapPath+r"\pointraster_"+pullute+".tif") outSplineBarriers.save(tif); logging.debug(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')+"插值操作完成:"+pullute); #清理内存 del tif,inPointFeatures,outSplineBarriers; cursor.close; cnxn.close; logging.debug(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')+"drawpng完成:"+pullute); def insertData(date1,hour1): env.workspace = r"E:\idw\tif_hour"; mapPath =r"E:\idw\tif_hour"; cnxn =pymssql.connect(host='127.0.0.1', user='sa', password='xzs@123', database='nationAir') cursor = cnxn.cursor(); cursor1 = cnxn.cursor(); sql1="SELECT citycode,longitude,latitude FROM hf_city"; cursor.execute(sql1); cursorData = cursor.fetchall(); tif_so2 ="pointraster_so2.tif"; tif_no2 ="pointraster_no2.tif"; tif_co ="pointraster_co.tif"; tif_o3 ="pointraster_o3.tif"; tif_pm10 ="pointraster_pm10.tif"; tif_pm25 ="pointraster_pm25.tif"; #insert到数据库 for item in cursorData: point=item[1]+" "+item[2]; try: result_so2 = arcpy.GetCellValue_management(tif_so2,point); result_no2 = arcpy.GetCellValue_management(tif_no2,point); result_co = arcpy.GetCellValue_management(tif_co,point); result_o3 = arcpy.GetCellValue_management(tif_o3,point); result_pm10 = arcpy.GetCellValue_management(tif_pm10,point); result_pm25 = arcpy.GetCellValue_management(tif_pm25,point); updateSql="insert into hf_idw(citycode,datetimes,so2,no2,co,o3,pm10,pm25) values('%s','%s',%s,%s,%s,%s,%s,%s)" % (item[0],date1+" "+hour1+":00:00",result_so2.getOutput(0),result_no2.getOutput(0),result_co.getOutput(0),result_o3.getOutput(0),result_pm10.getOutput(0),result_pm25.getOutput(0)); cursor1.execute(updateSql); except Exception, e: logging.debug(e.message); cnxn.commit(); #清理内存 del result_so2,result_no2,result_co,result_o3,result_pm10,result_pm25; cursor.close; cursor1.close; cnxn.close; logging.debug(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')+"insertData完成:"); LOG_FILENAME="E:\idw\log_hour.txt"; logging.basicConfig(filename=LOG_FILENAME,level=logging.NOTSET); if __name__ == '__main__':#windows下必须加这句 cnxn =pymssql.connect(host='127.0.0.1', user='sa', password='xzs@123', database='nationAir') cursor = cnxn.cursor(); d1 = datetime.datetime.now(); date1=d1.strftime('%Y-%m-%d'); d3= d1 + datetime.timedelta(hours=-1); hour1=d3.strftime('%H'); logging.debug(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')+"小时值7项变量绘图开始"+date1+",小时:"+hour1); checksql="SELECT count(*) FROM monitor_site_hour where datetime='"+date1+" "+hour1+":00:00'"; cursor.execute(checksql); checkdata= cursor; num=0; for item0 in checkdata: num=item0[0]; logging.debug(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')+"检查数据库数量:"+str(num)); if num>1000: logging.debug(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')+"检查通过,开始计算"); #开启6个线程并行计算 pool = multiprocessing.Pool(processes = 6) pool.apply_async(drawpng, (date1,hour1,"so2","so2!='_'",)); pool.apply_async(drawpng, (date1,hour1,"no2","no2!='_'",)); pool.apply_async(drawpng, (date1,hour1,"co","co!='_'",)); pool.apply_async(drawpng, (date1,hour1,"o3","o3!='_'",)); pool.apply_async(drawpng, (date1,hour1,"pm10","pm10!='_'",)); pool.apply_async(drawpng, (date1,hour1,"pm25","pm25!='_'",)); pool.close() pool.join() insertData(date1,hour1); logging.debug(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')+"计算结束"); cursor.close; cnxn.close;
相关文章推荐
- 全国城市空气质量实时发布平台数据抓取获取接口
- 全国城市空气质量数据分析抓取
- 城市空气质量api 空气质量数据查询实现
- Ajax 通过城市名获取数据(全国天气预报API)
- 利用数据绑定(DataBinding)简化多线程数据展示
- 利用多线程编写多个客户端向服务器并发数据
- Python中利用Threadpool.map()多线程抓数据
- android获取全国城市数据和天气,工程结构及代码十分规范
- [.NET/C#]快速采集全国城市商圈数据
- 利用google map 查询全国城市坐标
- MIT与FAIR提出「mixup」,利用数据和标签的随机线性插值提高神经网络的健壮性
- 全国城市空气质量aqi排行api
- 全球 全世界/全国土地利用数据 连续20年多时相 数据下载
- 聚合数据全国天气预报--ajax 通过城市名取数据
- LINUX利用多线程完成多个客户端向服务器发送数据
- 城市公交数据下载(续)分析过程及源码(支持全国440个城市)
- 全国城市经纬度数据表mysql
- 全球土地利用数据 全国土地利用数据 下载 1km 栅格
- 城市公交、地铁站点和线路数据纠偏与矢量化
- [.net]利用xml在两个不同的站点上传递数据