def main():
    response = {}
    strLegend = ''

    # read from input parameters
    form = cgi.FieldStorage()
    strCoverage = form.getfirst("coverage")
    strDateCoverage = form.getfirst("dateCoverage")

    # return dataset features
    arrayFName = returnVariableFeature(strCoverage)
    # return dataset values from GN
    arrayVDataset = _returnDatasetAttributes(arrayFName["id"],
                                             arrayFName["type"])

    # retunr Legend image of getLegend using WMS
    strLegend = _returnLegendString(arrayFName, arrayVDataset, strDateCoverage)

    # response
    response["description"] = arrayFName["description"]
    response["legendLink"] = strLegend
    # response["metadataLink"]=_returnMetadataLink(arrayFName["id"])
    response["id"] = arrayFName["id"]
    response['result'] = 1
    response['error'] = ''
    # print the output json array
    print(json.JSONEncoder().encode(response))
예제 #2
0
def main():

    response = {}
    strTempCoverage = ''
    #_returnUniqueFilename();
    # read from input parameters
    form = cgi.FieldStorage()
    # coverage
    strCoverage = form.getfirst("coverage")
    blnSortable = form.getfirst("blnSortable")
    responseData = {}
    pos = strCoverage.find("REPLACESCENARIO")
    response = {'result': 1, 'error': ''}
    if (pos != -1):

        arrayFName = returnVariableFeature(strCoverage)

        strTemp = _returnIniValue("DATASET_SCENARIO", arrayFName["owner"])
        arrayScenario = strTemp.split(',')

        responseData["scenario"] = arrayScenario

        response["data"] = responseData

    else:
        # return layer features
        arrayFName = returnVariableFeature(strCoverage)

        if (blnSortable == "1"):

            if (arrayFName["scenario"] != ""):

                strTempCoverage = arrayFName["scenario"]
                # return all values for scenario dataset
                arrayFName = returnVariableFeature(arrayFName["scenario"])

                # translate with the scenario value
                if (arrayFName["scenario"] != ""):
                    strTemp = _returnIniValue(
                        "DATASET_SCENARIO", arrayFName["scenario"])
                    arrayScenario = strTemp.split(',')
                    responseData["originalScenario"] = arrayScenario

        # strFromDate=''
        # strToDate=''
        strtext = ''
        strLegend = ''
        # strUnit=''
        strYearKey = ''
        # return info from GN

        arrayVDataset = _returnDatasetAttributes(
            arrayFName["id"], arrayFName["type"])

        if ((arrayFName["type"] != "s_d") and (arrayFName["type"] != "s_m")):
            # RASTER: r_m or r_d

            # date from and to
            if (arrayVDataset["fromDate"] != ""):
                strTempDate = str(arrayVDataset["fromDate"])[:10]
                arrayTempDate = strTempDate.split('-')
                fromY = int(arrayTempDate[0])
                #fromM= int(arrayTempDate[1])
                #fromD= int(arrayTempDate[2])
            if (arrayVDataset["toDate"] != ""):
                strTempDate = str(arrayVDataset["toDate"])[:10]
                arrayTempDate = strTempDate.split('-')
                toY = int(arrayTempDate[0])
                #toM= int(arrayTempDate[1])
                #toD= int(arrayTempDate[2])

            # return day conditions for layer selected
            dayconditions = _returnDayConditions(arrayFName["interval"], '')

            if (int(toY) > int(fromY)):
                startYear = int(fromY) + 1
            else:
                startYear = fromY

            endYear = startYear + 1

            # from year = to year
            # it must returns only the first year to complete the month combo
            # for one year
            for lngYear in range(startYear, endYear):
                # for all days into dayconditions

                for lngDay in dayconditions:
                    # dt = datetime.datetime(lngYear,1,1)
                    # dtdelta = datetime.timedelta(days=lngDay-1)
                    #a=dt + dtdelta
                    # strTempDate=a.isoformat()

                    # verify if the file exists
                    strTempDate = returnIfLeapYear(lngDay, lngYear)
                    strTempDate = strTempDate.isoformat()

                    result = _verifyDatasetDate(
                        strTempDate, arrayVDataset["fromDate"], arrayVDataset["toDate"])
                    # if yes, add into a string
                    if (result == 1):
                        strtext = strtext + strTempDate + str('_')

            # return REPLACEKEY for coverage
            arrayDates = returnShapeFile_replacekey(strCoverage)

            if (arrayDates[0] != ''):
                strtext = ''
                for strReplace in arrayDates:
                    strtext = strtext + strReplace + str('_')
                strYearKey = "YEARDAY_SPECIAL"
            else:
                strtext = strtext[:-1]
                strYearKey = "YEAR"
        else:
            # SHAPE MOSAIC: s+mk or s_d
            # return dates for the layer
            arrayDates = returnShapeFile_replacekey(strCoverage)

            # for each date in arrayDates
            for strReplace in arrayDates:
                strtext = strtext + strReplace + str('_')
            strYearKey = "YEAR_SPECIAL"
        # return the output string

        responseData["scenario"] = ''
        responseData["strHttp"] = arrayVDataset["ows"]
        responseData["strEPSG"] = arrayVDataset["crs"]
        responseData["strServerType"] = arrayVDataset["serverType"]
        responseData["strDataType"] = arrayFName["type"]
        responseData["strDateFrom"] = str(arrayVDataset["fromDate"])
        responseData["strDateTo"] = str(arrayVDataset["toDate"])
        responseData["strDateList"] = strtext
        responseData["strDateType"] = str(strYearKey)
        responseData["strLegend"] = strLegend
        responseData["strUnit"] = str(arrayVDataset["unit"])
        responseData["strID"] = str(arrayFName["id"])
        if (strTempCoverage != ""):
            # if the temporary value is not blank
            # change the label with the new one
            responseData["strLabel"] = str(strTempCoverage)
            # save the old one as strLabelTranslate
            responseData["strLabelTranslate"] = str(strCoverage)
        else:
            responseData["strLabel"] = str(strCoverage)
        responseData["dateFormat"] = str(arrayFName["dateFormat"])
        responseData["strDateInterval"] = arrayFName["interval"]
        responseData["strDescription"] = str(arrayFName["description"])

        response["data"] = responseData

    print(json.JSONEncoder().encode(response))
예제 #3
0
def main():
    result = ''
    # reads input parameters
    form = cgi.FieldStorage()
    # latitude and longitude values
    arrayParams = {}
    # latitude and longitude values
    arrayParams["txtLLat"] = float(form.getfirst("lat"))
    arrayParams["txtULat"] = float(form.getfirst("lat"))
    arrayParams["txtLLon"] = float(form.getfirst("lon"))
    arrayParams["txtRLon"] = float(form.getfirst("lon"))
    # layer name
    arrayParams["layerCrop"] = (form.getfirst("layerCrop"))
    # date value
    try:
        arrayParams["strDate"] = (form.getfirst("strDate"))
    except:
        arrayParams["strDate"] = ''

    strError = ''
    response = {}
    if (arrayParams["layerCrop"] == None):
        response["id"] = ''
        response["geometry"] = ''
        response["label"] = ''
        response["projection"] = ''
    else:
        # return dataset feature
        arrayFName = returnVariableFeature(arrayParams["layerCrop"])
        # return dataset attributes
        arrayVDataset = _returnDatasetAttributes(arrayFName["id"],
                                                 arrayFName["type"])
        # return geometry
        #print arrayFName
        #print arrayVDataset
        result = queryFeature(arrayFName, arrayVDataset, arrayParams, '',
                              'the_geom', '')

        resultGeom = ''
        if (result["result"] == 1):
            resultGeom = result["value"]

            # query vector shapefile and retrieve the value
            result = queryFeature(arrayFName, arrayVDataset, arrayParams, '',
                                  arrayFName["returnid"], '')
            resultID = ''
            if (result["result"] == 1):
                resultID = result["value"]
                # output google projection
                if (arrayVDataset["serverType"] == "MAPSERVER"):
                    strToProj = strGEPSGF900913Proj
                else:
                    strToProj = strGEPSGF4326Proj

                response["id"] = resultID
                response["geometry"] = resultGeom
                response["label"] = arrayFName["returnlabel"]
                response["projection"] = strToProj

            else:
                strError = result["error"]

        else:
            strError = result["error"]
    if (strError == ""):
        response["error"] = ''
        response["result"] = '1'
    else:
        response["error"] = strError
        response["result"] = '0'

    print(json.JSONEncoder().encode(response))
예제 #4
0
def main():
    result=''
    # reads input parameters
    form   = cgi.FieldStorage()
    # latitude and longitude values
    arrayParams = {}
    # latitude and longitude values
    arrayParams["txtLLat"]=float(form.getfirst("lat"))
    arrayParams["txtULat"]=float(form.getfirst("lat"))
    arrayParams["txtLLon"]= float(form.getfirst("lon"))
    arrayParams["txtRLon"]= float(form.getfirst("lon"))
    # layer name
    arrayParams["layerCrop"]= (form.getfirst("layerCrop"))
    # date value
    try:
        arrayParams["strDate"]= (form.getfirst("strDate"))
    except:
        arrayParams["strDate"]=''

    strError=''
    response={}
    if (arrayParams["layerCrop"]==None):
        response["id"]=''
        response["geometry"]=''
        response["label"]=''
        response["projection"]=''
    else:
        # return dataset feature
        arrayFName=returnVariableFeature(arrayParams["layerCrop"])
        # return dataset attributes
        arrayVDataset=_returnDatasetAttributes(arrayFName["id"],arrayFName["type"])
        # return geometry
        #print arrayFName
        #print arrayVDataset
        result=queryFeature(arrayFName,arrayVDataset,arrayParams,'','the_geom','')

        resultGeom='';
        if (result["result"] == 1):
            resultGeom=result["value"]

            # query vector shapefile and retrieve the value
            result=queryFeature(arrayFName,arrayVDataset,arrayParams,'',arrayFName["returnid"],'')
            resultID=''
            if (result["result"] == 1):
                resultID=result["value"]
                # output google projection
                if (arrayVDataset["serverType"]=="MAPSERVER"):
                    strToProj=strGEPSGF900913Proj;
                else:
                    strToProj=strGEPSGF4326Proj;

                response["id"]=resultID
                response["geometry"]=resultGeom
                response["label"]=arrayFName["returnlabel"]
                response["projection"]=strToProj

            else:
                strError=result["error"]

        else:
            strError=result["error"]
    if (strError == ""):
        response["error"]=''
        response["result"]='1'
    else:
        response["error"]=strError
        response["result"]='0'

    print(json.JSONEncoder().encode(response))
예제 #5
0
def main():

    response = {}
    strTempCoverage = ''
    #_returnUniqueFilename();
    # read from input parameters
    form = cgi.FieldStorage()
    # coverage
    strCoverage = form.getfirst("coverage")
    blnSortable = form.getfirst("blnSortable")
    responseData = {}
    pos = strCoverage.find("REPLACESCENARIO")
    response = {'result': 1, 'error': ''}
    if (pos != -1):

        arrayFName = returnVariableFeature(strCoverage)

        strTemp = _returnIniValue("DATASET_SCENARIO", arrayFName["owner"])
        arrayScenario = strTemp.split(',')

        responseData["scenario"] = arrayScenario

        response["data"] = responseData

    else:
        # return layer features
        arrayFName = returnVariableFeature(strCoverage)

        if (blnSortable == "1"):

            if (arrayFName["scenario"] != ""):

                strTempCoverage = arrayFName["scenario"]
                # return all values for scenario dataset
                arrayFName = returnVariableFeature(arrayFName["scenario"])

                # translate with the scenario value
                if (arrayFName["scenario"] != ""):
                    strTemp = _returnIniValue("DATASET_SCENARIO",
                                              arrayFName["scenario"])
                    arrayScenario = strTemp.split(',')
                    responseData["originalScenario"] = arrayScenario

        # strFromDate=''
        # strToDate=''
        strtext = ''
        strLegend = ''
        # strUnit=''
        strYearKey = ''
        # return info from GN

        arrayVDataset = _returnDatasetAttributes(arrayFName["id"],
                                                 arrayFName["type"])

        if ((arrayFName["type"] != "s_d") and (arrayFName["type"] != "s_m")):
            # RASTER: r_m or r_d

            # date from and to
            if (arrayVDataset["fromDate"] != ""):
                strTempDate = str(arrayVDataset["fromDate"])[:10]
                arrayTempDate = strTempDate.split('-')
                fromY = int(arrayTempDate[0])
                #fromM= int(arrayTempDate[1])
                #fromD= int(arrayTempDate[2])
            if (arrayVDataset["toDate"] != ""):
                strTempDate = str(arrayVDataset["toDate"])[:10]
                arrayTempDate = strTempDate.split('-')
                toY = int(arrayTempDate[0])
                #toM= int(arrayTempDate[1])
                #toD= int(arrayTempDate[2])

            # return day conditions for layer selected
            dayconditions = _returnDayConditions(arrayFName["interval"], '')

            if (int(toY) > int(fromY)):
                startYear = int(fromY) + 1
            else:
                startYear = fromY

            endYear = startYear + 1

            # from year = to year
            # it must returns only the first year to complete the month combo
            # for one year
            for lngYear in range(startYear, endYear):
                # for all days into dayconditions

                for lngDay in dayconditions:
                    # dt = datetime.datetime(lngYear,1,1)
                    # dtdelta = datetime.timedelta(days=lngDay-1)
                    #a=dt + dtdelta
                    # strTempDate=a.isoformat()

                    # verify if the file exists
                    strTempDate = returnIfLeapYear(lngDay, lngYear)
                    strTempDate = strTempDate.isoformat()

                    result = _verifyDatasetDate(strTempDate,
                                                arrayVDataset["fromDate"],
                                                arrayVDataset["toDate"])
                    # if yes, add into a string
                    if (result == 1):
                        strtext = strtext + strTempDate + str('_')

            # return REPLACEKEY for coverage
            arrayDates = returnShapeFile_replacekey(strCoverage)

            if (arrayDates[0] != ''):
                strtext = ''
                for strReplace in arrayDates:
                    strtext = strtext + strReplace + str('_')
                strYearKey = "YEARDAY_SPECIAL"
            else:
                strtext = strtext[:-1]
                strYearKey = "YEAR"
        else:
            # SHAPE MOSAIC: s+mk or s_d
            # return dates for the layer
            arrayDates = returnShapeFile_replacekey(strCoverage)

            # for each date in arrayDates
            for strReplace in arrayDates:
                strtext = strtext + strReplace + str('_')
            strYearKey = "YEAR_SPECIAL"
        # return the output string

        responseData["scenario"] = ''
        responseData["strHttp"] = arrayVDataset["ows"]
        responseData["strEPSG"] = arrayVDataset["crs"]
        responseData["strServerType"] = arrayVDataset["serverType"]
        responseData["strDataType"] = arrayFName["type"]
        responseData["strDateFrom"] = str(arrayVDataset["fromDate"])
        responseData["strDateTo"] = str(arrayVDataset["toDate"])
        responseData["strDateList"] = strtext
        responseData["strDateType"] = str(strYearKey)
        responseData["strLegend"] = strLegend
        responseData["strUnit"] = str(arrayVDataset["unit"])
        responseData["strID"] = str(arrayFName["id"])
        if (strTempCoverage != ""):
            # if the temporary value is not blank
            # change the label with the new one
            responseData["strLabel"] = str(strTempCoverage)
            # save the old one as strLabelTranslate
            responseData["strLabelTranslate"] = str(strCoverage)
        else:
            responseData["strLabel"] = str(strCoverage)
        responseData["dateFormat"] = str(arrayFName["dateFormat"])
        responseData["strDateInterval"] = arrayFName["interval"]
        responseData["strDescription"] = str(arrayFName["description"])

        response["data"] = responseData

    print(json.JSONEncoder().encode(response))
예제 #6
0
def main():
    form = cgi.FieldStorage()
    strLayer = form.getfirst("strLayer")
    strYear = str(form.getfirst("strYear"))
    strMonth = str(form.getfirst("strMonth"))

    # html parser
    #h = HTMLParser.HTMLParser()

    # return output filename
    strName = _returnUniqueFilename()
    # save png and pdf extensions
    # strOutFilenamePNG=strName+'.png';
    strOutFilenamePDF = strName + '.pdf'

    # pdf istance
    pdf = FPDF()
    # add page
    pdf.add_page()
    pdf.add_font(
        'DejaVu',
        '',
        r'/var/lib/opengeo/geoserver/styles/DejaVuSansCondensed.ttf',
        uni=True)
    pdf.set_font('Arial', 'B', 16)
    cont = 30
    # add title
    strTitle = _returnIniValue('PDF_CONFIGURATION', 'PDF_TITLE')
    pdf.cell(200, 10, txt=strTitle, ln=1, align="L")
    pdf.set_font('Arial', '', 16)
    strHttp = _returnHttpAddress()
    # add link
    pdf.cell(200, 10, strHttp, 0, 1, 'L')
    pdf.ln(10)
    cont = cont + 10

    if (strLayer != ""):
        # add layer

        pdf.ln(5)
        pdf.set_x(10)
        cont = cont + 10
        arrayFName = returnVariableFeature(strLayer)
        if (strMonth != "None"):
            strDate = strYear + '-' + strMonth
        else:
            strDate = strYear

        strPrintDate = str(strDate)
        arrayVDataset = _returnDatasetAttributes(
            arrayFName["id"], arrayFName["type"])

        strLink = _returnGetMapLink(
            arrayFName, arrayVDataset, strYear, strMonth)

        pdf.set_font('Arial', '', 12)
        # layer title
        pdf.cell(0, 0, 'Layer: ')
        pdf.ln(5)
        cont = cont + 10
        pdf.set_x(15)
        pdf.set_font('DejaVu', '', 12)

        strText = arrayFName['description'] + ', ' + strPrintDate
        if (arrayVDataset["unit"] != ""):
            strText += ' (' + arrayVDataset["unit"] + ')'
        pdf.cell(0, 0, strText.decode('UTF-8'))
        pdf.ln(100)
        # add image
        pdf.image(strLink, 10, cont, 180, 100, 'PNG')
        cont = cont + 110
        # add legend

        if (arrayFName["legend"] == ""):
            # return http image

            strLegend = _returnLegendString(arrayFName, arrayVDataset, strDate)
            import urllib2
            a = urllib2.urlopen(strLegend).read()
            size = get_image_info(a)
        else:

            # return image info
            strPath = _returnHTMLDir()
            with open(strPath + arrayFName["legend"], 'rb') as f:

                data = f.read()
                size = get_image_info(data)

            strLegend = strPath + arrayFName["legend"]

        # calculate image size
        lngW = size[0]
        lngH = size[1]
        lngWMax = 50
        lngHMax = 30
        if (lngW > lngH):
            if (lngW > lngWMax):
                lngH = (lngWMax * lngH) / lngW
                lngW = lngWMax
        else:
            if (lngH > lngHMax):
                lngW = (lngHMax * lngW) / lngH
                lngH = lngHMax
        # add image

        pdf.image(strLegend, 10, cont, lngW, lngH)
        pdf.ln(lngH + 30)

        # add copyright
        pdf.set_font('Arial', '', 12)
        pdf.cell(0, 0, 'Use limitation: ')
        strTextCopyright = _returnPdfCopyright(arrayFName["id"])
        pdf.ln(5)
        pdf.set_font('DejaVu', '', 10)
        # multi cell (text)
        pdf.multi_cell(180, 5, strTextCopyright.decode('UTF-8'))

    strOutputDirectory = _returnTempDirectory(0)
    strHTTPOutputDirectory = _returnTempDirectory(1)
    pdf.output(strOutputDirectory + strOutFilenamePDF, 'F')
    # print and return the output link
    print strHTTPOutputDirectory + strOutFilenamePDF
예제 #7
0
def main():

    arrayParams = json.load(sys.stdin)
    response = {}

    # return Y1 description
    response["strY1Descr"] = ''
    # return Y2 description
    response["strY2Descr"] = ''
    # return graph title

    h = HTMLParser.HTMLParser()
    # operation as input parameter
    response["strOperation"] = arrayParams["operation"]

    arrayUnits = {}
    arrayLabels = {}
    arrayColors = {}
    arrayColorsGraph = []
    arrayCopyright = {}
    lngContSC = 0
    lngContB = 1
    lngContL = 1
    lngContH = 1
    lngColor = 0
    strHeader = 'Date,'
    blnBarChartY1 = 0
    blnLogY1 = 0
    # for each layer of Y1
    for arrayTemp in arrayParams["vars1"]:
        # save layer name
        strLayer = arrayTemp["value"]
        # return layer feature
        arrayFName = returnVariableFeature(strLayer)
        # return parameter from GN
        arrayVDataset = _returnDatasetAttributes(
            arrayFName["id"], arrayFName["type"])
        # return Y1 description
        if (response["strY1Descr"] == ""):
            if (len(arrayParams["vars1"]) > 1):
                # if there are more than 1 variable, the system return the owner description
                # (all datasets must be of the save group)
                response["strY1Descr"] = arrayFName['owner']
            else:
                # return layer description
                response["strY1Descr"] = str(arrayFName["description"])
            # add the unit
            if (str(arrayVDataset["unit"]) != ""):
                response[
                    "strY1Descr"] += '(' + str(arrayVDataset["unit"]) + ')'

        arrayFormula = arrayFName["formula"].split('_')

        # STEPCHART
        if (arrayFormula[0] == "STEPCHART"):
            # number of maximum fields
            lngMax = int(arrayVDataset["maxValue"])
            # return colors from ini files
            arrayGColors_2y_stepchart = _returnColorsScale_SC(
                str(arrayFName["colorsScale"]), "COLOR")
            # and labels
            arrayGLabels_2y_stepchart = _returnColorsScale_SC(
                str(arrayFName["colorsScale"]), "LABEL")
            # save the header line of CSV file
            for ii in range(int(arrayVDataset["minValue"]), int(lngMax) + 1, 1):
                strVar = str('SCY1' + str(lngContSC + 1))
                strHeader += strVar + ','
                # save the output label used from javascript to describe with
                # the mouse over a specific value
                arrayLabels[str(strVar)] = arrayGLabels_2y_stepchart[lngContSC]
                # save the output unit
                arrayUnits[strVar] = arrayVDataset["unit"]
                # save the color used to design the graph
                arrayColors[strVar] = arrayGColors_2y_stepchart[lngContSC]
                arrayColorsGraph.append(arrayGColors_2y_stepchart[lngContSC])

                lngContSC = lngContSC + 1
        else:
            # BARCHART
            if ((arrayFormula[0] == "BAR0") or (arrayFormula[0] == "BAR")):
                strVar = str('BY1' + str(lngContB))
                lngContB = lngContB + 1
                if (arrayFormula[0] == "BAR0"):
                    blnBarChartY1 = 1
            else:
                # LINEBAR
                if (arrayFormula[0] == "LINEBAR"):
                    strVar = 'LY1' + str(lngContL)
                    lngContL = lngContL + 1
                else:
                    # HISTOGRAM
                    if (arrayFormula[0] == "HISTOGRAM"):
                        strVar = 'HY1' + str(lngContH)
                        lngContH = lngContH + 1
            strHeader += strVar
            arrayLabels[str(strVar)] = str(arrayFName["description"])

            # if deviation is enabled
            # add a string to describe if the returned value is standard or
            # spatial deviation
            if (arrayParams["blnDeviation"] == 1):
                if (arrayFName["sd"] != ""):
                    arrayLabels[str(strVar)] = arrayLabels[
                        str(strVar)] + ' (standard deviation)'
                else:
                    if (arrayParams["operation"] != "POINT"):
                        arrayLabels[str(strVar)] = arrayLabels[
                            str(strVar)] + ' (spatial deviation)'
            # return unit
            arrayUnits[str(strVar)] = arrayVDataset["unit"]
            # color
            arrayGColors_2y_other = _returnColorsScale(
                str(arrayFName["colorsScale"]))
            arrayColors[strVar] = arrayGColors_2y_other[lngColor]
            arrayColorsGraph.append(arrayGColors_2y_other[lngColor])
            strHeader += ','
            lngColor = lngColor + 1
        arrayCopyright[str(strVar)] = h.unescape(
            _returnPdfCopyright(arrayFName["id"]))
        if (arrayFormula[1] == "LOG"):
            blnLogY1 = 1

    lngContSC = 0
    lngContB = 1
    lngContL = 1
    blnBarChartY2 = 0
    blnLogY2 = 0
    # the same for all variables of Y2
    for arrayTemp in arrayParams["vars2"]:
        strLayer = arrayTemp["value"]

        arrayFName = returnVariableFeature(strLayer)
        arrayVDataset = _returnDatasetAttributes(
            arrayFName["id"], arrayFName["type"])

        if (response["strY2Descr"] == ""):
            if (len(arrayParams["vars2"]) > 1):
                response["strY2Descr"] = arrayFName['owner']
            else:
                response["strY2Descr"] = str(arrayFName["description"])
            if (str(arrayVDataset["unit"]) != ""):
                response[
                    "strY2Descr"] += '(' + str(arrayVDataset["unit"]) + ')'

        arrayFormula = arrayFName["formula"].split('_')

        if (arrayFormula[0] == "STEPCHART"):
            lngMax = int(arrayVDataset["maxValue"])
            arrayGColors_2y_stepchart = _returnColorsScale_SC(
                str(arrayFName["colorsScale"]), "COLOR")
            arrayGLabels_2y_stepchart = _returnColorsScale_SC(
                str(arrayFName["colorsScale"]), "LABEL")

            for ii in range(int(arrayVDataset["minValue"]), int(lngMax) + 1, 1):
                strVar = str('SCY2' + str(lngContSC + 1))
                strHeader += strVar + ','
                arrayLabels[str(strVar)] = arrayGLabels_2y_stepchart[lngContSC]
                arrayUnits[strVar] = arrayVDataset["unit"]
                arrayColors[strVar] = arrayGColors_2y_stepchart[lngContSC]
                arrayColorsGraph.append(arrayGColors_2y_stepchart[lngContSC])

                lngContSC = lngContSC + 1
        else:
            if ((arrayFormula[0] == "BAR0") or (arrayFormula[0] == "BAR")):
                strVar = str('BY2' + str(lngContB))
                lngContB = lngContB + 1
                if (arrayFormula[0] == "BAR"):
                    blnBarChartY2 = 1
            else:
                if (arrayFormula[0] == "LINEBAR"):
                    strVar = 'LY2' + str(lngContL)
                    lngContL = lngContL + 1
                else:
                    if (arrayFormula[0] == "HISTOGRAM"):
                        strVar = 'HY2' + str(lngContH)
                        lngContH = lngContH + 1

            strHeader += strVar
            arrayLabels[str(strVar)] = str(arrayFName["description"])
            if (arrayParams["blnDeviation"] == 1):
                if (arrayFName["sd"] != ""):
                    arrayLabels[str(strVar)] = arrayLabels[
                        str(strVar)] + ' (standard deviation)'
                else:
                    if (arrayParams["operation"] != "POINT"):
                        arrayLabels[str(strVar)] = arrayLabels[
                            str(strVar)] + ' (spatial deviation)'

            arrayUnits[str(strVar)] = arrayVDataset["unit"]

            arrayGColors_2y_other = _returnColorsScale(
                str(arrayFName["colorsScale"]))
            arrayColors[strVar] = arrayGColors_2y_other[lngColor]
            arrayColorsGraph.append(arrayGColors_2y_other[lngColor])
            strHeader += ','
            lngColor = lngColor + 1
        arrayCopyright[str(strVar)] = h.unescape(
            _returnPdfCopyright(arrayFName["id"]))
        if (arrayFormula[1] == "LOG"):
            blnLogY2 = 1
    # header to save into the CSV file
    strHeader = strHeader[:-1] + '\n'

    # CSV filename
    strFilename = _returnFilename_csv()

    # initialize the CSV file
    _formatCsvFile(strHeader, strFilename)

    # return the http file
    strHttpFilename = _returnHttpFilename(strFilename)

    # save all output values into a json array
    response["units"] = arrayUnits
    response["labels"] = arrayLabels
    response["colors"] = arrayColors
    response["colorsGraph"] = arrayColorsGraph
    response["strGraphTitle"] = _returnGraphTitle(arrayParams)
    response['strFilename'] = strFilename
    response['strHttpFilename'] = strHttpFilename
    response['blnBarChartY1'] = blnBarChartY1
    response['blnBarChartY2'] = blnBarChartY2
    response['blnLogaritmicY1'] = blnLogY1
    response['blnLogaritmicY2'] = blnLogY2
    strSource = _returnIniValue('PDF_CONFIGURATION', 'PDF_TITLE')
    response['reference'] = str(strSource) + ', ' + str(_returnHttpAddress())
    response['copyright'] = arrayCopyright
    response['result'] = 1
    response['error'] = ''

    print(json.JSONEncoder().encode(response))
예제 #8
0
def main():
    form = cgi.FieldStorage()
    strLayer = form.getfirst("strLayer")
    strYear = str(form.getfirst("strYear"))
    strMonth = str(form.getfirst("strMonth"))

    # html parser
    #h = HTMLParser.HTMLParser()

    # return output filename
    strName = _returnUniqueFilename()
    # save png and pdf extensions
    # strOutFilenamePNG=strName+'.png';
    strOutFilenamePDF = strName + '.pdf'

    # pdf istance
    pdf = FPDF()
    # add page
    pdf.add_page()
    pdf.add_font('DejaVu',
                 '',
                 r'/var/lib/opengeo/geoserver/styles/DejaVuSansCondensed.ttf',
                 uni=True)
    pdf.set_font('Arial', 'B', 16)
    cont = 30
    # add title
    strTitle = _returnIniValue('PDF_CONFIGURATION', 'PDF_TITLE')
    pdf.cell(200, 10, txt=strTitle, ln=1, align="L")
    pdf.set_font('Arial', '', 16)
    strHttp = _returnHttpAddress()
    # add link
    pdf.cell(200, 10, strHttp, 0, 1, 'L')
    pdf.ln(10)
    cont = cont + 10

    if (strLayer != ""):
        # add layer

        pdf.ln(5)
        pdf.set_x(10)
        cont = cont + 10
        arrayFName = returnVariableFeature(strLayer)
        if (strMonth != "None"):
            strDate = strYear + '-' + strMonth
        else:
            strDate = strYear

        strPrintDate = str(strDate)
        arrayVDataset = _returnDatasetAttributes(arrayFName["id"],
                                                 arrayFName["type"])

        strLink = _returnGetMapLink(arrayFName, arrayVDataset, strYear,
                                    strMonth)

        pdf.set_font('Arial', '', 12)
        # layer title
        pdf.cell(0, 0, 'Layer: ')
        pdf.ln(5)
        cont = cont + 10
        pdf.set_x(15)
        pdf.set_font('DejaVu', '', 12)

        strText = arrayFName['description'] + ', ' + strPrintDate
        if (arrayVDataset["unit"] != ""):
            strText += ' (' + arrayVDataset["unit"] + ')'
        pdf.cell(0, 0, strText.decode('UTF-8'))
        pdf.ln(100)
        # add image
        pdf.image(strLink, 10, cont, 180, 100, 'PNG')
        cont = cont + 110
        # add legend

        if (arrayFName["legend"] == ""):
            # return http image

            strLegend = _returnLegendString(arrayFName, arrayVDataset, strDate)
            import urllib2
            a = urllib2.urlopen(strLegend).read()
            size = get_image_info(a)
        else:

            # return image info
            strPath = _returnHTMLDir()
            with open(strPath + arrayFName["legend"], 'rb') as f:

                data = f.read()
                size = get_image_info(data)

            strLegend = strPath + arrayFName["legend"]

        # calculate image size
        lngW = size[0]
        lngH = size[1]
        lngWMax = 50
        lngHMax = 30
        if (lngW > lngH):
            if (lngW > lngWMax):
                lngH = (lngWMax * lngH) / lngW
                lngW = lngWMax
        else:
            if (lngH > lngHMax):
                lngW = (lngHMax * lngW) / lngH
                lngH = lngHMax
        # add image

        pdf.image(strLegend, 10, cont, lngW, lngH)
        pdf.ln(lngH + 30)

        # add copyright
        pdf.set_font('Arial', '', 12)
        pdf.cell(0, 0, 'Use limitation: ')
        strTextCopyright = _returnPdfCopyright(arrayFName["id"])
        pdf.ln(5)
        pdf.set_font('DejaVu', '', 10)
        # multi cell (text)
        pdf.multi_cell(180, 5, strTextCopyright.decode('UTF-8'))

    strOutputDirectory = _returnTempDirectory(0)
    strHTTPOutputDirectory = _returnTempDirectory(1)
    pdf.output(strOutputDirectory + strOutFilenamePDF, 'F')
    # print and return the output link
    print strHTTPOutputDirectory + strOutFilenamePDF
예제 #9
0
def main():
    # reads input parameters
    form = cgi.FieldStorage()
    #h = HTMLParser.HTMLParser()

    data = form.getfirst("data")

    strParams = form.getfirst("strParams")

    pos = data.find(",")

    data = data[pos + 1:]

    arrayParams = strParams.split('<%%>')
    data = base64.b64decode(data)

    # output directory
    strOutputDirectory = _returnTempDirectory(0)
    # return filename
    strName = _returnUniqueFilename()
    # png and pdf extensions
    strOutFilenamePNG = strName + '.png'
    strOutFilenamePDF = strName + '.pdf'
    # open png file for writing
    f = open(strOutputDirectory + strOutFilenamePNG, 'w')
    f.write(data)
    f.close()
    # parameters

    # print arrayParams[1]
    # strText=arrayParams[1].encode("utf-8")

    # print strText
    # arrayParams[1]=h.unescape(arrayParams[1])
    #arrayParams[1]=arrayParams[1].replace("<br>", ", ");
    #arrayParams[1]=arrayParams[1].replace("Â", "");

    # variables
    arrayVars1 = arrayParams[2].split('#')
    arrayVars2 = arrayParams[3].split('#')

    # pdf istance
    pdf = FPDF()
    # add page
    pdf.add_page()

    #pdf.add_font('Arial', '', r'/var/lib/opengeo/geoserver/styles/ArialSansCondensed.ttf', uni=True)
    #pdf.set_font('Arial', '', 14)

    pdf.set_font('Arial', 'B', 16)
    cont = 0
    # add title
    strTitle = _returnIniValue('PDF_CONFIGURATION', 'PDF_TITLE')
    pdf.cell(200, 10, txt=strTitle, ln=1, align="L")
    pdf.set_font('Arial', '', 16)
    strHttp = _returnHttpAddress()
    # add ce ll for address
    pdf.cell(200, 10, strHttp, 0, 1, 'L')
    pdf.ln(10)
    cont = cont + 10
    # add cell for operation
    pdf.set_font('Arial', '', 12)
    pdf.cell(0, 0, 'Operation: ')
    pdf.ln(5)
    cont = cont + 5
    pdf.set_x(15)
    # add cell for coordinates
    # pdf.set_font('Arial','',12)
    pdf.cell(0, 0, arrayParams[0].decode('UTF-8'))
    pdf.ln(5)
    cont = cont + 5
    # add cell for coordinates
    pdf.set_font('Arial', '', 12)
    pdf.cell(0, 0, 'Coordinates: ')
    pdf.ln(5)
    cont = cont + 5
    pdf.set_x(15)
    # pdf.set_font('Arial','',12)
    pdf.cell(0, 0, arrayParams[1].decode('UTF-8'))

    #pdf.write(8, text)
    pdf.ln(5)
    cont = cont + 5
    pdf.set_font('Arial', '', 12)
    # variables list
    pdf.cell(0, 0, 'Variables Y1: ')
    pdf.ln(5)
    cont = cont + 5
    strAdditionalInfo = ''
    strTextCopyright = ''
    for value in arrayVars1:
        if (value != ""):
            arrayFName = returnVariableFeature(value)

            arrayVDataset = _returnDatasetAttributes(
                arrayFName["id"], arrayFName["type"])
            pdf.set_font('Arial', '', 12)
            strAdd = arrayFName["description"].decode('UTF-8')
            if (arrayVDataset["unit"] != ""):
                strAdd += ' (' + arrayVDataset["unit"].decode('UTF-8') + ')'

            pdf.set_x(15)
            pdf.cell(0, 0, strAdd)
            # for each variable add a description
            pdf.ln(5)
            cont = cont + 5
            # save the copyright for each variable in order to put the text
            # after the graph
            strTextCopyright += '\n\n' + strAdd + '\n' + \
                _returnPdfCopyright(arrayFName["id"])

            strAdditionalInfo += _returnMetadataAdditionalInfo(
                arrayFName["id"])
            strAdditionalInfo += '\n\nMetadata link: \n' + \
                _returnMetadataLink(arrayFName["id"])

    blnPrimaVolta = 1

    for value in arrayVars2:
        if (value != ""):
            if (blnPrimaVolta == 1):
                blnPrimaVolta = 0
                pdf.cell(0, 0, 'Variables Y2: ')
                pdf.ln(5)

            pdf.set_x(15)
            arrayFName = returnVariableFeature(value)
            arrayVDataset = _returnDatasetAttributes(
                arrayFName["id"], arrayFName["type"])
            pdf.set_font('Arial', '', 12)
            strAdd = arrayFName["description"].decode('UTF-8')
            if (arrayVDataset["unit"] != ""):
                strAdd += ' (' + arrayVDataset["unit"].decode('UTF-8') + ')'

            pdf.cell(0, 0, strAdd)
            # for each variable add a description
            pdf.ln(5)
            cont = cont + 5
            # save the copyright for each variable in order to put the text
            # after the graph
            strTextCopyright += '\n\n' + strAdd + '\n' + \
                _returnPdfCopyright(arrayFName["id"])
            strAdditionalInfo += '\n\n' + \
                _returnMetadataAdditionalInfo(arrayFName["id"])
            strAdditionalInfo += '\n\nMetadata link: \n' + \
                _returnMetadataLink(arrayFName["id"])
    # add graph image
    pdf.image(strOutputDirectory + strOutFilenamePNG,
              10, cont + 40, 180, 120, 'PNG')
    # add copyright
    if (strTextCopyright != ""):
        pdf.ln(130)
        pdf.set_font('Arial', '', 12)
        pdf.cell(0, 0, 'Use limitation: ')
        pdf.ln(1)
        pdf.set_font('Arial', '', 10)
        pdf.multi_cell(180, 5, strTextCopyright.decode('UTF-8'))
        strHTTPOutputDirectory = _returnTempDirectory(1)
    pdf.ln(5)
    if (strAdditionalInfo != ""):
        pdf.set_font('Arial', '', 10)
        pdf.multi_cell(180, 5, strAdditionalInfo.decode('UTF-8'))
        strHTTPOutputDirectory = _returnTempDirectory(1)
    pdf.ln(5)

    pdf.output(strOutputDirectory + strOutFilenamePDF, 'F')
    # print and return the output link
    print strHTTPOutputDirectory + strOutFilenamePDF
예제 #10
0
def main():
    global strError
    blnDebug = 0

    response = {'result': 0, 'error': ''}
    arrayParams = json.load(sys.stdin)

    # save process id in order to delete when stop the process
    _savePid(arrayParams["strCSVFile"] + '.pid')
#   arrayParams["txtRLon"]=10.444722
#   arrayParams["txtLLon"]=10.444722
#   arrayParams["txtULat"]=51.084722
#   arrayParams["txtLLat"]=51.084722
#   arrayParams["strCSVFile"]="/var/www/html/temp/20140610144944074620.csv"
    # input parameters

    arrayParams["append"] = int(arrayParams["append"])

#   arrayParams["append"]=1;

    arrayParams["txtRLon"] = float(arrayParams["txtRLon"])

    arrayParams["txtLLon"] = float(arrayParams["txtLLon"])
    arrayParams["txtULat"] = float(arrayParams["txtULat"])
    arrayParams["txtLLat"] = float(arrayParams["txtLLat"])

    arrayParams["originaltxtRLon"] = arrayParams["txtRLon"]
    arrayParams["originaltxtLLon"] = arrayParams["txtLLon"]
    arrayParams["originaltxtULat"] = arrayParams["txtULat"]
    arrayParams["originaltxtLLat"] = arrayParams["txtLLat"]
    arrayParams["fromMonth"] = int(arrayParams["fromMonth"])
    arrayParams["toMonth"] = int(arrayParams["toMonth"])
    arrayParams["fromYear"] = int(arrayParams["fromYear"])
    arrayParams["toYear"] = int(arrayParams["toYear"])
    strLayersDescr = ''
    arrayLayers = []
    # collects all input vars

    for arrayTemp in arrayParams["vars1"]:
        arrayLayers.append(arrayTemp['value'])
    for arrayTemp in arrayParams["vars2"]:
        arrayLayers.append(arrayTemp['value'])

    if (blnDebug == 1):
        print arrayParams
    # arrayFinalDates=[]
    #arrayValues = []
    #arrayFinal1= []
    #arrayFinal2= []
    # lngFinal=0;
    # lngCont=0;
    blnContinueDate = 0
    # lngIncr=1
    # lngContSC=1;
    # lngContB=1;
    # lngContL=1;
    # lngContH=1;
    # strHeader='Date,'
    arrayFName_total = []
    arrayVDataset_total = []
    arrayFNameSD_total = []
    arrayVDatasetSD_total = []

    arrayParams["crs"] = strGEPSGF4326Proj

    blnFoundShapeFile = 0
    strFoundShapeFile = ''
    strFoundShapeFile_owner = ''

    for arrayTemp in arrayParams["vars1"]:
        strLayer = arrayTemp['value']

        # return variable info
        arrayFName = returnVariableFeature(strLayer)

        # if the variable is a shape
        if (arrayFName["type"] == "s_d" or arrayFName["type"] == "s_m"):
            blnFoundShapeFile = 1
            strFoundShapeFile_owner = arrayFName["owner"]
            if (strFoundShapeFile == ""):
                strFoundShapeFile = strLayer

        arrayTemp = arrayFName["formula"].split('_')
        # return dataset attributes from GN
        arrayVDataset = _returnDatasetAttributes(
            arrayFName["id"], arrayFName["type"])

        if arrayVDataset:
            arrayVDataset_total.append(arrayVDataset)
        # return dates available reads from getCapabilities

        arrayDatesAv = _returnGetCapabilities_dates(arrayVDataset["ows"], arrayFName["type"], arrayFName[
                                                    "store"], arrayFName["name"], arrayVDataset["ows_version"], arrayFName["dateFormat"], arrayFName["interval"])

        arrayFName["dates_available"] = arrayDatesAv

        if arrayFName:
            arrayFName_total.append(arrayFName)

        if (arrayTemp[0] == "STEPCHART"):
            strEmptyString = ''
            lngMax = arrayVDataset["maxValue"]
            for ii in range(int(arrayVDataset["minValue"]), int(lngMax) + 1, 1):
                strEmptyString += 'null,'
            strEmptyString = strEmptyString[:-1]
        # deviation
        if (arrayParams["blnDeviation"] == 1):
            # info about the deviation datates

            arrayFNameSD = returnVariableFeature(arrayFName['sd'])

            arrayVDatasetSD = []
            if arrayFNameSD:
                # return dataset attributes from GN
                arrayVDatasetSD = _returnDatasetAttributes(
                    arrayFNameSD["id"], arrayFNameSD["type"])

                # return dates available reads from getCapabilities
                arrayDatesAvSD = _returnGetCapabilities_dates(arrayVDataset["ows"], arrayFNameSD["type"], arrayFNameSD[
                                                              "store"], arrayFNameSD["name"], arrayVDatasetSD["ows_version"], arrayFNameSD["dateFormat"], arrayFNameSD["interval"])

                arrayFNameSD["dates_available"] = arrayDatesAvSD
            arrayVDatasetSD_total.append(arrayVDatasetSD)
            arrayFNameSD_total.append(arrayFNameSD)

    # same process for VARS2
    for arrayTemp in arrayParams["vars2"]:
        strLayer = arrayTemp['value']
        arrayFName = returnVariableFeature(strLayer)
        if (arrayFName["type"] == "s_d" or arrayFName["type"] == "s_m"):
            if (blnFoundShapeFile == 1):
                # there is a shape on the VAR1
                if (strFoundShapeFile_owner != ""):
                    if (arrayFName["owner"] != strFoundShapeFile_owner):
                        #strError="You cannot compare two shapefile at the same time: please, change it!"
                        # return an error if the user tries to compare 2
                        # shapefiles at the same time
                        exit(0)
            else:
                blnFoundShapeFile = 1
            if (strFoundShapeFile == ""):
                strFoundShapeFile = strLayer

        arrayTemp = arrayFName["formula"].split('_')
        arrayVDataset = _returnDatasetAttributes(
            arrayFName["id"], arrayFName["type"])
        if arrayVDataset:
            arrayVDataset_total.append(arrayVDataset)

        arrayDatesAv = _returnGetCapabilities_dates(arrayVDataset["ows"], arrayFName["type"], arrayFName[
                                                    "store"], arrayFName["name"], arrayVDataset["ows_version"], arrayFName["dateFormat"], arrayFName["interval"])

        arrayFName["dates_available"] = arrayDatesAv
        if arrayFName:
            arrayFName_total.append(arrayFName)

        if (arrayTemp[0] == "STEPCHART"):
            strEmptyString = ''
            lngMax = arrayVDataset["maxValue"]
            for ii in range(int(arrayVDataset["minValue"]), int(lngMax) + 1, 1):
                strEmptyString += 'null,'
            strEmptyString = strEmptyString[:-1]

        if (arrayParams["blnDeviation"] == 1):

            arrayFNameSD = returnVariableFeature(arrayFName['sd'])

            arrayVDatasetSD = []
            if arrayFNameSD:
                arrayVDatasetSD = _returnDatasetAttributes(
                    arrayFNameSD["id"], arrayFNameSD["type"])
                arrayDatesAvSD = _returnGetCapabilities_dates(arrayVDataset["ows"], arrayFNameSD["type"], arrayFNameSD[
                                                              "store"], arrayFNameSD["name"], arrayVDatasetSD["ows_version"], arrayFNameSD["dateFormat"], arrayFNameSD["interval"])
                arrayFNameSD["dates_available"] = arrayDatesAvSD
            arrayVDatasetSD_total.append(arrayVDatasetSD)
            arrayFNameSD_total.append(arrayFNameSD)

    # I found a shapefile
    if (blnFoundShapeFile == 1 or arrayParams["operation"] == "SHAPE"):

        # original coordinates
        lngLatToFind = arrayParams["originaltxtLLat"]
        lngLonToFind = arrayParams["originaltxtLLon"]

        if (arrayParams["operation"] == "SHAPE"):
            if (strFoundShapeFile != ""):
                strLayerToFind = strFoundShapeFile
            else:
                strLayerToFind = arrayParams["layerCrop"]
        else:
            strLayerToFind = strFoundShapeFile

        strGeom = ""
        if (strLayerToFind != ""):
            arrayFNameFeature = returnVariableFeature(strLayerToFind)
            # print arrayFNameFeature
            arrayVDatasetFeature = _returnDatasetAttributes(
                arrayFNameFeature["id"], arrayFNameFeature["type"])
            # print arrayVDatasetFeature
            arrayParamsFeature = arrayParams
            arrayParamsFeature["strDate"] = ""
            if (arrayFNameFeature["type"] == "s_m"):
                pos = arrayFNameFeature["fixed"].find("_")
                if (pos == 4):
                    arrayParamsFeature["strDate"] = str(
                        arrayVDatasetFeature["fromDate"])[:pos].replace("-", "")
                else:
                    arrayParamsFeature["strDate"] = str(
                        arrayVDatasetFeature["fromDate"])[:10].replace("-", "")

            if (arrayVDatasetFeature["serverType"] == "MAPSERVER"):
                arrayParamsFeature["crs"] = "EPSG:900913"
            else:
                arrayParamsFeature["crs"] = arrayVDatasetFeature["crs"]
            arrayParamsFeature["name"] = strLayerToFind
            arrayParamsFeature["txtLLon"] = lngLonToFind
            arrayParamsFeature["txtRLon"] = lngLonToFind
            arrayParamsFeature["txtLLat"] = lngLatToFind
            arrayParamsFeature["txtULat"] = lngLatToFind

            if (blnDebug == 1):
                print arrayFNameFeature
                print arrayVDatasetFeature
                print arrayParamsFeature
                print arrayParamsFeature["crs"]

            # return the geometry converted to right projection
            result = queryFeature(arrayFNameFeature, arrayVDatasetFeature,
                                  arrayParamsFeature, '', 'the_geom', arrayParamsFeature["crs"])
            strGeom = ''
            if (result["result"] == 1):
                strGeom = result["value"]
            # cwa:wei_rb_ecf_REPLACEKEY_ann
            if (arrayVDatasetFeature["serverType"] == "MAPSERVER"):
                inputEPSG = 3857
                outputEPSG = 4326
            else:
                inputEPSG = 4326
                outputEPSG = 4326
            # converted polygon

            arrayParams["convertedPolygon"] = convertPolygon(
                strGeom, inputEPSG, outputEPSG)
            arrayParams["convertedCrs"] = strGEPSGF4326Proj

            latS = []
            lonS = []
            strGGeometry = ''
            # save all points into two different arrays in order to extrapolate
            # the min and max values for lat and long
            for values in arrayParams["convertedPolygon"]:
                latS.append(float(values[1]))
                lonS.append(float(values[0]))
                strGGeometry += str(values[0]) + ' ' + str(values[1]) + ','
            # save the geometry into the correct format for WPS
            strGGeometry = strGGeometry[0:-1]
            # save min and max
            strAreaToLon = np.max(lonS) + 1
            strAreaFromLon = np.min(lonS) - 1
            strAreaToLat = np.max(latS) + 1
            strAreaFromLat = np.min(latS) - 1
            # save values into the structure
            arrayParams["strGGeometry"] = strGGeometry
            arrayParams["strAreaToLon"] = strAreaToLon
            arrayParams["strAreaFromLon"] = strAreaFromLon
            arrayParams["strAreaFromLat"] = strAreaFromLat
            arrayParams["strAreaToLat"] = strAreaToLat

        arrayParams["geom"] = strGeom
        if (blnFoundShapeFile == 1):
            arrayParams["operation"] = "SHAPE"

    # return common dates
    arrayDates = _returnCommonDates(arrayFName_total)
    # print arrayDates
    # return common years
    arrayYears = _returnCommonYears(
        arrayFName_total, arrayParams["fromYear"], arrayParams["toYear"])
    # print arrayYears
    # print arrayYears
    # print arrayDates
    # print arrayLayers
    # exit(0);
    strPrevStepChart = ''
    blnPrimaVoltaDebug = 1
    # start the loop

    if (arrayParams["append"] == 1):
        # append to the csv file
        #f = open(arrayParams["strCSVFile"],'ab')
        import csv
        with open(arrayParams["strCSVFile"], 'rb') as csvfile:
            reader = csv.reader(csvfile, delimiter=' ', quotechar='|')
            #lastline = reader.next()

            rows = list(reader)
            lngNum = int(len(rows))

            if (lngNum > 1):
                strTemp = rows[lngNum - 1]

                arrayTemp = strTemp[0].split(',')
                strDate = arrayTemp[0]
                arrayTempDate = strDate.split('-')

                arrayParams["fromYear"] = int(arrayTempDate[0])
                arrayParams["fromMonth"] = int(arrayTempDate[1])
                arrayNewYears = []
                for lngYear in arrayYears:
                    if (lngYear >= arrayParams["fromYear"]):
                        arrayNewYears.append(int(lngYear))
                arrayYears = arrayNewYears

    for lngYear in arrayYears:
        # loop over days
        for lngDay in arrayDates:
            # verify if the year if a leap year
            strTempDate = _returnIfLeapYear(lngDay, lngYear)
            strTempDateOr = strTempDate
            # extrapolate month
            lngMonth = int(strTempDate.month)
            # date
            strTempDate = strTempDate.isoformat()

            # verify date with input parameters
            blnContinueDate = 1
            if (lngYear == arrayParams["fromYear"]):
                if (lngMonth < arrayParams["fromMonth"]):
                    blnContinueDate = 0
            if (lngYear == arrayParams["toYear"]):
                if (lngMonth > arrayParams["toMonth"]):
                    blnContinueDate = 0

            # date
            if (blnContinueDate == 1):

                strLine = str(strTempDate[:10]) + ','

                # for each layer
                for xx in range(0, len(arrayLayers), 1):

                    strLayer = arrayLayers[xx]
                    if (blnDebug == 1):
                        print strLayer
                    # lngCont=0;
                    # arrayValues=[]

                    # shape dataset or mosaic
                    arrayParams["strCoverage"] = strLayer

                    arrayFName = arrayFName_total[xx]

                    strLayersDescr += arrayFName["description"] + '#'

                    if arrayVDataset_total[xx]:
                        arrayVDataset = arrayVDataset_total[xx]

                    arrayFName_deviation = []
                    if (arrayParams["blnDeviation"] == 1):

                        if ((arrayFNameSD_total) and (len(arrayFNameSD_total) > xx)):
                            arrayFName_deviation = arrayFNameSD_total[xx]

                        if ((arrayVDatasetSD_total) and (len(arrayVDatasetSD_total) > xx)):
                            arrayVDataset_deviation = arrayVDatasetSD_total[xx]

                    # input parameters
                    # if is a point, the system retrieve 3 x 3 pixels and
                    # extrapolate the 1,1
                    if (arrayParams["operation"] == "POINT"):
                        # return cell 3 * 3
                        arrayParams["txtLLon"] = arrayParams[
                            "originaltxtLLon"] - (arrayVDataset["xsize"] * 1.6)
                        arrayParams["txtLLat"] = arrayParams[
                            "originaltxtLLat"] - (arrayVDataset["ysize"] * 1.6)
                        arrayParams["txtRLon"] = arrayParams[
                            "originaltxtRLon"] + (arrayVDataset["xsize"] * 1.6)
                        arrayParams["txtULat"] = arrayParams[
                            "originaltxtULat"] + (arrayVDataset["ysize"] * 1.6)

                    # calculare width and height
                    widthValue = int(
                        ((arrayParams["txtRLon"] - arrayParams["txtLLon"]) / arrayVDataset["xsize"]))
                    heightValue = int(
                        ((arrayParams["txtULat"] - arrayParams["txtLLat"]) / arrayVDataset["ysize"]))

                    # minimun value
                    if (widthValue < 1):
                        widthValue = 1
                    if (heightValue < 1):
                        heightValue = 1
                    arrayParams["widthValue"] = widthValue
                    arrayParams["heightValue"] = heightValue

                    lngValue = ''
                    blnContinueDateLayer = 0
                    # verify if the dateset exists for the specific date
                    if (blnDebug == 1):
                        if (blnPrimaVoltaDebug == 1):
                            print arrayFName["dates_available"]
                            blnPrimaVoltaDebug = 0

                    strTempDateOrUp = _replaceDateFormat(
                        strTempDateOr, arrayFName["dateFormat"])
                    # print strTempDateOrUp
                    # print strTempDateOrUp

                    blnContinueDateLayer = _verifyIfDateIsAvailable(strTempDateOrUp, strLayer, arrayFName[
                                                                    "type"], arrayFName["dates_available"], arrayFName["fixed"], arrayFName["dateFormat"])
                    arrayTemp = arrayFName["formula"].split('_')

                    if (blnContinueDateLayer == 1):
                        if (blnDebug == 1):
                            print "date ok: "
                            print strTempDateOrUp
                        arrayParams["strCoverage"] = strLayer
                        #======================================================
                        # SHAPEFILE (mosaic or dataset)
                        #======================================================
                        if ((arrayFName["type"] == "s_m") or (arrayFName["type"] == "s_d")):

                            strResult_var = ""
                            if (arrayFName["type"] == "s_d"):
                                # no data to save if it is a dataset
                                arrayParams["strDate"] = ''
                            else:
                                # save info for date
                                pos = arrayFName["fixed"].find("_")
                                if (pos == 4):
                                    strTestDate = str(strTempDate)[0:pos]
                                else:
                                    strTestDate = str(
                                        strTempDate[:10]).replace("-", "")

                                # strTempNameOriginal=arrayFName["name"]
                                arrayParams["strDate"] = strTestDate
                            #==================================================
                            # QUERY FEATURE (WFS)
                            #==================================================
                            result = queryFeature(
                                arrayFName, arrayVDataset, arrayParams, lngDay, arrayFName["returnid"], '')
                            strResult_var = ''
                            if (result["result"] == 1):
                                strResult_var = result["value"]
                            lngValue = ''
                            if (strResult_var != ""):
                                lngValue = float(strResult_var)
                        #======================================================
                        # SHAPEFILE (mosaic or dataset)
                        #======================================================
                        else:
                            #==================================================
                            # RASTER (mosaic or dataset)
                            #==================================================

                            if (arrayParams["operation"] == "POINT" or arrayParams["operation"] == "BOX"):
                                #==============================================
                                # COVERAGE (WCS)
                                #==============================================

                                data = returnCoverageMeanValue(
                                    arrayParams["operation"], strTempDate, arrayParams, arrayFName, arrayVDataset, '', 0)

                            else:
                                #==============================================
                                # CROP COVERAGE (WPS)
                                #==============================================

                                data = returnCropCoverageMeanValue(
                                    arrayParams["operation"], strTempDate, arrayParams, arrayFName, arrayVDataset, '', 0)

                            # print data
                            strResult_var = str(_returnMeanValue(arrayParams[
                                                "operation"], data, arrayVDataset, arrayFName["formula"], '', 0, arrayFName["colorsScale"]))

                            # translate the value
                            lngValue = _returnTransformMean(
                                strResult_var, arrayFName, arrayVDataset, 0)

                            if (blnDebug == 1):
                                print data

                                print strResult_var
                                print lngValue
                        #======================================================
                        # RASTER (mosaic or dataset)
                        #======================================================

                        if (blnDebug == 1):
                            print strResult_var
                            print lngValue
                        lngValueDev = ''
                        strResult_dev = ''
                        if (arrayTemp[0] != "HISTOGRAM"):
                            # if the dataset is a bar, the SD doesn't work
                            # se e'un bar non funziona la standard deviation
                            # quindi inutile recuperare il valore
                            if (arrayParams["blnDeviation"] == 1):
                                if (blnDebug == 1):
                                    print "calcolo deviation"
                                #==============================================
                                # RASTER (mosaic or dataset)
                                #==============================================
                                if ((arrayFName["type"] != "s_m") and (arrayFName["type"] != "s_d")):
                                    # print arrayFName_deviation
                                    if arrayFName_deviation:
                                        if (blnDebug == 1):
                                            print "STANDARD deviation"
                                        #======================================
                                        # STANDARD DEVIATION
                                        #======================================
                                        arrayParams[
                                            "strCoverage"] = arrayFName['sd']

                                        blnContinueDateLayer = _verifyIfDateIsAvailable(strTempDateOrUp, arrayParams["strCoverage"], arrayFName_deviation[
                                                                                        "type"], arrayFName_deviation["dates_available"], arrayFName_deviation["fixed"], arrayFName_deviation["dateFormat"])

                                        # verify if the layername exists in
                                        # getCapabilities
                                        if (blnContinueDateLayer == 1):

                                            if (arrayParams["operation"] == "POINT" or arrayParams["operation"] == "BOX"):
                                                #==============================
                                                # COVERAGE (WCS)
                                                #==============================
                                                data = returnCoverageMeanValue(arrayParams[
                                                                               "operation"], strTempDate, arrayParams, arrayFName_deviation, arrayVDataset_deviation, strResult_var, 0)
                                            else:
                                                #==============================
                                                # CROP COVERAGE (WPS)
                                                #==============================
                                                data = returnCropCoverageMeanValue(arrayParams[
                                                                                   "operation"], strTempDate, arrayParams, arrayFName_deviation, arrayVDataset_deviation, strResult_var, 0)

                                            strResult_dev = str(_returnMeanValue(arrayParams["operation"], data, arrayVDataset_deviation, arrayFName_deviation[
                                                                "formula"], strResult_var, 0, arrayFName["colorsScale"]))

                                            lngValueDev = _returnTransformMean(
                                                strResult_dev, arrayFName_deviation, arrayVDataset_deviation, 1)

                                            if (blnDebug == 1):
                                                print data
                                                print strResult_dev
                                                print lngValueDev

                                            # exit(0);
                                    else:
                                        if (blnDebug == 1):
                                            print "SPATIAL deviation"

                                        #======================================
                                        # SPATIAL DEVIATION
                                        #======================================
                                        if (arrayTemp[0] != "STEPCHART"):

                                            # if (arrayParams["operation"]=="BOX"):
                                            # ========================================================================================
                                            # COVERAGE (WCS)
                                            # ========================================================================================
                                            #   data=returnCoverageMeanValue(arrayParams["operation"],strTempDate,arrayParams,arrayFName,arrayVDataset,strResult_var,1)
                                            # else:
                                            #   if (arrayParams["operation"]=="SHAPE"):
                                            # ========================================================================================
                                            # CROP COVERAGE (WPS)
                                            # ========================================================================================
                                            # data=returnCropCoverageMeanValue(arrayParams["operation"],strTempDate,arrayParams,arrayFName,arrayVDataset,strResult_var,1)
                                            if (arrayParams["operation"] == "SHAPE" or arrayParams["operation"] == "BOX"):
                                                strResult_dev = str(_returnMeanValue(arrayParams["operation"], data, arrayVDataset, arrayFName[
                                                                    "formula"], strResult_var, 1, arrayFName["colorsScale"]))
                                                lngValueDev = _returnTransformMean(
                                                    strResult_dev, arrayFName, arrayVDataset, 1)
                                                if (blnDebug == 1):
                                                    print data
                                                    print strResult_dev
                                                    print strResult_var
                                                    print lngValueDev
                                #==============================================
                                # RASTER (mosaic or dataset)
                                #==============================================

                        if (arrayTemp[0] == "STEPCHART"):
                            if (lngValueDev == ""):
                                if (lngValue == ""):
                                    if (strPrevStepChart != ""):
                                        lngValue = strPrevStepChart
                                    else:
                                        lngValue = strEmptyString

                                lngValue = str(lngValue).replace(",", ",,")
                                strPrevStepChart = str(lngValue)
                                # add the standard deviation to null values for
                                # each value
                    else:
                        lngValueDev = ''
                        lngValue = ''
                        if (arrayTemp[0] == "STEPCHART"):
                            '''
                            lngValue=strEmptyString;
                            if (arrayParams["blnDeviation"]==1):
                                lngValue=str(lngValue).replace(",", ",,");
                            lngValueDev=''
                            '''
                            lngValue = strPrevStepChart
                            if (strPrevStepChart == ""):
                                lngValue = strEmptyString
                                if (arrayParams["blnDeviation"] == 1):
                                    lngValue = str(lngValue).replace(",", ",,")
                            lngValueDev = ''

                    strLine += str(lngValue) + ',' + str(lngValueDev) + ','
                # save the line
                strLine = strLine[:-1] + '\n'
                if (blnDebug == 1):
                    print strLine
                    exit(0)
                # save the data into the .csv
                _formatCsvFile(strLine, arrayParams["strCSVFile"])
                # exit(0);
    # return the http filename
    # strHttpFilename=_returnHttpFilename(arrayParams["strCSVFile"]);
    response['result'] = 1
    response['error'] = ''
    # return
    print(json.JSONEncoder().encode(response))
예제 #11
0
def main():
    global strError
    blnDebug = 0

    response = {'result': 0, 'error': ''}
    arrayParams = json.load(sys.stdin)

    # save process id in order to delete when stop the process
    _savePid(arrayParams["strCSVFile"] + '.pid')
    #   arrayParams["txtRLon"]=10.444722
    #   arrayParams["txtLLon"]=10.444722
    #   arrayParams["txtULat"]=51.084722
    #   arrayParams["txtLLat"]=51.084722
    #   arrayParams["strCSVFile"]="/var/www/html/temp/20140610144944074620.csv"
    # input parameters

    arrayParams["append"] = int(arrayParams["append"])

    #   arrayParams["append"]=1;

    arrayParams["txtRLon"] = float(arrayParams["txtRLon"])

    arrayParams["txtLLon"] = float(arrayParams["txtLLon"])
    arrayParams["txtULat"] = float(arrayParams["txtULat"])
    arrayParams["txtLLat"] = float(arrayParams["txtLLat"])

    arrayParams["originaltxtRLon"] = arrayParams["txtRLon"]
    arrayParams["originaltxtLLon"] = arrayParams["txtLLon"]
    arrayParams["originaltxtULat"] = arrayParams["txtULat"]
    arrayParams["originaltxtLLat"] = arrayParams["txtLLat"]
    arrayParams["fromMonth"] = int(arrayParams["fromMonth"])
    arrayParams["toMonth"] = int(arrayParams["toMonth"])
    arrayParams["fromYear"] = int(arrayParams["fromYear"])
    arrayParams["toYear"] = int(arrayParams["toYear"])
    strLayersDescr = ''
    arrayLayers = []
    # collects all input vars

    for arrayTemp in arrayParams["vars1"]:
        arrayLayers.append(arrayTemp['value'])
    for arrayTemp in arrayParams["vars2"]:
        arrayLayers.append(arrayTemp['value'])

    if (blnDebug == 1):
        print arrayParams
    # arrayFinalDates=[]
    #arrayValues = []
    #arrayFinal1= []
    #arrayFinal2= []
    # lngFinal=0;
    # lngCont=0;
    blnContinueDate = 0
    # lngIncr=1
    # lngContSC=1;
    # lngContB=1;
    # lngContL=1;
    # lngContH=1;
    # strHeader='Date,'
    arrayFName_total = []
    arrayVDataset_total = []
    arrayFNameSD_total = []
    arrayVDatasetSD_total = []

    arrayParams["crs"] = strGEPSGF4326Proj

    blnFoundShapeFile = 0
    strFoundShapeFile = ''
    strFoundShapeFile_owner = ''

    for arrayTemp in arrayParams["vars1"]:
        strLayer = arrayTemp['value']

        # return variable info
        arrayFName = returnVariableFeature(strLayer)

        # if the variable is a shape
        if (arrayFName["type"] == "s_d" or arrayFName["type"] == "s_m"):
            blnFoundShapeFile = 1
            strFoundShapeFile_owner = arrayFName["owner"]
            if (strFoundShapeFile == ""):
                strFoundShapeFile = strLayer

        arrayTemp = arrayFName["formula"].split('_')
        # return dataset attributes from GN
        arrayVDataset = _returnDatasetAttributes(arrayFName["id"],
                                                 arrayFName["type"])

        if arrayVDataset:
            arrayVDataset_total.append(arrayVDataset)
        # return dates available reads from getCapabilities

        arrayDatesAv = _returnGetCapabilities_dates(
            arrayVDataset["ows"], arrayFName["type"], arrayFName["store"],
            arrayFName["name"], arrayVDataset["ows_version"],
            arrayFName["dateFormat"], arrayFName["interval"])

        arrayFName["dates_available"] = arrayDatesAv

        if arrayFName:
            arrayFName_total.append(arrayFName)

        if (arrayTemp[0] == "STEPCHART"):
            strEmptyString = ''
            lngMax = arrayVDataset["maxValue"]
            for ii in range(int(arrayVDataset["minValue"]),
                            int(lngMax) + 1, 1):
                strEmptyString += 'null,'
            strEmptyString = strEmptyString[:-1]
        # deviation
        if (arrayParams["blnDeviation"] == 1):
            # info about the deviation datates

            arrayFNameSD = returnVariableFeature(arrayFName['sd'])

            arrayVDatasetSD = []
            if arrayFNameSD:
                # return dataset attributes from GN
                arrayVDatasetSD = _returnDatasetAttributes(
                    arrayFNameSD["id"], arrayFNameSD["type"])

                # return dates available reads from getCapabilities
                arrayDatesAvSD = _returnGetCapabilities_dates(
                    arrayVDataset["ows"], arrayFNameSD["type"],
                    arrayFNameSD["store"], arrayFNameSD["name"],
                    arrayVDatasetSD["ows_version"], arrayFNameSD["dateFormat"],
                    arrayFNameSD["interval"])

                arrayFNameSD["dates_available"] = arrayDatesAvSD
            arrayVDatasetSD_total.append(arrayVDatasetSD)
            arrayFNameSD_total.append(arrayFNameSD)

    # same process for VARS2
    for arrayTemp in arrayParams["vars2"]:
        strLayer = arrayTemp['value']
        arrayFName = returnVariableFeature(strLayer)
        if (arrayFName["type"] == "s_d" or arrayFName["type"] == "s_m"):
            if (blnFoundShapeFile == 1):
                # there is a shape on the VAR1
                if (strFoundShapeFile_owner != ""):
                    if (arrayFName["owner"] != strFoundShapeFile_owner):
                        #strError="You cannot compare two shapefile at the same time: please, change it!"
                        # return an error if the user tries to compare 2
                        # shapefiles at the same time
                        exit(0)
            else:
                blnFoundShapeFile = 1
            if (strFoundShapeFile == ""):
                strFoundShapeFile = strLayer

        arrayTemp = arrayFName["formula"].split('_')
        arrayVDataset = _returnDatasetAttributes(arrayFName["id"],
                                                 arrayFName["type"])
        if arrayVDataset:
            arrayVDataset_total.append(arrayVDataset)

        arrayDatesAv = _returnGetCapabilities_dates(
            arrayVDataset["ows"], arrayFName["type"], arrayFName["store"],
            arrayFName["name"], arrayVDataset["ows_version"],
            arrayFName["dateFormat"], arrayFName["interval"])

        arrayFName["dates_available"] = arrayDatesAv
        if arrayFName:
            arrayFName_total.append(arrayFName)

        if (arrayTemp[0] == "STEPCHART"):
            strEmptyString = ''
            lngMax = arrayVDataset["maxValue"]
            for ii in range(int(arrayVDataset["minValue"]),
                            int(lngMax) + 1, 1):
                strEmptyString += 'null,'
            strEmptyString = strEmptyString[:-1]

        if (arrayParams["blnDeviation"] == 1):

            arrayFNameSD = returnVariableFeature(arrayFName['sd'])

            arrayVDatasetSD = []
            if arrayFNameSD:
                arrayVDatasetSD = _returnDatasetAttributes(
                    arrayFNameSD["id"], arrayFNameSD["type"])
                arrayDatesAvSD = _returnGetCapabilities_dates(
                    arrayVDataset["ows"], arrayFNameSD["type"],
                    arrayFNameSD["store"], arrayFNameSD["name"],
                    arrayVDatasetSD["ows_version"], arrayFNameSD["dateFormat"],
                    arrayFNameSD["interval"])
                arrayFNameSD["dates_available"] = arrayDatesAvSD
            arrayVDatasetSD_total.append(arrayVDatasetSD)
            arrayFNameSD_total.append(arrayFNameSD)

    # I found a shapefile
    if (blnFoundShapeFile == 1 or arrayParams["operation"] == "SHAPE"):

        # original coordinates
        lngLatToFind = arrayParams["originaltxtLLat"]
        lngLonToFind = arrayParams["originaltxtLLon"]

        if (arrayParams["operation"] == "SHAPE"):
            if (strFoundShapeFile != ""):
                strLayerToFind = strFoundShapeFile
            else:
                strLayerToFind = arrayParams["layerCrop"]
        else:
            strLayerToFind = strFoundShapeFile

        strGeom = ""
        if (strLayerToFind != ""):
            arrayFNameFeature = returnVariableFeature(strLayerToFind)
            # print arrayFNameFeature
            arrayVDatasetFeature = _returnDatasetAttributes(
                arrayFNameFeature["id"], arrayFNameFeature["type"])
            # print arrayVDatasetFeature
            arrayParamsFeature = arrayParams
            arrayParamsFeature["strDate"] = ""
            if (arrayFNameFeature["type"] == "s_m"):
                pos = arrayFNameFeature["fixed"].find("_")
                if (pos == 4):
                    arrayParamsFeature["strDate"] = str(
                        arrayVDatasetFeature["fromDate"])[:pos].replace(
                            "-", "")
                else:
                    arrayParamsFeature["strDate"] = str(
                        arrayVDatasetFeature["fromDate"])[:10].replace(
                            "-", "")

            if (arrayVDatasetFeature["serverType"] == "MAPSERVER"):
                arrayParamsFeature["crs"] = "EPSG:900913"
            else:
                arrayParamsFeature["crs"] = arrayVDatasetFeature["crs"]
            arrayParamsFeature["name"] = strLayerToFind
            arrayParamsFeature["txtLLon"] = lngLonToFind
            arrayParamsFeature["txtRLon"] = lngLonToFind
            arrayParamsFeature["txtLLat"] = lngLatToFind
            arrayParamsFeature["txtULat"] = lngLatToFind

            if (blnDebug == 1):
                print arrayFNameFeature
                print arrayVDatasetFeature
                print arrayParamsFeature
                print arrayParamsFeature["crs"]

            # return the geometry converted to right projection
            result = queryFeature(arrayFNameFeature, arrayVDatasetFeature,
                                  arrayParamsFeature, '', 'the_geom',
                                  arrayParamsFeature["crs"])
            strGeom = ''
            if (result["result"] == 1):
                strGeom = result["value"]
            # cwa:wei_rb_ecf_REPLACEKEY_ann
            if (arrayVDatasetFeature["serverType"] == "MAPSERVER"):
                inputEPSG = 3857
                outputEPSG = 4326
            else:
                inputEPSG = 4326
                outputEPSG = 4326
            # converted polygon

            arrayParams["convertedPolygon"] = convertPolygon(
                strGeom, inputEPSG, outputEPSG)
            arrayParams["convertedCrs"] = strGEPSGF4326Proj

            latS = []
            lonS = []
            strGGeometry = ''
            # save all points into two different arrays in order to extrapolate
            # the min and max values for lat and long
            for values in arrayParams["convertedPolygon"]:
                latS.append(float(values[1]))
                lonS.append(float(values[0]))
                strGGeometry += str(values[0]) + ' ' + str(values[1]) + ','
            # save the geometry into the correct format for WPS
            strGGeometry = strGGeometry[0:-1]
            # save min and max
            strAreaToLon = np.max(lonS) + 1
            strAreaFromLon = np.min(lonS) - 1
            strAreaToLat = np.max(latS) + 1
            strAreaFromLat = np.min(latS) - 1
            # save values into the structure
            arrayParams["strGGeometry"] = strGGeometry
            arrayParams["strAreaToLon"] = strAreaToLon
            arrayParams["strAreaFromLon"] = strAreaFromLon
            arrayParams["strAreaFromLat"] = strAreaFromLat
            arrayParams["strAreaToLat"] = strAreaToLat

        arrayParams["geom"] = strGeom
        if (blnFoundShapeFile == 1):
            arrayParams["operation"] = "SHAPE"

    # return common dates
    arrayDates = _returnCommonDates(arrayFName_total)
    # print arrayDates
    # return common years
    arrayYears = _returnCommonYears(arrayFName_total, arrayParams["fromYear"],
                                    arrayParams["toYear"])
    # print arrayYears
    # print arrayYears
    # print arrayDates
    # print arrayLayers
    # exit(0);
    strPrevStepChart = ''
    blnPrimaVoltaDebug = 1
    # start the loop

    if (arrayParams["append"] == 1):
        # append to the csv file
        #f = open(arrayParams["strCSVFile"],'ab')
        import csv
        with open(arrayParams["strCSVFile"], 'rb') as csvfile:
            reader = csv.reader(csvfile, delimiter=' ', quotechar='|')
            #lastline = reader.next()

            rows = list(reader)
            lngNum = int(len(rows))

            if (lngNum > 1):
                strTemp = rows[lngNum - 1]

                arrayTemp = strTemp[0].split(',')
                strDate = arrayTemp[0]
                arrayTempDate = strDate.split('-')

                arrayParams["fromYear"] = int(arrayTempDate[0])
                arrayParams["fromMonth"] = int(arrayTempDate[1])
                arrayNewYears = []
                for lngYear in arrayYears:
                    if (lngYear >= arrayParams["fromYear"]):
                        arrayNewYears.append(int(lngYear))
                arrayYears = arrayNewYears

    for lngYear in arrayYears:
        # loop over days
        for lngDay in arrayDates:
            # verify if the year if a leap year
            strTempDate = _returnIfLeapYear(lngDay, lngYear)
            strTempDateOr = strTempDate
            # extrapolate month
            lngMonth = int(strTempDate.month)
            # date
            strTempDate = strTempDate.isoformat()

            # verify date with input parameters
            blnContinueDate = 1
            if (lngYear == arrayParams["fromYear"]):
                if (lngMonth < arrayParams["fromMonth"]):
                    blnContinueDate = 0
            if (lngYear == arrayParams["toYear"]):
                if (lngMonth > arrayParams["toMonth"]):
                    blnContinueDate = 0

            # date
            if (blnContinueDate == 1):

                strLine = str(strTempDate[:10]) + ','

                # for each layer
                for xx in range(0, len(arrayLayers), 1):

                    strLayer = arrayLayers[xx]
                    if (blnDebug == 1):
                        print strLayer
                    # lngCont=0;
                    # arrayValues=[]

                    # shape dataset or mosaic
                    arrayParams["strCoverage"] = strLayer

                    arrayFName = arrayFName_total[xx]

                    strLayersDescr += arrayFName["description"] + '#'

                    if arrayVDataset_total[xx]:
                        arrayVDataset = arrayVDataset_total[xx]

                    arrayFName_deviation = []
                    if (arrayParams["blnDeviation"] == 1):

                        if ((arrayFNameSD_total)
                                and (len(arrayFNameSD_total) > xx)):
                            arrayFName_deviation = arrayFNameSD_total[xx]

                        if ((arrayVDatasetSD_total)
                                and (len(arrayVDatasetSD_total) > xx)):
                            arrayVDataset_deviation = arrayVDatasetSD_total[xx]

                    # input parameters
                    # if is a point, the system retrieve 3 x 3 pixels and
                    # extrapolate the 1,1
                    if (arrayParams["operation"] == "POINT"):
                        # return cell 3 * 3
                        arrayParams["txtLLon"] = arrayParams[
                            "originaltxtLLon"] - (arrayVDataset["xsize"] * 1.6)
                        arrayParams["txtLLat"] = arrayParams[
                            "originaltxtLLat"] - (arrayVDataset["ysize"] * 1.6)
                        arrayParams["txtRLon"] = arrayParams[
                            "originaltxtRLon"] + (arrayVDataset["xsize"] * 1.6)
                        arrayParams["txtULat"] = arrayParams[
                            "originaltxtULat"] + (arrayVDataset["ysize"] * 1.6)

                    # calculare width and height
                    widthValue = int(
                        ((arrayParams["txtRLon"] - arrayParams["txtLLon"]) /
                         arrayVDataset["xsize"]))
                    heightValue = int(
                        ((arrayParams["txtULat"] - arrayParams["txtLLat"]) /
                         arrayVDataset["ysize"]))

                    # minimun value
                    if (widthValue < 1):
                        widthValue = 1
                    if (heightValue < 1):
                        heightValue = 1
                    arrayParams["widthValue"] = widthValue
                    arrayParams["heightValue"] = heightValue

                    lngValue = ''
                    blnContinueDateLayer = 0
                    # verify if the dateset exists for the specific date
                    if (blnDebug == 1):
                        if (blnPrimaVoltaDebug == 1):
                            print arrayFName["dates_available"]
                            blnPrimaVoltaDebug = 0

                    strTempDateOrUp = _replaceDateFormat(
                        strTempDateOr, arrayFName["dateFormat"])
                    # print strTempDateOrUp
                    # print strTempDateOrUp

                    blnContinueDateLayer = _verifyIfDateIsAvailable(
                        strTempDateOrUp, strLayer, arrayFName["type"],
                        arrayFName["dates_available"], arrayFName["fixed"],
                        arrayFName["dateFormat"])
                    arrayTemp = arrayFName["formula"].split('_')

                    if (blnContinueDateLayer == 1):
                        if (blnDebug == 1):
                            print "date ok: "
                            print strTempDateOrUp
                        arrayParams["strCoverage"] = strLayer
                        #======================================================
                        # SHAPEFILE (mosaic or dataset)
                        #======================================================
                        if ((arrayFName["type"] == "s_m")
                                or (arrayFName["type"] == "s_d")):

                            strResult_var = ""
                            if (arrayFName["type"] == "s_d"):
                                # no data to save if it is a dataset
                                arrayParams["strDate"] = ''
                            else:
                                # save info for date
                                pos = arrayFName["fixed"].find("_")
                                if (pos == 4):
                                    strTestDate = str(strTempDate)[0:pos]
                                else:
                                    strTestDate = str(
                                        strTempDate[:10]).replace("-", "")

                                # strTempNameOriginal=arrayFName["name"]
                                arrayParams["strDate"] = strTestDate
                            #==================================================
                            # QUERY FEATURE (WFS)
                            #==================================================
                            result = queryFeature(arrayFName, arrayVDataset,
                                                  arrayParams, lngDay,
                                                  arrayFName["returnid"], '')
                            strResult_var = ''
                            if (result["result"] == 1):
                                strResult_var = result["value"]
                            lngValue = ''
                            if (strResult_var != ""):
                                lngValue = float(strResult_var)
                        #======================================================
                        # SHAPEFILE (mosaic or dataset)
                        #======================================================
                        else:
                            #==================================================
                            # RASTER (mosaic or dataset)
                            #==================================================

                            if (arrayParams["operation"] == "POINT"
                                    or arrayParams["operation"] == "BOX"):
                                #==============================================
                                # COVERAGE (WCS)
                                #==============================================

                                data = returnCoverageMeanValue(
                                    arrayParams["operation"], strTempDate,
                                    arrayParams, arrayFName, arrayVDataset, '',
                                    0)

                            else:
                                #==============================================
                                # CROP COVERAGE (WPS)
                                #==============================================

                                data = returnCropCoverageMeanValue(
                                    arrayParams["operation"], strTempDate,
                                    arrayParams, arrayFName, arrayVDataset, '',
                                    0)

                            # print data
                            strResult_var = str(
                                _returnMeanValue(arrayParams["operation"],
                                                 data, arrayVDataset,
                                                 arrayFName["formula"], '', 0,
                                                 arrayFName["colorsScale"]))

                            # translate the value
                            lngValue = _returnTransformMean(
                                strResult_var, arrayFName, arrayVDataset, 0)

                            if (blnDebug == 1):
                                print data

                                print strResult_var
                                print lngValue
                        #======================================================
                        # RASTER (mosaic or dataset)
                        #======================================================

                        if (blnDebug == 1):
                            print strResult_var
                            print lngValue
                        lngValueDev = ''
                        strResult_dev = ''
                        if (arrayTemp[0] != "HISTOGRAM"):
                            # if the dataset is a bar, the SD doesn't work
                            # se e'un bar non funziona la standard deviation
                            # quindi inutile recuperare il valore
                            if (arrayParams["blnDeviation"] == 1):
                                if (blnDebug == 1):
                                    print "calcolo deviation"
                                #==============================================
                                # RASTER (mosaic or dataset)
                                #==============================================
                                if ((arrayFName["type"] != "s_m")
                                        and (arrayFName["type"] != "s_d")):
                                    # print arrayFName_deviation
                                    if arrayFName_deviation:
                                        if (blnDebug == 1):
                                            print "STANDARD deviation"
                                        #======================================
                                        # STANDARD DEVIATION
                                        #======================================
                                        arrayParams[
                                            "strCoverage"] = arrayFName['sd']

                                        blnContinueDateLayer = _verifyIfDateIsAvailable(
                                            strTempDateOrUp,
                                            arrayParams["strCoverage"],
                                            arrayFName_deviation["type"],
                                            arrayFName_deviation[
                                                "dates_available"],
                                            arrayFName_deviation["fixed"],
                                            arrayFName_deviation["dateFormat"])

                                        # verify if the layername exists in
                                        # getCapabilities
                                        if (blnContinueDateLayer == 1):

                                            if (arrayParams["operation"]
                                                    == "POINT"
                                                    or arrayParams["operation"]
                                                    == "BOX"):
                                                #==============================
                                                # COVERAGE (WCS)
                                                #==============================
                                                data = returnCoverageMeanValue(
                                                    arrayParams["operation"],
                                                    strTempDate, arrayParams,
                                                    arrayFName_deviation,
                                                    arrayVDataset_deviation,
                                                    strResult_var, 0)
                                            else:
                                                #==============================
                                                # CROP COVERAGE (WPS)
                                                #==============================
                                                data = returnCropCoverageMeanValue(
                                                    arrayParams["operation"],
                                                    strTempDate, arrayParams,
                                                    arrayFName_deviation,
                                                    arrayVDataset_deviation,
                                                    strResult_var, 0)

                                            strResult_dev = str(
                                                _returnMeanValue(
                                                    arrayParams["operation"],
                                                    data,
                                                    arrayVDataset_deviation,
                                                    arrayFName_deviation[
                                                        "formula"],
                                                    strResult_var, 0,
                                                    arrayFName["colorsScale"]))

                                            lngValueDev = _returnTransformMean(
                                                strResult_dev,
                                                arrayFName_deviation,
                                                arrayVDataset_deviation, 1)

                                            if (blnDebug == 1):
                                                print data
                                                print strResult_dev
                                                print lngValueDev

                                            # exit(0);
                                    else:
                                        if (blnDebug == 1):
                                            print "SPATIAL deviation"

                                        #======================================
                                        # SPATIAL DEVIATION
                                        #======================================
                                        if (arrayTemp[0] != "STEPCHART"):

                                            # if (arrayParams["operation"]=="BOX"):
                                            # ========================================================================================
                                            # COVERAGE (WCS)
                                            # ========================================================================================
                                            #   data=returnCoverageMeanValue(arrayParams["operation"],strTempDate,arrayParams,arrayFName,arrayVDataset,strResult_var,1)
                                            # else:
                                            #   if (arrayParams["operation"]=="SHAPE"):
                                            # ========================================================================================
                                            # CROP COVERAGE (WPS)
                                            # ========================================================================================
                                            # data=returnCropCoverageMeanValue(arrayParams["operation"],strTempDate,arrayParams,arrayFName,arrayVDataset,strResult_var,1)
                                            if (arrayParams["operation"]
                                                    == "SHAPE"
                                                    or arrayParams["operation"]
                                                    == "BOX"):
                                                strResult_dev = str(
                                                    _returnMeanValue(
                                                        arrayParams[
                                                            "operation"], data,
                                                        arrayVDataset,
                                                        arrayFName["formula"],
                                                        strResult_var, 1,
                                                        arrayFName[
                                                            "colorsScale"]))
                                                lngValueDev = _returnTransformMean(
                                                    strResult_dev, arrayFName,
                                                    arrayVDataset, 1)
                                                if (blnDebug == 1):
                                                    print data
                                                    print strResult_dev
                                                    print strResult_var
                                                    print lngValueDev
                                #==============================================
                                # RASTER (mosaic or dataset)
                                #==============================================

                        if (arrayTemp[0] == "STEPCHART"):
                            if (lngValueDev == ""):
                                if (lngValue == ""):
                                    if (strPrevStepChart != ""):
                                        lngValue = strPrevStepChart
                                    else:
                                        lngValue = strEmptyString

                                lngValue = str(lngValue).replace(",", ",,")
                                strPrevStepChart = str(lngValue)
                                # add the standard deviation to null values for
                                # each value
                    else:
                        lngValueDev = ''
                        lngValue = ''
                        if (arrayTemp[0] == "STEPCHART"):
                            '''
                            lngValue=strEmptyString;
                            if (arrayParams["blnDeviation"]==1):
                                lngValue=str(lngValue).replace(",", ",,");
                            lngValueDev=''
                            '''
                            lngValue = strPrevStepChart
                            if (strPrevStepChart == ""):
                                lngValue = strEmptyString
                                if (arrayParams["blnDeviation"] == 1):
                                    lngValue = str(lngValue).replace(",", ",,")
                            lngValueDev = ''

                    strLine += str(lngValue) + ',' + str(lngValueDev) + ','
                # save the line
                strLine = strLine[:-1] + '\n'
                if (blnDebug == 1):
                    print strLine
                    exit(0)
                # save the data into the .csv
                _formatCsvFile(strLine, arrayParams["strCSVFile"])
                # exit(0);
    # return the http filename
    # strHttpFilename=_returnHttpFilename(arrayParams["strCSVFile"]);
    response['result'] = 1
    response['error'] = ''
    # return
    print(json.JSONEncoder().encode(response))