Пример #1
0
def fbp(config, service : grid_capnp.Grid):
    conman = common.ConnectionManager()
    inp = conman.try_connect(config["in_sr"], cast_as=common_capnp.Channel.Reader, retry_secs=1)
    outp = conman.try_connect(config["out_sr"], cast_as=common_capnp.Channel.Writer, retry_secs=1)

    try:
        if inp and outp and service:
            while True:
                in_msg = inp.read().wait()
                if in_msg.which() == "done":
                    break
                
                in_ip = in_msg.value.as_struct(common_capnp.IP)
                attr = common.get_fbp_attr(in_ip, config["from_attr"])
                if attr:
                    coord = attr.as_struct(geo_capnp.LatLonCoord)
                else:
                    coord = in_ip.content.as_struct(geo_capnp.LatLonCoord)

                val = service.closestValueAt(coord).wait().val

                out_ip = common_capnp.IP.new_message()
                if not config["to_attr"]:
                    out_ip.content = val
                common.copy_fbp_attr(in_ip, out_ip, config["to_attr"], val)
                outp.write(value=out_ip).wait()
            
            outp.write(done=None).wait()

    except Exception as e:
        print("ascii_grid.py ex:", e)

    print("ascii_grid.py: exiting FBP component")
def fbp(config, service: soil_capnp.Service):
    conman = common.ConnectionManager()
    inp = conman.try_connect(config["in_sr"],
                             cast_as=common_capnp.Channel.Reader,
                             retry_secs=1)
    outp = conman.try_connect(config["out_sr"],
                              cast_as=common_capnp.Channel.Writer,
                              retry_secs=1)
    mandatory = json.loads(config["mandatory"])

    try:
        if inp and outp and service:
            while True:
                in_msg = inp.read().wait()
                if in_msg.which() == "done":
                    break

                in_ip = in_msg.value.as_struct(common_capnp.IP)
                attr = common.get_fbp_attr(in_ip, config["from_attr"])
                if attr:
                    coord = attr.as_struct(geo_capnp.LatLonCoord)
                else:
                    coord = in_ip.content.as_struct(geo_capnp.LatLonCoord)

                profiles = service.profilesAt(coord, {
                    "mandatory": mandatory,
                    "onlyRawData": False
                }).wait().profiles
                if len(profiles) > 0:
                    profile = profiles[0]

                    out_ip = common_capnp.IP.new_message()
                    if not config["to_attr"]:
                        out_ip.content = profile
                    common.copy_fbp_attr(in_ip, out_ip, config["to_attr"],
                                         profile)
                    outp.write(value=out_ip).wait()

            outp.write(done=None).wait()

    except Exception as e:
        print("sqlite_soil_data_service.py ex:", e)

    print("dwd_germany_service.py: exiting FBP component")
Пример #3
0
try:
    if inp and outp:
        while True:
            msg = inp.read().wait()
            # check for end of data from in port
            if msg.which() == "done":
                break
            
            in_ip = msg.value.as_struct(common_capnp.IP)
            attr = common.get_fbp_attr(in_ip, config["from_attr"])
            if attr:
                from_coord = attr.as_struct(from_type)
            else:
                from_coord = in_ip.content.as_struct(from_type)
            to_coord = geo.transform_from_to_geo_coord(from_coord, config["to_name"])
            out_ip = common_capnp.IP.new_message()
            if not config["to_attr"]:
                out_ip.content = to_coord
            common.copy_fbp_attr(in_ip, out_ip, config["to_attr"], to_coord)
            outp.write(value=out_ip).wait()

        # close out port
        outp.write(done=None).wait()

except Exception as e:
    print("proj_transformer.py ex:", e)

print("proj_transformer.py: exiting run")

    if inp and outp:
        while True:
            msg = inp.read().wait()
            # check for end of data from in port
            if msg.which() == "done":
                break
            
            in_ip = msg.value.as_struct(common_capnp.IP)
            attr = common.get_fbp_attr(in_ip, config["from_attr"])
            if attr:
                data = attr.as_struct(climate_capnp.TimeSeriesData)
            else:
                data = in_ip.content.as_struct(climate_capnp.TimeSeriesData)

            csv = data_to_csv(data.header, data.data, data.startDate)
            
            out_ip = common_capnp.IP.new_message()
            if not config["to_attr"]:
                out_ip.content = csv
            common.copy_fbp_attr(in_ip, out_ip, config["to_attr"], csv)
            outp.write(value=out_ip).wait()

        # close out port
        outp.write(done=None).wait()

except Exception as e:
    print("climate_data_to_csv.py ex:", e)

print("climate_data_to_csv.py: exiting run")

Пример #5
0
def fbp(config : dict, service : ccdi.Service):
    conman = common.ConnectionManager()
    inp = conman.try_connect(config["in_sr"], cast_as=common_capnp.Channel.Reader, retry_secs=1)
    outp = conman.try_connect(config["out_sr"], cast_as=common_capnp.Channel.Writer, retry_secs=1)
    mode = config["mode"]

    def iso_to_cdate(iso_date_str):
        ds = iso_date_str.split("-")
        return {"year": int(ds[0]), "month": int(ds[1]), "day": int(ds[2])} 

    try:
        if inp and outp and service:
            dataset : csv_based.Dataset = service.getAvailableDatasets().wait().datasets[0].data
            while True:
                in_msg = inp.read().wait()
                if in_msg.which() == "done":
                    break

                in_ip = in_msg.value.as_struct(common_capnp.IP)
                attr = common.get_fbp_attr(in_ip, config["latlon_attr"])
                if attr:
                    coord = attr.as_struct(geo_capnp.LatLonCoord)
                else:
                    coord = in_ip.content.as_struct(geo_capnp.LatLonCoord)
                start_date = common.get_fbp_attr(in_ip, config["start_date_attr"]).as_text()
                end_date = common.get_fbp_attr(in_ip, config["end_date_attr"]).as_text()

                timeseries_p : csv_based.TimeSeries = dataset.closestTimeSeriesAt(coord).timeSeries
                timeseries = timeseries_p.subrange(iso_to_cdate(start_date), iso_to_cdate(end_date)).wait().timeSeries

                res = timeseries
                if mode == "sturdyref":
                    res = timeseries.save().wait()
                elif mode == "capability":
                    res = timeseries
                elif mode == "data":
                    res = climate_capnp.TimeSeriesData.new_message()
                    res.isTransposed = False
                    header = timeseries.header().header
                    se_date = timeseries.range()
                    resolution = timeseries.resolution().resolution
                    res.data = timeseries.data().wait().data
                    res.header = header
                    se_date = se_date
                    res.startDate = se_date.startDate
                    res.endDate = se_date.endDate
                    res.resolution = resolution

                #print(res.data().wait())
                out_ip = common_capnp.IP.new_message()
                if not config["to_attr"]:
                    out_ip.content = res
                common.copy_fbp_attr(in_ip, out_ip, config["to_attr"], res)
                outp.write(value=out_ip).wait()


            outp.write(done=None).wait()

    except Exception as e:
        print("dwd_germany_service.py ex:", e)

    print("dwd_germany_service.py: exiting FBP component")
Пример #6
0
                in_ip, config["latlon_attr"]).as_struct(geo_capnp.LatLonCoord)
            sowing_time = common.get_fbp_attr(
                in_ip, config["sowing_time_attr"]).as_text()
            harvest_time = common.get_fbp_attr(
                in_ip, config["harvest_time_attr"]).as_text()
            crop_id = common.get_fbp_attr(in_ip,
                                          config["crop_id_attr"]).as_text()

            utm = geo.transform_from_to_geo_coord(latlon, "utm32n")
            ilr_interpolate = ilr_seed_harvest_data[crop_id]["interpolate"]
            seed_harvest_cs = ilr_interpolate(
                utm.r, utm.h) if ilr_interpolate else None

            out_ip = common_capnp.IP.new_message()
            if ilr_interpolate is None or seed_harvest_cs is None:
                common.copy_fbp_attr(in_ip, out_ip)
                outp.write(value=out_ip).wait()
            else:
                ilr_dates = mgmt_capnp.ILRDates.new_message()

                seed_harvest_data = ilr_seed_harvest_data[crop_id]["data"][
                    seed_harvest_cs]
                if seed_harvest_data:
                    is_winter_crop = ilr_seed_harvest_data[crop_id][
                        "is-winter-crop"]

                    if sowing_time == "fixed":  # fixed indicates that regionally fixed sowing dates will be used
                        sowing_date = seed_harvest_data["sowing-date"]
                    elif sowing_time == "auto":  # auto indicates that automatic sowng dates will be used that vary between regions
                        sowing_date = seed_harvest_data["latest-sowing-date"]
                    else: