Government / Infrastructure

    Urban Expansion Tracking

    Track how cities grow, quarter by quarter, kilometre by kilometre.

    10 m
    Spatial resolution
    1 month
    Minimum time window
    ~500 km² per call
    Max polygon area
    Urban, agricultural, vegetation, water
    Change types detected

    The Problem

    City planners, infrastructure developers, and real estate investors need accurate, timely data on urban expansion to inform zoning decisions, infrastructure investment, and environmental impact assessments. Current cadastral surveys update infrequently, and ground-based monitoring of large metro areas is impractical. Unofficial construction and informal settlement growth often goes untracked for years.

    How Satalyse Solves It

    Satalyse's Change Detection endpoint identifies land-cover transitions, vegetation to impervious surface, agricultural land to residential, bare ground to structure, at 10-metre resolution between any two dates. Run quarterly scans over a city boundary polygon to build a timeline of growth vectors. Temporal Analysis completes the picture with annualized expansion rate trends and projected growth trajectories.

    Change Detection
    POST /api/v1/satellite/detect-changes
    Detects new construction, paved surfaces, and land-cover transitions across city extents
    Temporal Analysis
    POST /api/v1/satellite/analyze-temporal-trends
    Quantifies annualized urban expansion rates and identifies growth direction patterns

    Code Example

    urban-expansion-tracking.py
    REQUEST
    1"color:#c084fc">import requests
    2
    3"color:#4b5563"># Track urban growth "color:#c084fc">in Bangalore's northern corridor (20222024)
    4response = requests.post(
    5 "https://api.satalyse.dev/api/v1/satellite/detect-changes",
    6 headers={"Authorization": "Bearer sat_sk_live_..."},
    7 json={
    8 "geometry": {
    9 "type": "Polygon",
    10 "coord">inates": [[
    11 [77.520, 13.121], [77.612, 13.121],
    12 [77.612, 13.058], [77.520, 13.058],
    13 [77.520, 13.121]
    14 ]]
    15 },
    16 "start_date": "2022-01-01",
    17 "end_date": "2024-01-01",
    18 "sensitivity": "medium"
    19 }
    20)
    21
    22data = response.json()
    23changes = data["changes_detected"]
    24"color:#c084fc">print(f"New urban area: {changes['total_change_area_km2']:.2f} km²")
    25"color:#c084fc">print(f"Growth rate: {changes['percent_of_total_area']:.1f}% of corridor")
    26"color:#c084fc">print(f"Primary change: {changes['change_type']}")
    200 OKRESPONSE
    {
      "request_id": "req_urban001",
      "status": "success",
      "timestamp": "2025-01-15T12:00:00Z",
      "location": { "area_km2": 36.8, "bbox": { "min_lon": 121.43, "min_lat": 31.14, "max_lon": 121.53, "max_lat": 31.24 } },
      "changes_detected": {
        "total_change_area_km2": 4.71,
        "percent_of_total_area": 12.8,
        "change_magnitude_avg": 25,
        "confidence_avg": 0.91,
        "change_type": "urban_development"
      },
      "change_geometry": {
        "changed_polygons": [
          {
            "id": "poly_1",
            "type": "Polygon",
            "coordinates": [[[...]]],
            "change_type": "urban_development",
            "change_magnitude": 25,
            "confidence": 0.91
          }
        ]
      },
      "api_metadata": { "version": "2.0", "execution_time_ms": 2450, "cost_credits": 16, "cache_hit": false }
    }

    Ready to try it?

    Test this use case in the interactive playground. Free tier, no credit card needed.

    Related Use Cases

    Relevant locations