Source code for pyisd.misc._misc

from typing import Iterable, Optional, Tuple, Union

import pandas as pd
import pyproj


[docs] def daterange(date_start, date_end=None, freq="h") -> pd.DatetimeIndex: """ Creates a date range with a given frequency between `date_start` and `date_end`. Args: date_start (int or str): The start date as an integer in "yyyymmdd" format or as a string. date_end (int or str or None, optional): The end date as an integer in "yyyymmdd" format or as a string. If `None`, the end date will equal the start date. Default: None. freq (str, optional): The frequency of the dates in the range. For example, 'H' for hours, 'D' for days, 'M' for months, etc. Default: 'H'. Returns: pd.DatetimeIndex: A DatetimeIndex object containing the dates in the specified range with the given frequency. Examples: .. code-block:: python daterange(20220306, 20220307, freq='D') >>> DatetimeIndex(['2022-03-06', '2022-03-07'], dtype='datetime64[ns]', freq='D') .. code-block:: python daterange(20220306) >>> DatetimeIndex(['2022-03-06 00:00:00', '2022-03-06 01:00:00', ...], dtype='datetime64[ns]', freq='h') """ start = pd.to_datetime(str(date_start)) end = start if date_end is None else pd.to_datetime(str(date_end)) return pd.date_range(start, end + pd.Timedelta(hours=24), freq=freq, inclusive="left")
[docs] def proj( x: Union[float, int, Iterable[float]], y: Union[float, int, Iterable[float]], proj_in: Union[str, int, pyproj.CRS], proj_out: Union[str, int, pyproj.CRS], ) -> Tuple[Iterable[float], Iterable[float]]: """ Projects coordinates from one coordinate system to another. Args: x (Union[float, int, Iterable[float]]): x-coordinates to project. y (Union[float, int, Iterable[float]]): y-coordinates to project. proj_in (Union[str, int, pyproj.CRS]): Input coordinate system. proj_out (Union[str, int, pyproj.CRS]): Output coordinate system. Returns: Tuple[Iterable[float], Iterable[float]]: Projected coordinates (x, y). """ t = pyproj.Transformer.from_crs(crs_from=to_crs(proj_in), crs_to=to_crs(proj_out), always_xy=True) return t.transform(x, y)
[docs] def to_crs(proj: Union[str, int, pyproj.CRS, pyproj.Proj, None]) -> Optional[pyproj.CRS]: """ Converts a coordinate system into a pyproj.CRS object. Args: proj (Union[str, int, pyproj.CRS, pyproj.Proj, None]): The coordinate system to convert. Returns: Optional[pyproj.CRS]: The pyproj.CRS object corresponding to the specified coordinate system. Example: .. code-block:: python to_crs('EPSG:4326') >>> <pyproj.CRS ...> to_crs(27572) >>> <pyproj.CRS ...> """ if isinstance(proj, (int, str)): return pyproj.CRS(proj) if isinstance(proj, pyproj.CRS): return proj if isinstance(proj, pyproj.Proj): return proj.crs if proj is None: return None raise TypeError("The format of `proj` is not recognized!")