def main(): argDict = mapDict(argv, usage) if "-d" in argDict and "-p" in argDict and "-r" in argDict \ and "-s" in argDict and "-e" in argDict: datasourceName = argDict["-d"].capitalize() productName = argDict["-p"] region = argDict["-r"] start = argDict["-s"] end = argDict["-e"] datasourceConfig = { "productName": productName , "region": region , "start": start , "end": end } bus = loader.getBus() datasource = loader.getDatasource(datasourceName,datasourceConfig) for message in datasource.generateMessages(): bus.publishMessage(datasourceName, message) else: exit(usage)
def getQualityValues(self, longitude, latitude): datasourceInstance = loader.getDatasource(self.quality_layer) qvalues = utils.oneArray( datasourceInstance.lookup( str({ "type": "Point", "coordinates": [longitude, latitude] }))["values"]) qvalues = [int(i) for i in qvalues] return qvalues
def lockup(self, longitude, latitude): result = [] for i in xrange(0, len(self.start_date)): datasourceInstance = loader.getDatasource(self.layers[i]) datasourceInstance.start_date = self.start_date[i] if self.end_date[i] == 'NOW': datasourceInstance.end_date = utils.isNow(self.end_date[i]) else: datasourceInstance.end_date = self.end_date[i] timeserieData = datasourceInstance.lockup(longitude, latitude) for j in timeserieData: result.append(j) return result
def lookup(self, geoJsonGeometry, mode=None): result = {"values":[]}; for i in xrange(0, len(self.start_date)): datasourceInstance = loader.getDatasource(self.layers[i]) datasourceInstance.start_date = self.start_date[i] if self.end_date[i] == 'NOW': datasourceInstance.end_date = utils.isNow(self.end_date[i]) else: datasourceInstance.end_date = self.end_date[i] timeserieData = datasourceInstance.lookup(geoJsonGeometry, mode) if "series" not in result: result["series"] = timeserieData["series"]; result["values"].extend(timeserieData["values"]); return result
def lookup(self, geoJsonGeometry, mode=None): result = { "values": [] } for i in xrange(0, len(self.start_date)): datasourceInstance = loader.getDatasource(self.layers[i]) datasourceInstance.start_date = self.start_date[i] if self.end_date[i] == 'NOW': datasourceInstance.end_date = utils.isNow(self.end_date[i]) else: datasourceInstance.end_date = self.end_date[i] timeserieData = datasourceInstance.lookup(geoJsonGeometry, mode) if "series" not in result: result["series"] = timeserieData["series"] result["values"].extend(timeserieData["values"]) return result
def run(layerId, longitude, latitude): datasourceInstance = loader.getDatasource(layerId) timeserieData = datasourceInstance.lockup(longitude, latitude) values = utils.oneArray(timeserieData) position = 1 series = [{'id': 'original', 'label': 'Valores originais', 'position': 1}]; for filter in loader.getFilters(layerId): filteredValues = filter.run(values, longitude, latitude); if len(filteredValues) == len(values): position += 1 series.append({ 'id': filter.id, 'label': filter.label, 'position': position }) utils.joinArray(timeserieData, filteredValues) return { 'series': series, 'values': timeserieData }
def time_series(layerId, mode, geoJsonGeometry): datasourceInstance = loader.getDatasource(layerId) timeserieData = datasourceInstance.lookup(geoJsonGeometry, mode) return timeserieData;
def trend(layerId, startYear, endYear, interpolation, groupData, timeChange, timeChangeUnits, geoJsonGeometry): #Obtem a série datasourceInstance = loader.getDatasource(layerId) timeserieData = datasourceInstance.lookup(geoJsonGeometry, mode="series") #Obtem as datas datesStr = utils.oneArray(timeserieData["values"], 0) #Obtem os valores entre os anos startYear e endYear clippedValues = bfast_utils.clipValuesByYear(startYear, endYear, timeserieData["values"], datesStr) values = clippedValues['values'] dates = clippedValues['dates'] startDate = dates[0] endDate = dates[-1] #Encontra o indice do filtro(se houver) e do bfast filters = loader.getFilters(layerId) bfastIndex = utils.findIndexByAttribute(filters, 'id', 'Bfast') # O filtro já foi calculado na datasource interpolation = interpolation if interpolation != "original" else 'STRING_NOT_FOUND'; interpolationIndex, interpolationPos = next(((i, item['position']) for i, item in enumerate(timeserieData["series"]) if item['id'] == interpolation), (-1, -1)) #Inicializa preparação do objeto de resposta series = [{'id':'Bfast', 'label':'BFAST', 'position':1, 'type':'trend'}] #Se há filtro selecionado, executa e adiciona ao objeto de resposta if interpolationPos != -1: values = utils.oneArray(timeserieData["values"], interpolationPos) series.append({'id':timeserieData["series"][interpolationIndex]["id"], 'label': timeserieData["series"][interpolationIndex]["label"], 'position': 2, 'type': 'filter'}) else: series.append({'id':'original', 'label':'Valores Originais', 'position':2, 'type':'original'}) #Agrupa os valores groupedData = bfast_utils.groupData(dates, values, groupData) values = groupedData['values'] frequency = groupedData['frequency'] dates = groupedData['dates'] #Calcula o valor do parâmetro h(minimal segment size) para o bfast minimalSegmentSize = bfast_utils.calculateMinimalSegmentSize(len(values), timeChange, timeChangeUnits, frequency) #Executa o BFAST result = [] if bfastIndex != -1: result = filters[bfastIndex].run(values, None, None, minimalSegmentSize, frequency, startDate, endDate) else: raise IndexError("Bfast filter could not be found.") #Acrescenta ao resultado as datas, os valores da tendência e os valores originais (agrupados ou não) datesList = [[i] for i in dates] utils.joinArray(datesList, result) result = datesList utils.joinArray(result, values) return { 'series': series, 'values': result }
def getQualityValues(self, longitude, latitude): datasourceInstance = loader.getDatasource(self.quality_layer) return utils.oneArray( datasourceInstance.lockup(longitude, latitude) )
def time_series(layerId, mode, geoJsonGeometry): datasourceInstance = loader.getDatasource(layerId) timeserieData = datasourceInstance.lookup(geoJsonGeometry, mode) return timeserieData
def trend(layerId, startYear, endYear, interpolation, groupData, timeChange, timeChangeUnits, geoJsonGeometry): # Obtem a série datasourceInstance = loader.getDatasource(layerId) timeserieData = datasourceInstance.lookup(geoJsonGeometry, mode="series") # Obtem as datas datesStr = utils.oneArray(timeserieData["values"], 0) # Obtem os valores entre os anos startYear e endYear clippedValues = bfast_utils.clipValuesByYear(startYear, endYear, timeserieData["values"], datesStr) values = clippedValues['values'] dates = clippedValues['dates'] startDate = dates[0] endDate = dates[-1] # Encontra o indice do filtro(se houver) e do bfast filters = loader.getFilters(layerId) bfastIndex = utils.findIndexByAttribute(filters, 'id', 'Bfast') # O filtro já foi calculado na datasource interpolation = interpolation if interpolation != "original" else 'STRING_NOT_FOUND' interpolationIndex, interpolationPos = next( ((i, item['position']) for i, item in enumerate(timeserieData["series"]) if item['id'] == interpolation), (-1, -1)) # Inicializa preparação do objeto de resposta series = [{ 'id': 'Bfast', 'label': 'BFAST', 'position': 1, 'type': 'trend' }] # Se há filtro selecionado, executa e adiciona ao objeto de resposta if interpolationPos != -1: values = utils.oneArray(timeserieData["values"], interpolationPos) series.append({ 'id': timeserieData["series"][interpolationIndex]["id"], 'label': timeserieData["series"][interpolationIndex]["label"], 'position': 2, 'type': 'filter' }) else: series.append({ 'id': 'original', 'label': 'Valores Originais', 'position': 2, 'type': 'original' }) # Agrupa os valores groupedData = bfast_utils.groupData(dates, values, groupData) values = groupedData['values'] frequency = groupedData['frequency'] dates = groupedData['dates'] # Calcula o valor do parâmetro h(minimal segment size) para o bfast minimalSegmentSize = bfast_utils.calculateMinimalSegmentSize( len(values), timeChange, timeChangeUnits, frequency) # Executa o BFAST result = [] if bfastIndex != -1: result = filters[bfastIndex].run(values, None, None, minimalSegmentSize, frequency, startDate, endDate) else: raise IndexError("Bfast filter could not be found.") # Acrescenta ao resultado as datas, os valores da tendência e os valores originais (agrupados ou não) datesList = [[i] for i in dates] utils.joinArray(datesList, result) result = datesList utils.joinArray(result, values) return {'series': series, 'values': result}