Index
Search & Discover
Find DEM, ortho, LiDAR, and oblique tiles by county, bbox, point+buffer in feet, or custom geometry. 13 products across 3 acquisition phases.
Download & Export
Concurrent downloads with resume. Estimate size before committing. Export to GeoTIFF, GeoPackage, Shapefile, GeoParquet, or LandXML.
Analyze & Visualize
Local terrain analysis — hillshade, slope, flood, contours, volume, profiles. Server-side TiTiler. Interactive notebook maps.
Provenance & QA
Source documentation for deliverables — acquisition dates, CRS, tile counts, coverage gaps, mixed-phase warnings. Built for survey-grade work.
ArcGIS Pro & QGIS
ArcGIS Pro toolbox with 5 tools. QGIS plugin coming in v2.1. No STAC knowledge required — county dropdown, click, go.
Engineering CRS
First-class EPSG:3089 support. Buffer in feet, corridor centerline search, polygon clips. Built for Kentucky surveyors and engineers.
Search, estimate, download¶
import abovepy
# Search by county — returns a SearchResult workflow object
result = abovepy.search(county="Franklin", product="dem_phase3")
print(result) # SearchResult('dem_phase3', 342 tiles, ~1710.0 MB)
# Check provenance for deliverable documentation
result.provenance()
# {'product': 'dem_phase3', 'acquisition_period': '2022–2025', ...}
# Validate data quality
result.validate()
# ['3 tile(s) have no acquisition date metadata.']
# Concurrent download (4 threads, resumable)
paths = result.download("./data")
# Mosaic into a single VRT
vrt = result.mosaic(output="frankfort.vrt")
Feet-based search & corridor buffers¶
# Point search with 1000-foot buffer (accurate in EPSG:3089)
result = abovepy.search(
point=(-84.85, 38.19), buffer_feet=1000, product="dem_phase3"
)
# Corridor search along a road centerline
from shapely.geometry import LineString
road = LineString([(-84.9, 38.2), (-84.8, 38.2)])
result = abovepy.search(geometry=road, buffer_feet=200, product="ortho_phase3")
# Phase comparison
phase2 = abovepy.search(county="Franklin", product="dem_phase2")
overlap = result.compare(phase2)
Supported Products¶
| Product | Resolution | Format | Phases |
|---|---|---|---|
| DEM | 5 ft / 2 ft | Cloud-Optimized GeoTIFF | 1, 2, 3 |
| Orthoimagery | 6 in / 3 in | Cloud-Optimized GeoTIFF | 1, 2, 3 |
| LiDAR Point Cloud | varies | LAZ / COPC | 1, 2, 3 |
| Oblique Imagery | 3 in | Cloud-Optimized GeoTIFF | 3 |
All data in EPSG:3089 (Kentucky Single Zone, US survey feet). abovepy accepts EPSG:4326 bounding boxes by default and converts transparently. No API keys or credentials required.
What abovepy is not¶
abovepy is not a general STAC client, tile server, or point cloud processor. It is a sharp-focus library for one dataset: KyFromAbove.
Use pystac-client for general STAC. Use TiTiler for tile serving. Use PDAL for heavy LiDAR workflows.