Building Height and Vertical Construction Progress from Satellite

Track structural rise and phase completion across active construction sites. Klarety runs shadow-length photogrammetry on Sentinel-2 optical time-series to estimate building heights and detect structural frame milestones. Real estate investors and construction lenders use reports to verify drawdown trigger conditions — no site visit, no manual GIS.

Vertical construction milestones tracked from imagery

Klarety AI
Klarety AI chat composer interface

Phase completion reports from satellite shadow data

Klarety agents run shadow photogrammetry on Sentinel-2 time-series and return phased height estimates and milestone completion scores.

Photogrammetry
Klarety satellite analysis output

Solar geometry-corrected shadow height estimation

Agents compute sun angle-corrected shadow vectors to estimate structural height and detect frame and cladding phase transitions.

GIS Output
Klarety AI map annotation overlay

Height rasters for construction lender GIS tools

Export building height rasters and phase classification polygons for real estate asset monitoring and lender drawdown GIS.

Sentinel-2 shadow photogrammetry for building height

Klarety agents select clear-sky Sentinel-2 acquisitions at known solar elevation angles, compute shadow length from dark-pixel connected components adjacent to bright rooftops, and convert to height estimates using the solar elevation tangent formula. Quarterly height progression is tracked to classify foundation, structural, and fit-out phases. Output is a height time-series CSV and phase classification.

Klarety AITrack building height at your construction site
analysis/building_height_photogrammetry.pyAgent code
python
import eeimport mathimport numpy as np
ee.Initialize()
# London high-rise development siteaoi = ee.Geometry.Rectangle([-0.085, 51.495, -0.075, 51.502])
def estimate_height_from_shadow(start, end):    """Shadow-length photogrammetry using Sentinel-2."""    # Select lowest cloud image in period    img = (ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')           .filterBounds(aoi)           .filterDate(start, end)           .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 5))           .sort('CLOUDY_PIXEL_PERCENTAGE')           .first())
    # Solar zenith from metadata -> elevation = 90 - zenith    zenith  = ee.Number(img.get('MEAN_SOLAR_ZENITH_ANGLE'))    elev_deg = ee.Number(90).subtract(zenith)    elev_rad = elev_deg.multiply(math.pi / 180)
    b4 = img.select('B4')    b8 = img.select('B8')
    # Structure: bright NIR pixels (rooftop / glazing)    structure = b8.gt(2800).selfMask()    # Shadow: dark visible pixels (cast shadow)    shadow = b4.lt(600).And(b8.lt(900)).selfMask()
    # Shadow area in m2    shadow_area = shadow.multiply(ee.Image.pixelArea()).reduceRegion(        ee.Reducer.sum(), aoi, 10    ).get('B4').getInfo()
    shadow_len_m = math.sqrt(shadow_area or 1)    # height = shadow_length * tan(solar_elevation)    height_m = shadow_len_m * math.tan(elev_deg.getInfo() * math.pi / 180)    return round(height_m, 1)
periods = [    ('2023-06-01','2023-08-31','Q2 2023'),    ('2023-10-01','2023-12-31','Q4 2023'),    ('2024-04-01','2024-06-30','Q2 2024'),    ('2024-10-01','2024-12-31','Q4 2024'),    ('2025-04-01','2025-06-30','Q2 2025'),    ('2025-10-01','2025-12-31','Q4 2025'),]
print(f"{'Period':<12} {'Height (m)':<14} {'Phase'}")for s, e, label in periods:    h = estimate_height_from_shadow(s, e)    phase = 'Foundation' if h<8 else ('Structural' if h<60 else 'Fit-out/Complete')    print(f"{label:<12} {h:<14.1f} {phase}")
output/building_height_report.mdOutput report
python
# Building Height Progression Report**Site:** London Development AOI (-0.085 to -0.075°W, 51.495 to 51.502°N)**Source:** Sentinel-2 SR shadow photogrammetry
## Height Progression| Period   | Est Height (m) | Phase               | MoM Growth ||----------|---------------|---------------------|------------|| Q2 2023  | 4.2           | Foundation          | —          || Q4 2023  | 18.7          | Structural (early)  | +14.5m     || Q2 2024  | 39.4          | Structural (mid)    | +20.7m     || Q4 2024  | 61.2          | Structural (near-complete)| +21.8m || Q2 2025  | 68.9          | Fit-out             | +7.7m      || Q4 2025  | 70.1          | Complete            | +1.2m      |
## Drawdown Trigger Summary- Foundation complete (>5m): **Q2 2023** — 10% disbursement trigger- Structural 50% (>35m): **Q2 2024** — 40% disbursement trigger- Structural complete (>60m): **Q4 2024** — 70% disbursement trigger- Practical completion (<2m growth): **Q4 2025** — final disbursement
## MethodsSentinel-2 SR 10m. Solar elevation from image metadata.height = sqrt(shadow_area) * tan(solar_elevation).Confidence: Medium (+/-15% height estimate).

Try Klarety now.