Home | Benchmarks | Categories | Atom Feed

Posted on Wed 09 September 2026 under Satellites

Planet Labs' Open Satellite Feed

Planet Labs is a 15-year-old, San Francisco-based satellite manufacturer and constellation operator. They operate or have operated four different constellations throughout their history and capture imagery of the entire Earth's landmasses every day. As of this writing, LinkedIn lists the firm as having 1,751 associated members.

Their CEO, Will Marshall, is one of the firm's three co-founders. In February, he posted images alongside the Secretary General of NATO, Mark Rutte, French President Emmanuel Macron and Kaja Kallas, who was Estonia's Prime Minister between 2021 and 2024 and is now Vice-President of the European Commission.

Planet Labs Open Satellite Feed

Their latest Pelican-11 satellite, which will join their Tanager constellation, was deployed by SpaceX's Transporter 17 Mission on July 7th.

Planet Labs Open Satellite Feed

This is its release into Lower Low Earth Orbit (LLEO) over Greece.

Planet Labs Open Satellite Feed

As of this writing, Planet Labs' Ephemerides service lists 97 of their satellites that are still in orbit. These are their latest details from GCAT.

$ wget https://ephemerides.planet-labs.com/planet_mc.tle

$ grep '^2.*' planet_mc.tle \
    | cut -d' ' -f2 \
    > NORAD_IDs.csv

$ ~/duckdb
.maxrows 4000

SELECT   State,
         Name,
         * EXCLUDE(AltNames,
                   Bus,
                   Dest,
                   Attach_flag,
                   Subtype_flag,
                   Orbit_flag,
                   ID_flag,
                   Status_or_failure_flag,
                   Coarse_type,
                   SDate,
                   SDate_Year,
                   "Primary",
                   DDate,
                   Manufacturer,
                   Motor,
                   JCAT,
                   ODate,
                   Type,
                   OQUAL,
                   PLName,
                   Shape,
                   Name,
                   State,
                   DryMass,
                   TotMass)
FROM     'satcat.parquet'
WHERE    Satcat IN (SELECT column0::VARCHAR
                    FROM   'NORAD_IDs.csv')
AND      Status = 'In orbit'
ORDER BY Launch_Tag,
         Name;
┌─────────┬──────────────┬────────┬──────────┬───────┬────────────┬─────────────┬────────┬───────┬─────────┬─────────┬───────────────┬─────────┬────────────┬─────────┬───────┬──────────┐
│  State  │     Name     │ Apogee │ Diameter │  Inc  │ Launch_Tag │    LDate    │ Length │ Mass  │ OpOrbit │  Owner  │    Parent     │ Perigee │   Piece    │ Satcat  │ Span  │  Status  │
│ varchar │   varchar    │ int32  │  float   │ float │  varchar   │   varchar   │ float  │ float │ varchar │ varchar │    varchar    │ varchar │  varchar   │ varchar │ float │ varchar  │
├─────────┼──────────────┼────────┼──────────┼───────┼────────────┼─────────────┼────────┼───────┼─────────┼─────────┼───────────────┼─────────┼────────────┼─────────┼───────┼──────────┤
│ US      │ SkySat A     │    597 │      0.6 │ 97.81 │ 2013-066   │ 2013 Nov 21 │    0.8 │  90.0 │ LLEO/S  │ SKYBOX  │ S39450        │ 567     │ 2013-066C  │ 39418   │   0.6 │ In orbit │
│ US      │ SkySat C1    │    515 │      0.5 │ 97.51 │ 2016-040   │ 2016 Jun 22 │    1.2 │ 110.0 │ LLEO/S  │ TBELLA  │ S41620        │ 499     │ 2016-040C  │ 41601   │   0.5 │ In orbit │
│ US      │ SkySat C2    │    502 │      0.5 │ 97.42 │ 2016-058   │ 2016 Sep 16 │    1.2 │ 110.0 │ LLEO/S  │ TBELLA  │ S41775        │ 501     │ 2016-058D  │ 41773   │   0.5 │ In orbit │
│ US      │ SkySat C4    │    506 │      0.5 │ 97.43 │ 2016-058   │ 2016 Sep 16 │    1.2 │ 110.0 │ LLEO/S  │ TBELLA  │ S41775        │ 497     │ 2016-058B  │ 41771   │   0.5 │ In orbit │
│ US      │ SkySat C5    │    503 │      0.5 │ 97.42 │ 2016-058   │ 2016 Sep 16 │    1.2 │ 110.0 │ LLEO/S  │ TBELLA  │ S41775        │ 501     │ 2016-058C  │ 41772   │   0.5 │ In orbit │
│ US      │ SkySat C6    │    527 │      0.5 │ 97.35 │ 2017-068   │ 2017 Oct 31 │    1.2 │ 110.0 │ LLEO/S  │ PLABST  │ S42994        │ 500     │ 2017-068F  │ 42992   │   0.5 │ In orbit │
│ US      │ SkySat C7    │    527 │      0.5 │ 97.35 │ 2017-068   │ 2017 Oct 31 │    1.2 │ 110.0 │ LLEO/S  │ PLABST  │ S42994        │ 500     │ 2017-068E  │ 42991   │   0.5 │ In orbit │
│ US      │ SkySat C8    │    527 │      0.5 │ 97.35 │ 2017-068   │ 2017 Oct 31 │    1.2 │ 110.0 │ LLEO/S  │ PLABST  │ S42994        │ 500     │ 2017-068D  │ 42990   │   0.5 │ In orbit │
│ US      │ SkySat C9    │    528 │      0.5 │ 97.35 │ 2017-068   │ 2017 Oct 31 │    1.2 │ 110.0 │ LLEO/S  │ PLABST  │ S42994        │ 500     │ 2017-068C  │ 42989   │   0.5 │ In orbit │
│ US      │ SkySat C12   │    588 │      0.5 │ 97.77 │ 2018-099   │ 2018 Dec  3 │    1.2 │ 110.0 │ LLEO/S  │ PLABST  │ S43763        │ 572     │ 2018-099AR │ 43797   │   0.5 │ In orbit │
│ US      │ Flock 4q-16  │    531 │      0.1 │ 97.48 │ 2023-174   │ 2023 Nov 11 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11079  SD4.4 │ 516     │ 2023-174R  │ 58271   │   0.3 │ In orbit │
│ US      │ Flock 4q-2   │    529 │      0.1 │ 97.48 │ 2023-174   │ 2023 Nov 11 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11079  SD1.2 │ 512     │ 2023-174BS │ 58320   │   0.3 │ In orbit │
│ US      │ Flock 4q-4   │    530 │      0.1 │ 97.48 │ 2023-174   │ 2023 Nov 11 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11079  SD1.4 │ 517     │ 2023-174BZ │ 58327   │   0.3 │ In orbit │
│ US      │ Flock 4q-9   │    529 │      0.1 │ 97.48 │ 2023-174   │ 2023 Nov 11 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11079  SD3.1 │ 512     │ 2023-174BU │ 58322   │   0.3 │ In orbit │
│ US      │ Pelican 1    │    530 │      0.6 │ 97.48 │ 2023-174   │ 2023 Nov 11 │    2.3 │ 160.0 │ LLEO/S  │ PLAN    │ A11079        │ 515     │ 2023-174AS │ 58296   │   3.0 │ In orbit │
│ US      │ Flock 4be-1  │    515 │      0.1 │ 97.45 │ 2024-149   │ 2024 Aug 16 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11288        │ 506     │ 2024-149BC │ 60518   │   0.3 │ In orbit │
│ US      │ Flock 4be-11 │    517 │      0.1 │ 97.44 │ 2024-149   │ 2024 Aug 16 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11288        │ 507     │ 2024-149AK │ 60501   │   0.3 │ In orbit │
│ US      │ Flock 4be-13 │    517 │      0.1 │ 97.44 │ 2024-149   │ 2024 Aug 16 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11288        │ 506     │ 2024-149AW │ 60512   │   0.3 │ In orbit │
│ US      │ Flock 4be-14 │    516 │      0.1 │ 97.44 │ 2024-149   │ 2024 Aug 16 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11288        │ 505     │ 2024-149BB │ 60517   │   0.3 │ In orbit │
│ US      │ Flock 4be-17 │    517 │      0.1 │ 97.45 │ 2024-149   │ 2024 Aug 16 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11288        │ 509     │ 2024-149AA │ 60492   │   0.3 │ In orbit │
│ US      │ Flock 4be-18 │    519 │      0.1 │ 97.44 │ 2024-149   │ 2024 Aug 16 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11288        │ 509     │ 2024-149N  │ 60480   │   0.3 │ In orbit │
│ US      │ Flock 4be-19 │    516 │      0.1 │ 97.44 │ 2024-149   │ 2024 Aug 16 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11288        │ 505     │ 2024-149CZ │ 60563   │   0.3 │ In orbit │
│ US      │ Flock 4be-22 │    518 │      0.1 │ 97.44 │ 2024-149   │ 2024 Aug 16 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11288        │ 508     │ 2024-149AC │ 60494   │   0.3 │ In orbit │
│ US      │ Flock 4be-23 │    518 │      0.1 │ 97.45 │ 2024-149   │ 2024 Aug 16 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11288        │ 509     │ 2024-149Y  │ 60490   │   0.3 │ In orbit │
│ US      │ Flock 4be-24 │    517 │      0.1 │ 97.44 │ 2024-149   │ 2024 Aug 16 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11288        │ 507     │ 2024-149AP │ 60505   │   0.3 │ In orbit │
│ US      │ Flock 4be-25 │    517 │      0.1 │ 97.45 │ 2024-149   │ 2024 Aug 16 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11288        │ 510     │ 2024-149V  │ 60487   │   0.3 │ In orbit │
│ US      │ Flock 4be-28 │    516 │      0.1 │ 97.44 │ 2024-149   │ 2024 Aug 16 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11288        │ 505     │ 2024-149BD │ 60519   │   0.3 │ In orbit │
│ US      │ Flock 4be-29 │    515 │      0.1 │ 97.45 │ 2024-149   │ 2024 Aug 16 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11288        │ 508     │ 2024-149AT │ 60509   │   0.3 │ In orbit │
│ US      │ Flock 4be-3  │    516 │      0.1 │ 97.44 │ 2024-149   │ 2024 Aug 16 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11288        │ 506     │ 2024-149CX │ 60561   │   0.3 │ In orbit │
│ US      │ Flock 4be-31 │    517 │      0.1 │ 97.45 │ 2024-149   │ 2024 Aug 16 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11288        │ 509     │ 2024-149W  │ 60488   │   0.3 │ In orbit │
│ US      │ Flock 4be-32 │    518 │      0.1 │ 97.44 │ 2024-149   │ 2024 Aug 16 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11288        │ 508     │ 2024-149AF │ 60497   │   0.3 │ In orbit │
│ US      │ Flock 4be-34 │    517 │      0.1 │ 97.45 │ 2024-149   │ 2024 Aug 16 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11288        │ 509     │ 2024-149AD │ 60495   │   0.3 │ In orbit │
│ US      │ Flock 4be-5  │    515 │      0.1 │ 97.45 │ 2024-149   │ 2024 Aug 16 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11288        │ 507     │ 2024-149CV │ 60559   │   0.3 │ In orbit │
│ US      │ Flock 4be-6  │    515 │      0.1 │ 97.45 │ 2024-149   │ 2024 Aug 16 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11288        │ 506     │ 2024-149BA │ 60516   │   0.3 │ In orbit │
│ US      │ Flock 4be-7  │    518 │      0.1 │ 97.45 │ 2024-149   │ 2024 Aug 16 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11288        │ 510     │ 2024-149P  │ 60481   │   0.3 │ In orbit │
│ US      │ Flock 4be-9  │    515 │      0.1 │ 97.45 │ 2024-149   │ 2024 Aug 16 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11288        │ 507     │ 2024-149AY │ 60514   │   0.3 │ In orbit │
│ US      │ Tanager 1    │    516 │      0.6 │ 97.44 │ 2024-149   │ 2024 Aug 16 │    2.3 │ 150.0 │ LLEO/S  │ PLAN    │ A11288        │ 507     │ 2024-149AR │ 60507   │   3.0 │ In orbit │
│ US      │ Flock 4g-1   │    518 │      0.1 │ 97.45 │ 2025-009   │ 2025 Jan 14 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11398        │ 511     │ 2025-009BK │ 62666   │   0.3 │ In orbit │
│ US      │ Flock 4g-10  │    518 │      0.1 │ 97.44 │ 2025-009   │ 2025 Jan 14 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11398        │ 512     │ 2025-009BP │ 62670   │   0.3 │ In orbit │
│ US      │ Flock 4g-11  │    515 │      0.1 │ 97.44 │ 2025-009   │ 2025 Jan 14 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11398        │ 512     │ 2025-009W  │ 62629   │   0.3 │ In orbit │
│ US      │ Flock 4g-12  │    516 │      0.1 │ 97.44 │ 2025-009   │ 2025 Jan 14 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11398        │ 511     │ 2025-009S  │ 62625   │   0.3 │ In orbit │
│ US      │ Flock 4g-14  │    518 │      0.1 │ 97.45 │ 2025-009   │ 2025 Jan 14 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11398        │ 511     │ 2025-009BL │ 62667   │   0.3 │ In orbit │
│ US      │ Flock 4g-15  │    518 │      0.1 │ 97.45 │ 2025-009   │ 2025 Jan 14 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11398        │ 511     │ 2025-009BX │ 62678   │   0.3 │ In orbit │
│ US      │ Flock 4g-17  │    519 │      0.1 │ 97.44 │ 2025-009   │ 2025 Jan 14 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11398        │ 511     │ 2025-009CA │ 62681   │   0.3 │ In orbit │
│ US      │ Flock 4g-2   │    518 │      0.1 │ 97.44 │ 2025-009   │ 2025 Jan 14 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11398        │ 511     │ 2025-009BE │ 62661   │   0.3 │ In orbit │
│ US      │ Flock 4g-22  │    514 │      0.1 │ 97.44 │ 2025-009   │ 2025 Jan 14 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11398        │ 511     │ 2025-009AN │ 62645   │   0.3 │ In orbit │
│ US      │ Flock 4g-24  │    515 │      0.1 │ 97.45 │ 2025-009   │ 2025 Jan 14 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11398        │ 511     │ 2025-009AE │ 62637   │   0.3 │ In orbit │
│ US      │ Flock 4g-25  │    514 │      0.1 │ 97.44 │ 2025-009   │ 2025 Jan 14 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11398        │ 511     │ 2025-009AP │ 62646   │   0.3 │ In orbit │
│ US      │ Flock 4g-26  │    515 │      0.1 │ 97.45 │ 2025-009   │ 2025 Jan 14 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11398        │ 511     │ 2025-009AA │ 62633   │   0.3 │ In orbit │
│ US      │ Flock 4g-27  │    514 │      0.1 │ 97.44 │ 2025-009   │ 2025 Jan 14 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11398        │ 512     │ 2025-009AJ │ 62641   │   0.3 │ In orbit │
│ US      │ Flock 4g-28  │    515 │      0.1 │ 97.44 │ 2025-009   │ 2025 Jan 14 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11398        │ 511     │ 2025-009AB │ 62634   │   0.3 │ In orbit │
│ US      │ Flock 4g-3   │    515 │      0.1 │ 97.45 │ 2025-009   │ 2025 Jan 14 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11398        │ 511     │ 2025-009AG │ 62639   │   0.3 │ In orbit │
│ US      │ Flock 4g-31  │    513 │      0.1 │ 97.44 │ 2025-009   │ 2025 Jan 14 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11398        │ 511     │ 2025-009AV │ 62652   │   0.3 │ In orbit │
│ US      │ Flock 4g-36  │    519 │      0.1 │ 97.45 │ 2025-009   │ 2025 Jan 14 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11398        │ 512     │ 2025-009BU │ 62675   │   0.3 │ In orbit │
│ US      │ Flock 4g-6   │    517 │      0.1 │ 97.44 │ 2025-009   │ 2025 Jan 14 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11398        │ 512     │ 2025-009BD │ 62660   │   0.3 │ In orbit │
│ US      │ Flock 4g-7   │    516 │      0.1 │ 97.44 │ 2025-009   │ 2025 Jan 14 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11398        │ 512     │ 2025-009R  │ 62624   │   0.3 │ In orbit │
│ US      │ Flock 4g-8   │    516 │      0.1 │ 97.44 │ 2025-009   │ 2025 Jan 14 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11398        │ 511     │ 2025-009E  │ 62613   │   0.3 │ In orbit │
│ US      │ Flock 4g-9   │    520 │      0.1 │ 97.44 │ 2025-009   │ 2025 Jan 14 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11398        │ 512     │ 2025-009P  │ 62622   │   0.3 │ In orbit │
│ US      │ Pelican 2    │    516 │      0.6 │ 97.44 │ 2025-009   │ 2025 Jan 14 │    2.3 │ 160.0 │ LLEO/S  │ PLAN    │ A11398        │ 512     │ 2025-009Y  │ 62631   │   3.0 │ In orbit │
│ US      │ Pelican 3    │    464 │      0.6 │ 97.26 │ 2025-188   │ 2025 Aug 26 │    2.3 │ 160.0 │ LLEO/S  │ PLAN    │ A11588        │ 458     │ 2025-188A  │ 65315   │   3.0 │ In orbit │
│ US      │ Pelican 4    │    464 │      0.6 │ 97.26 │ 2025-188   │ 2025 Aug 26 │    2.3 │ 160.0 │ LLEO/S  │ PLAN    │ A11588        │ 458     │ 2025-188B  │ 65316   │   3.0 │ In orbit │
│ US      │ Flock 4h-10  │    518 │      0.1 │ 97.44 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 512     │ 2025-276AZ │ 66713   │   0.3 │ In orbit │
│ US      │ Flock 4h-12  │    513 │      0.1 │ 97.44 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 512     │ 2025-276BB │ 66715   │   0.3 │ In orbit │
│ US      │ Flock 4h-14  │    512 │      0.1 │ 97.45 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 512     │ 2025-276BD │ 66717   │   0.3 │ In orbit │
│ US      │ Flock 4h-15  │    518 │      0.1 │ 97.44 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 512     │ 2025-276BE │ 66718   │   0.3 │ In orbit │
│ US      │ Flock 4h-16  │    517 │      0.1 │ 97.45 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 512     │ 2025-276BF │ 66719   │   0.3 │ In orbit │
│ US      │ Flock 4h-18  │    518 │      0.1 │ 97.44 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 512     │ 2025-276BH │ 66721   │   0.3 │ In orbit │
│ US      │ Flock 4h-19  │    513 │      0.1 │ 97.44 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 511     │ 2025-276BJ │ 66722   │   0.3 │ In orbit │
│ US      │ Flock 4h-2   │    513 │      0.1 │ 97.44 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 512     │ 2025-276AR │ 66705   │   0.3 │ In orbit │
│ US      │ Flock 4h-20  │    513 │      0.1 │ 97.45 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 511     │ 2025-276BK │ 66723   │   0.3 │ In orbit │
│ US      │ Flock 4h-21  │    513 │      0.1 │ 97.44 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 511     │ 2025-276BL │ 66724   │   0.3 │ In orbit │
│ US      │ Flock 4h-22  │    517 │      0.1 │ 97.44 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 512     │ 2025-276BM │ 66725   │   0.3 │ In orbit │
│ US      │ Flock 4h-23  │    518 │      0.1 │ 97.45 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 512     │ 2025-276BN │ 66726   │   0.3 │ In orbit │
│ US      │ Flock 4h-24  │    517 │      0.1 │ 97.45 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 512     │ 2025-276BP │ 66727   │   0.3 │ In orbit │
│ US      │ Flock 4h-25  │    512 │      0.1 │ 97.44 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 511     │ 2025-276BQ │ 66728   │   0.3 │ In orbit │
│ US      │ Flock 4h-26  │    518 │      0.1 │ 97.44 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 512     │ 2025-276BR │ 66729   │   0.3 │ In orbit │
│ US      │ Flock 4h-27  │    513 │      0.1 │ 97.44 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 512     │ 2025-276BS │ 66730   │   0.3 │ In orbit │
│ US      │ Flock 4h-29  │    517 │      0.1 │ 97.44 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 512     │ 2025-276BU │ 66732   │   0.3 │ In orbit │
│ US      │ Flock 4h-3   │    517 │      0.1 │ 97.45 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 512     │ 2025-276AS │ 66706   │   0.3 │ In orbit │
│ US      │ Flock 4h-30  │    518 │      0.1 │ 97.45 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 512     │ 2025-276BV │ 66733   │   0.3 │ In orbit │
│ US      │ Flock 4h-31  │    517 │      0.1 │ 97.44 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 512     │ 2025-276BW │ 66734   │   0.3 │ In orbit │
│ US      │ Flock 4h-32  │    518 │      0.1 │ 97.45 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 512     │ 2025-276BX │ 66735   │   0.3 │ In orbit │
│ US      │ Flock 4h-33  │    513 │      0.1 │ 97.45 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 511     │ 2025-276BY │ 66736   │   0.3 │ In orbit │
│ US      │ Flock 4h-34  │    513 │      0.1 │ 97.45 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 511     │ 2025-276BZ │ 66737   │   0.3 │ In orbit │
│ US      │ Flock 4h-35  │    512 │      0.1 │ 97.45 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 511     │ 2025-276CA │ 66738   │   0.3 │ In orbit │
│ US      │ Flock 4h-36  │    514 │      0.1 │ 97.45 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 511     │ 2025-276CB │ 66739   │   0.3 │ In orbit │
│ US      │ Flock 4h-4   │    518 │      0.1 │ 97.44 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 512     │ 2025-276AT │ 66707   │   0.3 │ In orbit │
│ US      │ Flock 4h-5   │    513 │      0.1 │ 97.44 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 511     │ 2025-276AU │ 66708   │   0.3 │ In orbit │
│ US      │ Flock 4h-7   │    516 │      0.1 │ 97.44 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 513     │ 2025-276AW │ 66710   │   0.3 │ In orbit │
│ US      │ Flock 4h-8   │    517 │      0.1 │ 97.45 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 512     │ 2025-276AX │ 66711   │   0.3 │ In orbit │
│ US      │ Flock 4h-9   │    515 │      0.1 │ 97.45 │ 2025-276   │ 2025 Nov 28 │    0.3 │   5.7 │ LLEO/S  │ PLAN    │ A11695        │ 511     │ 2025-276AY │ 66712   │   0.3 │ In orbit │
│ US      │ Pelican 5    │    515 │      0.6 │ 97.44 │ 2025-276   │ 2025 Nov 28 │    2.3 │ 160.0 │ LLEO/S  │ PLAN    │ A11695        │ 512     │ 2025-276B  │ 66667   │   3.0 │ In orbit │
│ US      │ Pelican 6    │    516 │      0.6 │ 97.44 │ 2025-276   │ 2025 Nov 28 │    2.3 │ 160.0 │ LLEO/S  │ PLAN    │ A11695        │ 513     │ 2025-276AP │ 66703   │   3.0 │ In orbit │
│ US      │ Edda 1       │    509 │      0.6 │ 97.41 │ 2026-100   │ 2026 May  3 │    2.3 │ 160.0 │ LLEO/S  │ PLAN    │ A11839        │ 500     │ 2026-100AP │ 69017   │   3.0 │ In orbit │
│ S       │ Pelican 8    │    518 │      0.6 │ 97.72 │ 2026-100   │ 2026 May  3 │    2.3 │ 160.0 │ LLEO/S  │ FVM     │ A11839        │ 482     │ 2026-100AQ │ 69018   │   3.0 │ In orbit │
│ US      │ Pelican 9    │    508 │      0.6 │ 97.41 │ 2026-100   │ 2026 May  3 │    2.3 │ 160.0 │ LLEO/S  │ PLAN    │ A11839        │ 500     │ 2026-100AR │ 69019   │   3.0 │ In orbit │
│ US      │ Pelican 11   │    597 │      0.6 │ 97.76 │ 2026-156   │ 2026 Jul  7 │    2.3 │ 160.0 │ LLEO/S  │ PLAN    │ A11917        │ 587     │ 2026-156C  │ 69871   │   3.0 │ In orbit │
└─────────┴──────────────┴────────┴──────────┴───────┴────────────┴─────────────┴────────┴───────┴─────────┴─────────┴───────────────┴─────────┴────────────┴─────────┴───────┴──────────┘

These are the spectrum response levels of their SuperDove and SkySat satellites compared alongside RapidEye, Landsat-8 and Sentinel-2.

Planet Labs Open Satellite Feed

The Hyperspectral Pelican constellation differs from their other constellations as its satellites capture 426 bands of light. I reviewed some of its free imagery last year.

Last year, Planet Labs announced a new Disaster Data feed. This is a Cloudflare-hosted, DuckDB & QGIS-friendly feed with select imagery they've captured from various natural and man-made disasters shortly after they've occurred. The metadata describing the images is shipped as Parquet and JSON files.

In this post, I'll analyse the imagery they've captured and published openly this year.

My Workstation

I'm using a 5.7 GHz AMD Ryzen 9 9950X CPU. It has 16 cores and 32 threads and 1.2 MB of L1, 16 MB of L2 and 64 MB of L3 cache. It has a liquid cooler attached and is housed in a spacious, full-sized Cooler Master HAF 700 computer case.

The system has 96 GB of DDR5 RAM clocked at 4,800 MT/s and a 5th-generation, Crucial T700 4 TB NVMe M.2 SSD which can read at speeds up to 12,400 MB/s. There is a heatsink on the SSD to help keep its temperature down. This is my system's C drive.

The system is powered by a 1,200-watt, fully modular Corsair Power Supply and is sat on an ASRock X870E Nova 90 Motherboard.

I'm running Ubuntu 24 LTS via Microsoft's Ubuntu for Windows on Windows 11 Pro. In case you're wondering why I don't run a Linux-based desktop as my primary work environment, I'm still using an Nvidia GTX 1080 GPU which has better driver support on Windows and ArcGIS Pro only supports Windows natively.

Installing Prerequisites

I'll use GDAL 3.9.3 to manipulate imagery and jq to help format data in this post.

Note: Last year, GDAL 3.12 was released and made a substantial overhaul to its CLI. It's likely the commands in this post would need to be adjusted to fit this or newer versions of GDAL.

$ sudo apt update
$ sudo apt install \
    gdal-bin \
    jq

I'll use DuckDB, along with its H3, JSON, Lindel, Parquet and Spatial extensions in this post.

$ cd ~
$ wget -c https://github.com/duckdb/duckdb/releases/download/v1.5.4/duckdb_cli-linux-amd64.zip
$ unzip -j duckdb_cli-linux-amd64.zip
$ chmod +x duckdb
$ ~/duckdb
INSTALL h3 FROM community;
INSTALL lindel FROM community;
INSTALL json;
INSTALL parquet;
INSTALL spatial;

I'll set up DuckDB to load every installed extension each time it launches.

$ vi ~/.duckdbrc
.timer on
.width 180
LOAD h3;
LOAD lindel;
LOAD json;
LOAD parquet;
LOAD spatial;

The maps in this post were rendered with QGIS version 4.2.1. QGIS is a desktop application that runs on Windows, macOS and Linux. The application has grown in popularity in recent years and has ~22M application launches from users all around the world each month.

The boundaries and place names were sourced from Natural Earth. The earthquake data is from the USGS. Maritime Boundaries were sourced from Marine Regions. I used QGIS' HCMGIS plugin to add satellite imagery basemaps from Bing to this post.

The List of Disasters

This is a programmatic way of getting the list of disasters. Each line represents the URL slug where the assets and event-specific documentation can be found.

$ touch catalog.json; rm catalog.json
$ wget https://data.source.coop/planet/disasterdata/catalog.json

$ jq -r '.links[]|.href' catalog.json \
    | grep '.*[0-9]/catalog.json' \
    | cut -d/ -f2 \
    | sort
colombia-earthquake-2026-08-10
gironde-wildfire-2026
hurricane-melissa-2025
nepal-flash-flood-2026-08-26
philippines-earthquake-2026-06-08
venezuela-earthquake-2026-06-24

Pre-event Basemaps

Each event's folder will contain a variety of assets. The types of assets available vary between the events. Two of the events, Colombia and Venezuela, have basemaps. These are mosaics of several satellite images captured over a recent period of time and aim to have a very low amount of cloud cover obscuring the Earth's surface.

The basemap for Venezuela covers 280 KM of coastline and up to 52 KM inland.

Planet Labs Open Satellite Feed

The basemaps are released as tiles and, in the case of Colombia, are shipped as 93 GeoTIFFs with corresponding JSON files for their metadata.

I'll download the list of basemap assets for Colombia below.

$ mkdir -p colombia_basemap
$ cd colombia_basemap

$ wget https://data.source.coop/planet/disasterdata/Colombia-earthquake-2026-08-10/pre-event/basemap-2026q2/items.parquet

This is an example record for one of the tiles.

$ echo "FROM  'items.parquet'
        LIMIT 1" \
    | ~/duckdb -json \
    | jq -S .
[
  {
    "assets": {
      "thumbnail": {
        "href": "https://data.source.coop/planet/disasterdata/colombia-earthquake-2026-08-10/pre-event/basemap-2026q2/items/585-1059/585-1059_thumbnail.png",
        "roles": [
          "thumbnail"
        ],
        "title": "Thumbnail",
        "type": "image/png"
      },
      "visual": {
        "eo:bands": [
          {
            "common_name": "red",
            "name": "Red"
          },
          {
            "common_name": "green",
            "name": "Green"
          },
          {
            "common_name": "blue",
            "name": "Blue"
          },
          {
            "common_name": "alpha",
            "name": "Alpha"
          }
        ],
        "href": "https://data.source.coop/planet/disasterdata/colombia-earthquake-2026-08-10/pre-event/basemap-2026q2/items/585-1059/585-1059_visual.tif",
        "roles": [
          "data",
          "visual"
        ],
        "title": "Visual (true-colour RGB) basemap quad COG",
        "type": "image/tiff; application=geotiff; profile=cloud-optimized"
      }
    },
    "bbox": {
      "xmax": -76.99218748925043,
      "xmin": -77.16796873922601,
      "ymax": 6.315298537512351,
      "ymin": 6.140554781656619
    },
    "collection": "pre-event-basemap-2026q2",
    "constellation": "planetscope",
    "datetime": "2026-05-16 15:00:00+03",
    "end_datetime": "2026-07-01 03:00:00+03",
    "geometry": "POLYGON ((-77.16796873922601 6.140554781656619, -76.99218748925043 6.140554781656619, -76.99218748925043 6.315298537512351, -77.16796873922601 6.315298537512351, -77.16796873922601 6.140554781656619))",
    "gsd": 4.77731426716,
    "id": "585-1059",
    "links": [
      {
        "href": "../../../../catalog.json",
        "rel": "root",
        "title": "Planet Crisis Response — Colombia Earthquake (2026)",
        "type": "application/json"
      },
      {
        "href": "../../collection.json",
        "rel": "parent",
        "title": null,
        "type": "application/json"
      },
      {
        "href": "../../collection.json",
        "rel": "collection",
        "title": null,
        "type": "application/json"
      },
      {
        "href": "https://data.source.coop/planet/disasterdata/colombia-earthquake-2026-08-10/pre-event/basemap-2026q2/items/585-1059/585-1059.json",
        "rel": "self",
        "title": null,
        "type": "application/json"
      },
      {
        "href": "./585-1059_thumbnail.png",
        "rel": "thumbnail",
        "title": null,
        "type": "image/png"
      }
    ],
    "pl:mosaic": "global_quarterly_2026q2_mosaic",
    "pl:mosaic_id": "649cf917-0aab-40eb-94df-c222535f2cf7",
    "pl:percent_covered": 100,
    "pl:quad_id": "585-1059",
    "proj:epsg": 3857,
    "proj:shape": [
      4096,
      4096
    ],
    "stac_extensions": [
      "https://stac-extensions.github.io/eo/v1.0.0/schema.json",
      "https://stac-extensions.github.io/view/v1.0.0/schema.json",
      "https://stac-extensions.github.io/raster/v1.1.0/schema.json",
      "https://stac-extensions.github.io/projection/v1.1.0/schema.json"
    ],
    "stac_version": "1.0.0",
    "start_datetime": "2026-04-01 03:00:00+03",
    "type": "Feature"
  }
]

I'll build a list of every tile's GeoTIFF URL and download them with eight parallel threads. The resulting GeoTIFFs take up 1.7 GB of space.

$ echo "WITH a AS (
            SELECT DISTINCT
                UNNEST([assets.visual.href]) AS url
            FROM READ_PARQUET('items.parquet')
        )
        FROM   a
        WHERE  url IS NOT NULL" \
    | ~/duckdb -csv -noheader \
    | xargs \
        -I% \
        -P8 \
        wget -c "%"

I'll then build a single GeoTIFF from those tiles and use WEBP compression. This can help reduce the file size 80%+ with minimal changes in appearance. The resulting GeoTIFF is 327 MB.

$ gdalbuildvrt mosaic.vrt *visual.tif

$ gdal_translate \
    -co NUM_THREADS=ALL_CPUS \
    -of COG \
    -co COMPRESS=WEBP \
    mosaic.vrt \
    mosaic.tif

I will then convert the JSON metadata files into a single Parquet file.

$ mkdir -p metadata

$ echo "SELECT href
        FROM   (
            SELECT UNNEST(links, recursive := true)
            FROM   READ_PARQUET('items.parquet')
        )
        WHERE  href LIKE 'https%'" \
    | ~/duckdb -csv -noheader \
    | xargs \
        -I% \
        -P8 \
        wget -P metadata/ -c "%"
$ touch footprints.json; rm footprints.json

$ for FILENAME in metadata/*.json; do
    jq -c . $FILENAME >> footprints.json
  done
$ ~/duckdb
COPY(
    SELECT * EXCLUDE(geometry),
           geometry: ST_GEOMFROMGEOJSON(geometry)
    FROM   'footprints.json'
) TO 'footprints.parquet' (
      FORMAT 'PARQUET',
      CODEC  'ZSTD',
      COMPRESSION_LEVEL 22,
      ROW_GROUP_SIZE 15000);

These are the numbers of unique values for each field in the properties structure. I've excluded any nested structures and lists.

SELECT   column_name,
         column_type,
         approx_unique,
         min,
         max
FROM     (SUMMARIZE
          SELECT properties.*
          FROM   'footprints.parquet')
WHERE    column_type::TEXT NOT LIKE 'STRUCT%'
AND      column_type::TEXT NOT LIKE '%[]%'
ORDER BY LOWER(column_name);

The datetime field appears to be the timestamp of the oldest image in the mosaic and the end_datetime appears to be when the mosaic was either published or when the newest image within the mosaic was captured.

┌────────────────────┬─────────────┬───────────────┬──────────────────────────────────────┬──────────────────────────────────────┐
│    column_name     │ column_type │ approx_unique │                 min                  │                 max                  │
│      varchar       │   varchar   │     int64     │               varchar                │               varchar                │
├────────────────────┼─────────────┼───────────────┼──────────────────────────────────────┼──────────────────────────────────────┤
│ constellation      │ VARCHAR     │             1 │ planetscope                          │ planetscope                          │
│ datetime           │ TIMESTAMP   │             1 │ 2026-05-16 12:00:00                  │ 2026-05-16 12:00:00                  │
│ end_datetime       │ TIMESTAMP   │             1 │ 2026-07-01 00:00:00                  │ 2026-07-01 00:00:00                  │
│ gsd                │ DOUBLE      │             1 │ 4.77731426716                        │ 4.77731426716                        │
│ pl:mosaic          │ VARCHAR     │             1 │ global_quarterly_2026q2_mosaic       │ global_quarterly_2026q2_mosaic       │
│ pl:mosaic_id       │ UUID        │             1 │ 649cf917-0aab-40eb-94df-c222535f2cf7 │ 649cf917-0aab-40eb-94df-c222535f2cf7 │
│ pl:percent_covered │ BIGINT      │             1 │ 100                                  │ 100                                  │
│ pl:quad_id         │ VARCHAR     │            86 │ 585-1059                             │ 596-1054                             │
│ proj:code          │ VARCHAR     │             1 │ EPSG:3857                            │ EPSG:3857                            │
│ start_datetime     │ TIMESTAMP   │             1 │ 2026-04-01 00:00:00                  │ 2026-04-01 00:00:00                  │
└────────────────────┴─────────────┴───────────────┴──────────────────────────────────────┴──────────────────────────────────────┘

These are the basemap tiles' footprints in relation to Columbia and the wider region.

Planet Labs Open Satellite Feed

Below, I've zoomed in on Pereira.

Planet Labs Open Satellite Feed

Pre- and Post-Event Imagery

There are two high-level categories of assets in any event: pre- and post-event imagery. I'll use the post-event imagery for Nepal for this walk-through.

In the folder listings for either pre- or post-event imagery, there will be an items.parquet file. Clicking the filename will bring up a webpage describing its contents, but next to the filename is a link that you can access from the command line and/or DuckDB, without Cloudflare blocking your client.

Planet Labs Open Satellite Feed

The following will download the 83 KB Parquet-formatted, post-event metadata file for the flash-flood disaster in Nepal last month.

$ wget -O nepal.post.parquet \
       https://data.source.coop/planet/disasterdata/nepal-flash-flood-2026-08-26/post-event/items.parquet

There are 24 records in this file.

$ ~/duckdb
SELECT COUNT(*)
FROM   'nepal.post.parquet';
24

This is an example record.

$ echo "FROM  'nepal.post.parquet'
        LIMIT 1" \
    | ~/duckdb -json \
    | jq -S .
[
  {
    "assets": {
      "analytic": null,
      "pansharpened": {
        "eo:bands": null,
        "href": "https://data.source.coop/planet/disasterdata/nepal-flash-flood-2026-08-26/post-event/pelican-2026-08-27/items/20260827_060956_98_3009/20260827_060956_98_3009_pansharpened.tif",
        "pl:asset_type": "ortho_pansharpened",
        "pl:bundle_type": "pansharpened_udm2",
        "proj:bbox": [
          335132.5,
          3125818.0,
          346500.5,
          3137230.5
        ],
        "proj:epsg": 32645,
        "proj:shape": [
          22825,
          22736
        ],
        "proj:transform": [
          0.5,
          0.0,
          335132.5,
          0.0,
          -0.5,
          3137230.5,
          0.0,
          0.0,
          1.0
        ],
        "raster:bands": [
          {
            "data_type": "uint16",
            "nodata": 0.0,
            "spatial_resolution": 0.5,
            "statistics": {
              "maximum": 58588.0,
              "minimum": 11968.0
            }
          },
          {
            "data_type": "uint16",
            "nodata": 0.0,
            "spatial_resolution": 0.5,
            "statistics": {
              "maximum": 33961.0,
              "minimum": 10257.0
            }
          },
          {
            "data_type": "uint16",
            "nodata": 0.0,
            "spatial_resolution": 0.5,
            "statistics": {
              "maximum": 34764.0,
              "minimum": 7934.0
            }
          },
          {
            "data_type": "uint16",
            "nodata": 0.0,
            "spatial_resolution": 0.5,
            "statistics": {
              "maximum": 29368.0,
              "minimum": 6403.0
            }
          },
          {
            "data_type": "uint16",
            "nodata": 0.0,
            "spatial_resolution": 0.5,
            "statistics": {
              "maximum": 42197.0,
              "minimum": 7554.0
            }
          },
          {
            "data_type": "uint16",
            "nodata": 0.0,
            "spatial_resolution": 0.5,
            "statistics": {
              "maximum": 39092.0,
              "minimum": 7926.0
            }
          }
        ],
        "roles": [
          "data"
        ],
        "title": "Pansharpened multiband ortho COG",
        "type": "image/tiff; application=geotiff; profile=cloud-optimized"
      },
      "thumbnail": {
        "href": "https://data.source.coop/planet/disasterdata/nepal-flash-flood-2026-08-26/post-event/pelican-2026-08-27/items/20260827_060956_98_3009/20260827_060956_98_3009_thumbnail.png",
        "roles": [
          "thumbnail"
        ],
        "title": "Thumbnail",
        "type": "image/png"
      },
      "udm": null,
      "udm2": {
        "eo:bands": null,
        "href": "https://data.source.coop/planet/disasterdata/nepal-flash-flood-2026-08-26/post-event/pelican-2026-08-27/items/20260827_060956_98_3009/20260827_060956_98_3009_udm2.tif",
        "pl:asset_type": "ortho_pansharpened_udm2",
        "pl:bundle_type": "pansharpened_udm2",
        "proj:bbox": [
          335132.5,
          3125818.0,
          346500.5,
          3137230.5
        ],
        "proj:epsg": 32645,
        "proj:shape": [
          22825,
          22736
        ],
        "proj:transform": [
          0.5,
          0.0,
          335132.5,
          0.0,
          -0.5,
          3137230.5,
          0.0,
          0.0,
          1.0
        ],
        "raster:bands": [
          {
            "data_type": "uint8",
            "spatial_resolution": 0.5,
            "statistics": {
              "maximum": 1.0,
              "minimum": 0.0
            }
          },
          {
            "data_type": "uint8",
            "spatial_resolution": 0.5,
            "statistics": {
              "maximum": 0.0,
              "minimum": 0.0
            }
          },
          {
            "data_type": "uint8",
            "spatial_resolution": 0.5,
            "statistics": {
              "maximum": 1.0,
              "minimum": 0.0
            }
          },
          {
            "data_type": "uint8",
            "spatial_resolution": 0.5,
            "statistics": {
              "maximum": 1.0,
              "minimum": 0.0
            }
          },
          {
            "data_type": "uint8",
            "spatial_resolution": 0.5,
            "statistics": {
              "maximum": 0.0,
              "minimum": 0.0
            }
          },
          {
            "data_type": "uint8",
            "spatial_resolution": 0.5,
            "statistics": {
              "maximum": 1.0,
              "minimum": 0.0
            }
          },
          {
            "data_type": "uint8",
            "spatial_resolution": 0.5,
            "statistics": {
              "maximum": 100.0,
              "minimum": 0.0
            }
          },
          {
            "data_type": "uint8",
            "spatial_resolution": 0.5,
            "statistics": {
              "maximum": 2.0,
              "minimum": 0.0
            }
          }
        ],
        "roles": [
          "data",
          "snow-ice",
          "cloud",
          "cloud-shadow"
        ],
        "title": "Usable Data Mask (UDM2) — per-pixel quality",
        "type": "image/tiff; application=geotiff; profile=cloud-optimized"
      },
      "visual": {
        "eo:bands": null,
        "href": "https://data.source.coop/planet/disasterdata/nepal-flash-flood-2026-08-26/post-event/pelican-2026-08-27/items/20260827_060956_98_3009/20260827_060956_98_3009_visual.tif",
        "pl:asset_type": "ortho_visual",
        "pl:bundle_type": "visual",
        "proj:bbox": [
          335132.5,
          3125818.0,
          346500.5,
          3137230.5
        ],
        "proj:epsg": 32645,
        "proj:shape": [
          22825,
          22736
        ],
        "proj:transform": [
          0.5,
          0.0,
          335132.5,
          0.0,
          -0.5,
          3137230.5,
          0.0,
          0.0,
          1.0
        ],
        "raster:bands": [
          {
            "data_type": "uint8",
            "spatial_resolution": 0.5,
            "statistics": {
              "maximum": 255.0,
              "minimum": 0.0
            }
          },
          {
            "data_type": "uint8",
            "spatial_resolution": 0.5,
            "statistics": {
              "maximum": 255.0,
              "minimum": 0.0
            }
          },
          {
            "data_type": "uint8",
            "spatial_resolution": 0.5,
            "statistics": {
              "maximum": 255.0,
              "minimum": 0.0
            }
          },
          {
            "data_type": "uint8",
            "spatial_resolution": 0.5,
            "statistics": {
              "maximum": 255.0,
              "minimum": 0.0
            }
          }
        ],
        "roles": [
          "data",
          "visual"
        ],
        "title": "Visual (true-colour RGB) ortho COG",
        "type": "image/tiff; application=geotiff; profile=cloud-optimized"
      }
    },
    "bbox": {
      "xmax": 85.43406669026984,
      "xmin": 85.31918550951734,
      "ymax": 28.35121763114424,
      "ymin": 28.24911357422872
    },
    "collection": "post-event-pelican-2026-08-27",
    "constellation": "pelican",
    "created": "2026-08-27 10:33:45+03",
    "datetime": "2026-08-27 09:09:56.99105+03",
    "eo:cloud_cover": 85,
    "geometry": "POLYGON ((85.33889798257499 28.35121763114424, 85.31918550951734 28.2661375282364, 85.41382376956273 28.24911357422872, 85.43406669026984 28.334115698528574, 85.33889798257499 28.35121763114424))",
    "gsd": 0.55,
    "id": "20260827_060956_98_3009",
    "instruments": null,
    "links": [
      {
        "href": "../../../../catalog.json",
        "rel": "root",
        "title": "Planet Crisis Response — Bhote Koshi–Trishuli Outburst Flood, Nepal (2026)",
        "type": "application/json"
      },
      {
        "href": "../../collection.json",
        "rel": "parent",
        "title": null,
        "type": "application/json"
      },
      {
        "href": "../../collection.json",
        "rel": "collection",
        "title": null,
        "type": "application/json"
      },
      {
        "href": "https://data.source.coop/planet/disasterdata/nepal-flash-flood-2026-08-26/post-event/pelican-2026-08-27/items/20260827_060956_98_3009/20260827_060956_98_3009.json",
        "rel": "self",
        "title": null,
        "type": "application/json"
      },
      {
        "href": "./20260827_060956_98_3009_thumbnail.png",
        "rel": "thumbnail",
        "title": null,
        "type": "image/png"
      }
    ],
    "pl:data_version": null,
    "pl:ground_control": true,
    "pl:ground_control_ratio": null,
    "pl:item_type": "PelicanScene",
    "pl:pixel_resolution": 0.5,
    "pl:publishing_stage": "finalized",
    "pl:quality_category": "standard",
    "pl:strip_id": "20260827_060956_98_3009_strip",
    "platform": "3009",
    "published": "2026-08-27 10:33:45+03",
    "stac_extensions": [
      "https://stac-extensions.github.io/eo/v1.0.0/schema.json",
      "https://stac-extensions.github.io/view/v1.0.0/schema.json",
      "https://stac-extensions.github.io/raster/v1.1.0/schema.json",
      "https://stac-extensions.github.io/projection/v1.1.0/schema.json"
    ],
    "stac_version": "1.0.0",
    "type": "Feature",
    "updated": "2026-08-27 10:33:45+03",
    "view:azimuth": 255.9,
    "view:off_nadir": 3.8,
    "view:sun_azimuth": 171.2,
    "view:sun_elevation": 71.6
  }
]

These are the numbers of unique values for each field in the properties structure. I've excluded structures and lists.

$ ~/duckdb --nullvalue ""
SELECT   column_name,
         column_type[:15],
         approx_unique,
         min[:25],
         max[:25]
FROM     (SUMMARIZE
          FROM   'nepal.post.parquet')
WHERE    column_type::TEXT NOT LIKE 'STRUCT%'
AND      column_type::TEXT NOT LIKE '%[]%'
ORDER BY LOWER(column_name);
┌─────────────────────────┬──────────────────┬───────────────┬───────────────────────────┬───────────────────────────┐
│       column_name       │ column_type[:15] │ approx_unique │         min[:25]          │         max[:25]          │
│         varchar         │     varchar      │     int64     │          varchar          │          varchar          │
├─────────────────────────┼──────────────────┼───────────────┼───────────────────────────┼───────────────────────────┤
│ collection              │ VARCHAR          │             6 │ post-event-pelican-2026-0 │ post-event-skysat-2026-08 │
│ constellation           │ VARCHAR          │             3 │ pelican                   │ skysat                    │
│ created                 │ TIMESTAMP WITH   │            18 │ 2026-08-26 09:32:01+03    │ 2026-09-01 09:45:14+03    │
│ datetime                │ TIMESTAMP WITH   │            26 │ 2026-08-26 08:01:25.99322 │ 2026-09-01 08:06:35.68372 │
│ eo:cloud_cover          │ BIGINT           │            15 │ 47                        │ 93                        │
│ geometry                │ GEOMETRY('EPSG:  │            25 │ POLYGON ((85.339966733816 │ POLYGON ((85.321140858017 │
│ gsd                     │ DOUBLE           │            11 │ 0.55                      │ 3.9                       │
│ id                      │ VARCHAR          │            24 │ 20260826_050125_99_255f   │ 20260901_050635_67_300b   │
│ pl:data_version         │ VARCHAR          │             7 │ 20260826T100156Z          │ 20260828T092936Z          │
│ pl:ground_control       │ BOOLEAN          │             1 │ true                      │ true                      │
│ pl:ground_control_ratio │ BIGINT           │             1 │ 1                         │ 1                         │
│ pl:item_type            │ VARCHAR          │             2 │ PSScene                   │ SkySatCollect             │
│ pl:pixel_resolution     │ DOUBLE           │             2 │ 0.5                       │ 3.0                       │
│ pl:publishing_stage     │ VARCHAR          │             1 │ finalized                 │ finalized                 │
│ pl:quality_category     │ VARCHAR          │             2 │ standard                  │ test                      │
│ pl:strip_id             │ VARCHAR          │             7 │ 20260827_060956_98_3009_s │ s3_20260827T020055Z       │
│ platform                │ VARCHAR          │             7 │ 251f                      │ SSC9                      │
│ published               │ TIMESTAMP WITH   │            18 │ 2026-08-26 09:32:01+03    │ 2026-09-01 09:45:14+03    │
│ stac_version            │ VARCHAR          │             1 │ 1.0.0                     │ 1.0.0                     │
│ type                    │ VARCHAR          │             1 │ Feature                   │ Feature                   │
│ updated                 │ TIMESTAMP WITH   │            12 │ 2026-08-26 17:32:46+03    │ 2026-09-02 08:47:29+03    │
│ view:azimuth            │ DOUBLE           │            14 │ 3.7                       │ 276.1                     │
│ view:off_nadir          │ DOUBLE           │            12 │ 2.1                       │ 28.9                      │
│ view:sun_azimuth        │ DOUBLE           │            24 │ 92.7                      │ 255.4                     │
│ view:sun_elevation      │ DOUBLE           │            21 │ 26.9                      │ 71.8                      │
└─────────────────────────┴──────────────────┴───────────────┴───────────────────────────┴───────────────────────────┘

These are the numbers of images captured by each constellation on any given day.

PIVOT (
    SELECT   constellation,
             taken_on: datetime::DATE,
             cnt:      COUNT(*)
    FROM     'nepal.post.parquet'
    GROUP BY 1, 2
)
ON       constellation
USING    SUM(cnt)
GROUP BY taken_on
ORDER BY taken_on;
┌────────────┬─────────┬─────────────┬────────┐
│  taken_on  │ pelican │ planetscope │ skysat │
│    date    │ int128  │   int128    │ int128 │
├────────────┼─────────┼─────────────┼────────┤
│ 2026-08-26 │         │           9 │        │
│ 2026-08-27 │       3 │             │      2 │
│ 2026-08-28 │         │           5 │        │
│ 2026-08-31 │         │             │      2 │
│ 2026-09-01 │       3 │             │        │
└────────────┴─────────┴─────────────┴────────┘

These are the highest and lowest resolutions of the imagery captured, broken down by constellation.

SELECT   constellation,
         min_: MIN("pl:pixel_resolution"),
         max_: MAX("pl:pixel_resolution")
FROM     'nepal.post.parquet'
GROUP BY 1
ORDER BY 2;
┌───────────────┬────────┬────────┐
│ constellation │  min_  │  max_  │
│    varchar    │ double │ double │
├───────────────┼────────┼────────┤
│ pelican       │    0.5 │    0.5 │
│ skysat        │    0.5 │    0.5 │
│ planetscope   │    3.0 │    3.0 │
└───────────────┴────────┴────────┘

The images have been published as quickly as 1.4 hours after being captured.

SELECT   hours_:     ROUND(EPOCH(created - datetime) / 3600, 1),
         num_images: COUNT(*)
FROM     'nepal.post.parquet'
GROUP BY 1
ORDER BY 1;
┌────────┬────────────┐
│ hours_ │ num_images │
│ double │   int64    │
├────────┼────────────┤
│    1.4 │          3 │
│    1.5 │          4 │
│    1.6 │          4 │
│    1.7 │          1 │
│    2.2 │          4 │
│    3.1 │          4 │
│    4.0 │          2 │
│    4.1 │          2 │
└────────┴────────────┘

These are the locations of the footprints in relation to the whole of Nepal and southern China.

Planet Labs Open Satellite Feed

The imagery has been captured at different times and, in some cases, overlaps with other imagery that has already been collected.

Planet Labs Open Satellite Feed

Downloading Imagery

I'll build a list of the SkySat GeoTIFFs and download them with four parallel threads.

$ mkdir -p nepal_skysat
$ cd nepal_skysat

$ echo "SELECT href
        FROM (
            SELECT UNNEST(assets.visual, recursive := true)
            FROM   '../nepal.post.parquet'
            WHERE  constellation = 'skysat'
        )" \
    | ~/duckdb -csv -noheader \
    | xargs \
        -I% \
        -P4 \
        wget -c "%"

The resulting images are 1.9 GB in total.

$ du -hsc *_visual.tif
749M    20260827_020055_ssc1_u0001_visual.tif
416M    20260827_020055_ssc1_u0002_visual.tif
359M    20260831_092523_ssc9_u0002_visual.tif
342M    20260831_092523_ssc9_u0003_visual.tif
1.9G    total

These are the satellite images.

Planet Labs Open Satellite Feed

There was a lot of cloud cover when these images were captured, but some of the settlements affected by the flash flood can be seen.

Planet Labs Open Satellite Feed

Usable Data Masks

The above images have usable data mask (UDM) counterparts which pinpoint areas where the imagery is covered by clouds.

$ echo "SELECT href
        FROM (
            SELECT UNNEST(assets.udm, recursive := true)
            FROM   '../nepal.post.parquet'
            WHERE  constellation = 'skysat'
        )" \
    | ~/duckdb -csv -noheader \
    | xargs \
        -I% \
        -P4 \
        wget -c "%"

The UDMs for the above images are 49 MB in total.

$ du -hsc *_udm.tif
22M     20260827_020055_ssc1_u0001_udm.tif
8.8M    20260827_020055_ssc1_u0002_udm.tif
12M     20260831_092523_ssc9_u0002_udm.tif
7.5M    20260831_092523_ssc9_u0003_udm.tif
49M     total

The areas coloured in black will have a clear view of the Earth's surface, white will be obstructed by clouds, and the grey areas don't contain any imagery.

Planet Labs Open Satellite Feed

Imagery from the PlanetScope and Tanager constellations will be paired with UDM2s, which, in addition to clouds, can identify shadows, haze and snow.

Thank you for taking the time to read this post. I offer both consulting and hands-on development services to clients in North America and Europe. If you'd like to discuss how my offerings can help your business please contact me via LinkedIn.

Copyright © 2014 - 2026 Mark Litwintschik. This site's template is based off a template by Giulio Fidente.