Source code for ecoscope.analysis.astronomy
import warnings
import astroplan
import astropy.coordinates
import astropy.time
import numpy as np
import pyproj
[docs]
def to_EarthLocation(geometry):
"""
Location on Earth, initialized from geocentric coordinates.
Parameters
----------
geometry: Geometry
GeoDataFrame's geometry column
Returns
-------
astropy.coordinates.EarthLocation.
"""
geometry = geometry.to_crs(4326)
trans = pyproj.Transformer.from_proj(
proj_from="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs",
proj_to="+proj=geocent +ellps=WGS84 +datum=WGS84 +units=m +no_defs",
)
return astropy.coordinates.EarthLocation.from_geocentric(
*trans.transform(xx=geometry.x, yy=geometry.y, zz=np.zeros(geometry.shape[0])), unit="m"
)
[docs]
def is_night(geometry, time):
with warnings.catch_warnings():
warnings.filterwarnings("ignore", "Geometry is in a geographic CRS.", UserWarning)
return astroplan.Observer(to_EarthLocation(geometry.centroid)).is_night(time)