Esempio n. 1
0
def get_weather():
    dcid = request.args.get('dcid')
    prop = request.args.get('prop')
    if not dcid:
        flask.abort('Missing url parameter "dcid"', 400)
    if not prop:
        flask.abort('Missing url parameter "prop"', 400)

    query_string = ('SELECT ?date ?mean ?unit '
                    'WHERE {{'
                    ' ?o typeOf WeatherObservation .'
                    ' ?o observedNode {dcid} .'
                    ' ?o measuredProperty {prop} .'
                    ' ?o observationDate ?date .'
                    ' ?o unit ?unit .'
                    ' ?o meanValue ?mean .}}').format(dcid=dcid, prop=prop)

    _, rows = dc.query(query_string)

    observations = []
    for row in rows:
        date = row['cells'][0]['value']
        if date < '2000':
            continue
        text = 'mean {}: {} {}'.format(prop, row['cells'][1]['value'],
                                       row['cells'][2]['value'])
        observations.append({
            'measuredProperty': prop,
            'observationDate': date,
            'meanValue': row['cells'][1]['value'],
            'unit': row['cells'][2]['value'],
            'text': text,
        })
    return json.dumps(observations)
Esempio n. 2
0
def get_observation_id():
    """Returns the observation node dcid for a combination of
    predicates: observedNodeLocation, statisticalVariable, date,
    measurementMethod optional), observationPeriod (optional)"""
    place_id = request.args.get("place")
    if not place_id:
        return Response(json.dumps("error: must provide a place field"),
                        400,
                        mimetype='application/json')
    stat_var_id = request.args.get("statVar")
    if not stat_var_id:
        return Response(json.dumps("error: must provide a statVar field"),
                        400,
                        mimetype='application/json')
    date = request.args.get("date", "")
    if not date:
        return Response(json.dumps("error: must provide a date field"),
                        400,
                        mimetype='application/json')
    request_mmethod = request.args.get("measurementMethod", NO_MMETHOD_KEY)
    request_obsPeriod = request.args.get("obsPeriod", NO_OBSPERIOD_KEY)
    sparql_query = get_sparql_query(place_id, stat_var_id, date)
    result = ""
    (_, rows) = dc.query(sparql_query)
    for row in rows:
        cells = row.get('cells', [])
        if len(cells) != 3:
            continue
        dcid = cells[0].get('value', '')
        mmethod = cells[1].get('value', NO_MMETHOD_KEY)
        obsPeriod = cells[2].get('value', NO_OBSPERIOD_KEY)
        if mmethod == request_mmethod and obsPeriod == request_obsPeriod:
            result = dcid
            break
    return Response(json.dumps(result), 200, mimetype='application/json')
Esempio n. 3
0
def get_observation_ids():
    """Returns a mapping of date to observation node dcid for a combination of predicates:
    observedNodeLocation, statisticalVariable, measurementMethod (optional), observationPeriod (optional)"""
    place_id = request.args.get("place")
    if not place_id:
        return Response(json.dumps("error: must provide a place field"),
                        400,
                        mimetype='application/json')
    stat_var_id = request.args.get("statVar")
    if not stat_var_id:
        return Response(json.dumps("error: must provide a statVar field"),
                        400,
                        mimetype='application/json')
    measurement_method = request.args.get("measurementMethod", "")
    observation_period = request.args.get("obsPeriod", "")
    measurement_method_triple = ""
    if measurement_method:
        measurement_method_triple = f"""?svObservation measurementMethod {measurement_method} ."""
    observation_period_triple = ""
    if observation_period:
        observation_period_triple = f"""?svObservation observationPeriod {observation_period} ."""
    sparql_query = '''
        SELECT ?dcid ?obsDate
        WHERE {{ 
            ?svObservation typeOf StatVarObservation .
            ?svObservation variableMeasured {} . 
            ?svObservation observationAbout {} .
            ?svObservation dcid ?dcid .
            ?svObservation observationDate ?obsDate .
            {}
            {}
        }}
    '''.format(stat_var_id, place_id, measurement_method_triple,
               observation_period_triple)
    result = ""
    (_, rows) = dc.query(sparql_query)
    result = {}
    for row in rows:
        cells = row.get('cells', [])
        if len(cells) != 2:
            continue
        obsDate = cells[1].get('value', '')
        dcid = cells[0].get('value', '')
        result[obsDate] = dcid
    return Response(json.dumps(result), 200, mimetype='application/json')