besselian2shape
Generate ESRI Shapefiles and Google Earth KML/KMZ files describing a solar eclipse's visibility from NASA's Besselian elements dataset: the central line, the umbral/antumbral path of totality or annularity, and the penumbral region from which at least a partial eclipse is visible.
Besselian elements are downloaded once from NASA's Five Millennium Canon of Solar Eclipses and cached locally.
Installation
pip install besselian2shape
Requires Python 3.11+.
CLI usage
besselian2shape YEAR MONTH DAY [options]
YEAR uses astronomical numbering for BCE dates (1 BCE is year 0, 2 BCE
is year -1, etc.).
# Shapefiles (default) for the 2024 total eclipse, written to ./eclipse_2024-04-08
besselian2shape 2024 4 8
# KMZ file in a custom directory
besselian2shape 2017 8 21 -o out/ -f kmz
# Every format at once
besselian2shape 2024 10 2 -f all
Options:
| Flag | Default | Description |
|---|---|---|
-o, --output DIR |
./eclipse_YYYY-MM-DD |
Output directory |
-f, --format {shp,kml,kmz,all} |
shp |
Output format; may be repeated |
--step-minutes MINUTES |
0.5 |
Time resolution for sampling the central line and umbral path |
--penumbral-resolution DEGREES |
0.25 |
Grid resolution for the penumbral visibility boundary |
--penumbral-step-minutes MINUTES |
1.5 |
Time step for the penumbral visibility raster scan |
--refresh-cache |
Re-download the Besselian elements dataset even if already cached |
Negative-year (BCE) example:
besselian2shape -1999 6 12 -f kml
Shapefile output writes up to three layers into the output directory:
penumbral_path.shp-- polygon (all eclipse types)central_line.shp-- polyline (total/annular/hybrid only)umbral_path.shp-- polygon (total/annular/hybrid only)
KML/KMZ output writes a single file (eclipse.kml or eclipse.kmz)
containing the same layers as separate placemarks.
Python API
from besselian2shape import generate_eclipse_shapefiles, generate_eclipse_kml
# Shapefiles
written = generate_eclipse_shapefiles(2024, 4, 8, "output_dir")
# {"penumbral_path": Path(...), "central_line": Path(...), "umbral_path": Path(...)}
# KML/KMZ (format is inferred from the output path's suffix)
generate_eclipse_kml(2024, 4, 8, "output_dir/eclipse.kmz")
Both functions raise LookupError if no eclipse occurred on the given
date. Both accept the same optional keyword arguments:
csv_path: use a specific Besselian elements CSV instead of the cached download.step_minutes(default0.5): sampling density along the central line/umbral path.penumbral_resolution_deg/penumbral_step_minutes(defaults0.25,1.5): grid resolution and time step for the penumbral coverage raster -- lower values are more accurate but slower.elements: an already-looked-upBesselianElementsinstance, to avoid parsing the CSV twice when generating more than one format for the same eclipse:
from besselian2shape import find_by_date, generate_eclipse_shapefiles, generate_eclipse_kml
e = find_by_date(2024, 4, 8)
generate_eclipse_shapefiles(2024, 4, 8, "output_dir", elements=e)
generate_eclipse_kml(2024, 4, 8, "output_dir/eclipse.kmz", elements=e)
Other public functions
find_by_date(year, month, day, csv_path=None) -> BesselianElementsload_all(csv_path=None) -> list[BesselianElements]download_besselian_csv(force=False) -> Pathget_cache_dir() -> Pathget_cached_csv_path() -> Path
BesselianElements is a frozen dataclass holding one eclipse's metadata
(date, Saros number, gamma, magnitude, path width, etc.) and its raw
Besselian polynomial coefficients (x0..x3, y0..y3, d0..d2,
mu0..mu2, l10..l12, l20..l22, tan_f1, tan_f2, t0, tmin,
tmax), as published in NASA's dataset.
Development
uv sync
uv run pytest
Metadata
Release files for besselian2shape 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| besselian2shape-0.1.0.tar.gz | 24.2 kB | Without provenance | Details for besselian2shape-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| besselian2shape-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for besselian2shape-0.1.0-py3-none-any.whl |
Total release size: 53.6 kB
Release files / besselian2shape-0.1.0.tar.gz
| Download URL | besselian2shape-0.1.0.tar.gz |
|---|---|
| Size | 24.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
868ab61fabf7461b19b11507cba1f6e1e0dbd31fdb0d25993cfc5708c186902e
|
|
BLAKE2b-256 checksum How to use checksums |
ca16cd75a717ed82a8ced6d3bf2faf6197ef4eec69c9b78d00f6c4d0ed4a61e1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.11
|
Release files / besselian2shape-0.1.0-py3-none-any.whl
| Download URL | besselian2shape-0.1.0-py3-none-any.whl |
|---|---|
| Size | 29.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e2f3e3b375046f87bf2249ef2a70b49fe78d587b44797c622cfccf571e3a1643
|
|
BLAKE2b-256 checksum How to use checksums |
4bdab0c06c5c94fcaf2237b774cadcdc207a62a2991b163219c7a5dc3f667d26
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.11
|
Security for besselian2shape 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.