Nouvelles sources

Si vous voulez utiliser des données dans un format qui n’est pas encore supporté par Taqdir, vous pouvez créer une nouvelle classe de source pour ce format.

Il y a deux genres de source dans Taqdir, les sources générales (ذریعہ) et les sources ponctuelles (ذریعہ_نکتہ).

Les sources ponctuelles sont celles dont la position géographique doit être spécifié lors de leur initialisation. Un exemple d’une source ponctuelle serait la source pour les fichiers de DSSAT, dans lesquels sont spécifiés les coordonnées de l’endroit duquel proviennent les données. Au contraire, les sources générales peuvent contenir des données de multiples endroits, tel que la source pour Marksim, de laquelle peuvent être obtenues des données de tout le monde entier.

Lors du développement d’une nouvelle source, qu’elle soit générale ou ponctuelle, vous devrez implémenter une nouvelle fonction appelée _کوائف_بنانا().

Sources générales

En guise d’exemple, voici l’implémentation de la fonction _کوائف_بنانا() pour la source NASA.

class ناسا(ذریعہ):
    """
    یہ ذریعہ ناسا کے `صفحہ <https://power.larc.nasa.gov/cgi-bin/v1/DataAccess.py>`_ سے آوہوا مشاہدات کے کوائف پاتا ہیے۔
    """
    متغیرات = ['بارش', 'شمسی_تابکاری', 'درجہ_حرارت_زیادہ', 'درجہ_حرارت_کم', 'درجہ_حرارت_اوسط']

    def _کوائف_بنانا(خود, سے, تک, عرض, طول, بلندی, خاکے):
        try:
            ذریعہ_ناسا = NASAPowerWeatherDataProvider(latitude=عرض, longitude=طول, force_update=False)
        except (requests.exceptions.ConnectionError, KeyError, JSONDecodeError):
            return

        سے = max(ذریعہ_ناسا.first_date, سے)
        تک = min(ذریعہ_ناسا.last_date, تک)

        اعداد_پاندس = pd.DataFrame(columns=list(متغیرات), index=pd.period_range(سے, تک), dtype=float)

        ستون = {
            'بارش': 'RAIN',
            'شمسی_تابکاری': 'IRRAD',
            'درجہ_حرارت_زیادہ': 'TMAX',
            'درجہ_حرارت_کم': 'TMIN',
            'درجہ_حرارت_اوسط': 'TEMP'
        }

        for تاریخ in اعداد_پاندس.index:
            try:
                ناسا_دن = ذریعہ_ناسا(تاریخ.start_time)
            except WeatherDataProviderError:
                continue
            for س, س_ناسا in ستون.items():
                اعداد_پاندس.loc[تاریخ, س] = getattr(ناسا_دن, س_ناسا)

        اعداد_پاندس.شمسی_تابکاری *= 1e-6

        return اعداد_پاندس

Sources ponctuelles

Vous devez spécifier les coordonnées et le scénario d’une source ponctuelle lors de son instanciation. Pour cette raison, vous n’avez plus besoin de vous inquiéter de la date, de la latitude, de la longitude, de l’élévation ou du scénario dans votre implémentation de la méthode _کوائف_بنانا() et vous pourrez simplement retourner toutes les données disponibles. Taqdir les filtrera ensuite automatiquement pour vous.

En guise d’exemple, voici l’implémentation de la fonction _کوائف_بنانا() pour la source JSON.

class جےسن(ذریعہ_نکتہ):
    """
    جےسن (``.json``) مسل سے کوائف پڑھتا ہیے۔
    """

    def __init__(خود, مسل, عرض, طول, بلندی=None, خاکے=None, تبديل_عمودی_ستون=None):
        super().__init__(عرض, طول, بلندی, خاکے, تبديل_عمودی_ستون)

        if isinstance(مسل, str):
            ضابطہ = _ضابطہ_بندی(مسل)
            with open(مسل, 'r', encoding=ضابطہ) as م:
                خود.جےسن = json.load(م)
        else:
            خود.جےسن = مسل

    @property
    def متغیرات(خود):
        return [ب for ب in [خود._نام_عمودی_ستون(س) for س in خود.جےسن] if ب != 'تاریخ']

    def _کوائف_بنانا(خود, سے, تک, عرض, طول, بلندی, خاکے):

        کو = {خود._نام_عمودی_ستون(س): قیمت for س, قیمت in خود.جےسن.items()}
        اعداد_جےسن = pd.DataFrame(
            data={م: ق for م, ق in کو.items() if م != 'تاریخ'},
            index=خود._اشاریہ_پانڈا_بنانا(کو['تاریخ'])
        )
        return اعداد_جےسن