AetherPy
Python library for very fast and flexible terrain visibility analysis.
Supports real GeoTIFF DEMs, LOS, viewsheds (including constrained sectors, curvature correction), complex multiview observer calculation, and more. It also provides the tools for finding the optimal observer localization.
🚀 Features
- Real GeoTIFF support: arbitrary CRS, resolution, out‑of‑core tiling
- High‑performance LOS & viewshed: single and multi‑observer
- Constrained analysis: range, azimuth sector, elevation angle
- Earth‑curvature correction (k‑factor)
- Coverage metrics: show which area can be seen from a target
📦 Installation
# From PyPI
pip install aetherpy
# Or from GitHub
pip install git+https://github.com/SchmidL/aetherpy.git
📝 Quickstart
from aetherpy.data.loader import DEM
from aetherpy.core import is_visible, viewshed_sweep
from aetherpy.io.plotting import plot_viewshed
# load a GeoTIFF DEM (or pass a NumPy array)
dem = DEM("swisssurface3d-raster_2023_2600-1199_0.5_2056_5728.tif")
# define your observer in map coords (x, y) or pixel coords
lon, lat = 2600410.30, 1199452.00
obs_rc = dem.index(lon, lat)
# quick LOS check to a target
lon2, lat2 = 2600754.88, 1199416.56
tgt_rc = dem.index(lon2, lat2)
print("Visible?", is_visible(dem, obs_rc, tgt_rc, obs_h=1.75))
# compute a 5 km viewshed at 1.75 m observer height
vs = viewshed_sweep(dem, obs_rc, obs_h=1.75, max_dist=500.0,interpolation="bilinear")
# visualize
plot_viewshed(dem, vs, observer=obs_rc, hillshade=True)
# Save Boolean mask as GeoTIFF
save_raster("viewshed.tif",vs,dem)
⚖️ License
AetherPy is offered under a dual‑license:
- MIT License – Free for:
- Personal, academic, and non‑commercial use
- Companies with annual revenue ≤1000000USD
- Commercial License – Required for:
- Any organization or individual with annual revenue >1000000USDUSD
- Contact us to obtain terms and pricing.
Please see LICENSE‑MIT for details of the MIT terms, or contact us for commercial licensing.
Threshold is a guideline; please get in touch if your use case is unclear.
☕ Support this project
I maintain aetherpy in my free time. If you find it valuable—especially in a commercial setting—please consider supporting my work:
Or contact me to discuss sponsorship, custom features, or commercial collaboration:
🔗 Links
- Issue Tracker: https://github.com/yourname/aetherpy/issues
Metadata
Release files for aetherpy 1.0.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 | |
|---|---|---|---|
| aetherpy-1.0.0.tar.gz | 16.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aetherpy-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 34.4 kB
Release files / aetherpy-1.0.0.tar.gz
| Download URL | aetherpy-1.0.0.tar.gz |
|---|---|
| Size | 16.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
59c267e589503452ff367acd379b52e7bc87a99e1f7e8b0e948f8c5a5cc979a4
|
|
BLAKE2b-256 checksum How to use checksums |
4abe0d0189bfe09d01ed72b77f6af9cfd210037eca4efe1cd52705a6fe68b99d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / aetherpy-1.0.0-py3-none-any.whl
| Download URL | aetherpy-1.0.0-py3-none-any.whl |
|---|---|
| Size | 18.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1cb31ee40e76f5c1fe0687cd5450e4e185c979cc831e9436851efff9ca0f8754
|
|
BLAKE2b-256 checksum How to use checksums |
b15b79ab440d520ae53f788f224f31af3f21866cb4bb449f8f0f5b1dc94a1d75
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|