コード例 #1
0
ファイル: wps_multiple_outputs.py プロジェクト: f-PLT/emu
    def _handler(self, request, response):
        response.update_status('PyWPS Process started.', 0)

        LOGGER.info("starting ...")
        max_outputs = request.inputs['count'][0].data

        # generate MetaLink v3 output
        ml3 = MetaLink('test-ml-1',
                       'Testing MetaLink with text files.',
                       workdir=self.workdir)
        for i in range(max_outputs):
            mf = MetaFile('output_{}'.format(i),
                          'Test output',
                          fmt=FORMATS.TEXT)
            mf.data = 'output: {}'.format(i)
            ml3.append(mf)
        response.outputs['output'].data = ml3.xml

        # ... OR generate MetaLink v4 output (recommended)
        ml4 = MetaLink4('test-ml-1',
                        'Testing MetaLink with text files.',
                        workdir=self.workdir)
        for i in range(max_outputs):
            mf = MetaFile('output_{}'.format(i),
                          'Test output',
                          fmt=FORMATS.TEXT)
            mf.data = 'output: {}'.format(i)
            ml4.append(mf)
        response.outputs['output_meta4'].data = ml4.xml

        response.update_status('PyWPS Process completed.', 100)
        return response
コード例 #2
0
    def _handler(self, request, response):
        response.update_status('PyWPS Process started.', 0)

        LOGGER.info("starting ...")
        max_outputs = request.inputs['count'][0].data

        # generate MetaLink v3 output
        ml3 = MetaLink('test-ml-1', 'Testing MetaLink with text files.', workdir=self.workdir)
        for i in range(max_outputs):
            mf = MetaFile('output_{}'.format(i), 'Test output', fmt=FORMATS.TEXT)
            mf.data = 'output: {}'.format(i)
            ml3.append(mf)
        response.outputs['output'].data = ml3.xml

        # ... OR generate MetaLink v4 output (recommended)
        ml4 = MetaLink4('test-ml-1', 'Testing MetaLink with text files.', workdir=self.workdir)
        for i in range(max_outputs):
            mf = MetaFile('output_{}'.format(i), 'Test output', fmt=FORMATS.TEXT)
            mf.data = 'output: {}'.format(i)
            ml4.append(mf)
        response.outputs['output_meta4'].data = ml4.xml

        response.update_status('PyWPS Process completed.', 100)
        return response
コード例 #3
0
ファイル: test_inout.py プロジェクト: daviguima/pywps
 def metalink(self):
     ml = MetaLink(identity='unittest', description='desc', files=(self.metafile(), ), workdir=self.tmp_dir)
     return ml
コード例 #4
0
    def _handler(self, request, response):
        response.update_status('PyWPS Process started.', 0)
        LOGGER.info("starting ...")
        max_outputs = 1

        # Variabili in input
        vectorbacino=request.inputs['vectorbacino'][0].file
        nomebacino=request.inputs['namebacino'][0].data

        # Variabili per output
        workdir=self.workdir
        file_path = config.get('server', 'outputpath')
        file_url = config.get('server', 'outputurl')

        nome_report_PDF="Report_CDP_"+str(self.uuid)+".pdf"
        nome_grafico="CDP_"+str(self.uuid)+".png"

        file_report_PDF= os.path.join(file_path, nome_report_PDF)
        url_report_PDF = os.path.join(file_url, nome_report_PDF)
        file_grafico=os.path.join(file_path, nome_grafico)
        url_grafico = os.path.join(file_url, nome_grafico)

        #Definizione ambiente di GRASS
        import grass.script as grass
        import grass.script.setup as gsetup

        GISBASE=config.get('grass', 'gisbase')
        GISDBASE=config.get("grass", "gisdbase")
        location="EPSG32632"
        mapset="PROVA"
        gsetup.init(GISBASE,GISDBASE, location, mapset)

        gisenv=grass.parse_command('g.gisenv', flags='n')
        print("Test gisenv: %s" % gisenv)

        list=grass.parse_command('g.list', type="rast")
        print("g.list rast: %s " %list)
      
        ######### ESTRAZIONE DESCRITTORI DEL BACINO DA GRASS #########
        print('######### ESTRAZIONE DESCRITTORI DEL BACINO DA GRASS #########')
        #caricamento vettoriale in GRASS
        res=grass.start_command('v.in.ogr', input=vectorbacino, output='basin', overwrite = True, min_area='0',stderr=subprocess.PIPE)
        stdoutdata, stderrdata = res.communicate()
        print("Error occured: %s" % stderrdata)

        # Configurazione della regione di GRASS
        grass.run_command('g.region', vector='basin')

        #trasforma il vettore del bacino in un raster
        grass.run_command('v.to.rast', input='basin', output='BASIN', use='cat', type='area', overwrite = True)

        #quota media e area ('piemonte_dem_r100')
        stats_dem = grass.parse_command('r.univar', flags='eg', map='piemonte_dem_r100@PROVA', zones='BASIN')
        quota_media=float(stats_dem['mean'])
        quota_max=float(stats_dem['max'])
        area_km=float(stats_dem['n']) * 0.01
        ipso75=float(stats_dem['first_quartile'])
        print(quota_media, quota_max, area_km, ipso75)

        #media afflusso annuo ('piemonte_MAP_r250')
        #grass.run_command('g.region', vect='basin', res='250')
        stats_MAP = grass.parse_command('r.univar', flags='g', map='piemonte_MAP_r250@PROVA', zones='BASIN')
        MAP_media = float(stats_MAP['mean'])
        MAP_std = float(stats_MAP['stddev'])

        #media e STD coefficiente pluviale orario CPP ('piemonte_IDFa_r250')
        #grass.run_command('g.region', vect='basin', res='250')
        stats_IDFa = grass.parse_command('r.univar', flags='g', map='piemonte_IDFa_r250@PROVA', zones='BASIN')
        IDFa_media = float(stats_IDFa['mean'])
        IDFa_std = float(stats_IDFa['stddev'])
    
        #media coefficiente regime pluviometrico B1 ('piemonte_fourierB1_r50')
        #grass.run_command('g.region', vect='basin', res='50')
        stats_fourierB1 = grass.parse_command('r.univar', flags='g', map='piemonte_fourierB1_r50@PROVA', zones='BASIN')
        fourierB1_media = float(stats_fourierB1['mean'])
    
        #media coefficiente variazione regime pluviometrico ('piemonte_rp_cv_r50')
        #grass.run_command('g.region', vect='basin', res='50')
        stats_rpcv = grass.parse_command('r.univar', flags='g', map='piemonte_pioggemensili_cv_r50@PROVA',zones='BASIN')
        rpcv_media = float(stats_rpcv['mean'])
    
        #percentuale classi CORINE riclassifcato
        cells_CLC = grass.read_command('r.stats', flags='1n', input='italy_CLC2000_r100@PROVA')
        all_cells_CLC = cells_CLC.count('1') + cells_CLC.count('2') + cells_CLC.count('3') + cells_CLC.count('4') + cells_CLC.count('5')
        clc2_percentuale = float(cells_CLC.count('2')) / float(all_cells_CLC) * 100
        clc3_percentuale = float(cells_CLC.count('3')) / float(all_cells_CLC) * 100
    
        # pulizia del workspace di GRASS
        grass.run_command('g.remove', flags='f', type='raster', name='MASK')
        grass.run_command('g.remove', flags='f', type='raster', name='BASIN')
        grass.run_command('g.remove', flags='f', type='vector', name='basin')

        testo =""
        testo1 = "I descrittori del bacino '%s' sono: \n" %(nomebacino)
        testo1 += "Area (km2): "+ str(round(area_km,3)) + "\n"+ "quota_media (m slm):  "+ str(round(quota_media,3)) + "\n" + "quota_massima (m slm):  " + str(round(quota_max,3)) + "\n" + "curva_ipso_75percento (m slm):  " + str(round(ipso75,3)) + "\n" + "MAP (mm):  " + str(round(MAP_media,3)) + "\n" + "IDFa (mm):  " + str(round(IDFa_media,3)) + "\n" + "IDFa_std (mm/h):  " + str(round(IDFa_std,3)) + "\n" + "fourier_B1:  " + str(round(fourierB1_media,3)) + "\n" +"CV rp:  " + str(round(rpcv_media,3)) + "\n" + "clc2_perc:  " + str(round(clc2_percentuale,3)) + "\n" + "clc3_perc:  " + str(round(clc3_percentuale,3))+"\n"
        
        print(testo1)
        ########## STIMA L-MOMENTI REGIONALI E PARAMETRI DISTRIBUZIONE ##########
        ## Calcolo portata L-momenti regionali
        c_int=IDFa_media/MAP_media
        Y=-7.3605*10**2+1.2527*MAP_media+3.2569*10**(-1)*quota_media+5.2674*fourierB1_media-6.7185*clc2_percentuale
        LCV=-2.896*10**(-1)-2.688*10**(-3)*clc3_percentuale+9.643*10**(-5)*ipso75+1.688*10**(-4)*MAP_media+2.941*10*c_int
        LCA=4.755*quota_max**(-0.2702)*IDFa_std**0.06869*rpcv_media**0.2106
        L1=Y*area_km/31536.0

        testo2 = "\n Gli L-momenti della CDP stimati, per l' area di studio sulla base delle caratteristiche geomorfologice del bacino, secondo la procedura regionale Renerfor sono: \n"
        testo2 += "L1:" + str(round(L1,3)) + "\n" + "LCV: "+str(round(LCV,3))+ "\n"+"LCA:" + str(round(LCA,3))+"\n \n"

        print(testo2)   
        ## Calcolo dei parametri della distribuzione funzioni riscritte a partire dal pacchetto per R Hydroapps(Ganora) per RENERFOR
        d=np.array(range(1,366))
        p=1-d/366.0
        LCAinf=fun.tau3BurrXII_WeibullBound(LCV)
        LCAsup=fun.tau3BurrXII_ParetoBound(LCV)
        risultati=fun.parBurrXIIapprox(L1, LCV, LCA)
        #risultati=('BurrXII','a: 8.5; b: 1; c: 2.8', p)
        distribuzione=risultati[0]
        parametri=risultati[1]
        x=risultati[2]
         
        testo3 ="Gli L-momenti L-CV e L-CA della Curva di Durata delle Portate (CDP), stimati a partire dai descrittori di bacino, ricadono, come riportato nella seguente figura, nel dominio di esistenza della distribuzione: "+ str(distribuzione)+".\n"
        testo3 += "I parametri stimati della distribuzione indicata hanno valore: \n"+ str(parametri)+". \n \n"
        testo4 =" La Curva di durata delle portate in regime naturale (non influenzata da derivazioni), ottenuta dal modello regionale Renerfor, viene riportata nel presente Report."
         
        #Creazione grafico CDP 
        fun.grafico_FDC_semplice_browser(x,file_grafico)
        #fun.figura_FDC_due_assi(x) #prova
        ##########################################################################################
        ##########################################################################################
        # OUTPUT
        testo=testo1+testo2+testo3+testo4
        
        #Creazione Report PDF
        with PdfPages(file_report_PDF) as pdf:
            #plt.rc('text', usetex=False)
            figura_testo=plt.figure(figsize=(8,6))
            # Pagina 1: Risultati testuali
            plt.text(-0.12, 1.01,testo, ha='left',va='top', wrap=True,fontsize=10)
            plt.ylim(0, 1)
            plt.xlim(0, 1)
            plt.setp(plt.gca(), frame_on=False, xticks=(), yticks=())
            pdf.savefig(figura_testo)
            plt.close()
            # Pagina 2: Dominio di Burr
            figura_dominio=fun.figura_dominio_burr(LCV,LCA)
            pdf.savefig(figura_dominio)
            plt.close()
            # Pagina 2: Curva di Durata
            figura_FDC=fun.figura_FDC_due_assi(x)
            pdf.savefig(figura_FDC)
            plt.close()

        #output = "Puoi visualizzare e scaricare il grafico della curva di durata delle portate all'url: \n %s" %('http://130.192.28.30/wpsoutputs/'+str(nome_grafico))
        #output += "\n"+"Puoi visualizzare e scaricare il Report PDF all'url: \n %s" %(url_report_PDF))
	

        # generate MetaLink v3 output
        ml3 = MetaLink('Report PDF', 'MetaLink', workdir=self.workdir)
        mf = MetaFile('REPORT_PDF.pdf', 'Report PDF CDP', fmt=FORMATS.TEXT)
        mf.url=url_report_PDF
        ml3.append(mf)
        response.outputs['output'].data = ml3.xml

        # ... OR generate MetaLink v4 output (recommended)
        ml4 = MetaLink4('Report PDF', 'MetaLink4', workdir=self.workdir)
        mf = MetaFile('REPORT_PDF.pdf', 'Report PDF CDP', fmt=FORMATS.TEXT)
        mf.file=file_report_PDF
        ml4.append(mf)
        response.outputs['output_meta4'].data = ml4.xml

        response.update_status('PyWPS Process completed.', 100)
        return response