The underside of planetary maps

Le dessous des

cartes planétaires

Benoît Seignovert

Unité d'Appui à la Recherche de l'OSUNA (UARO)

Séminaires LPG | Nantes | 2026-03-19

slid.es/seignovert/lpg-map

doi: 10.57745/XXXXX
NASA/NOAA/R. Stöckli
Creative Commons “Attribution-Share Alike” license icon

LPGMAP

wooclap.com

References:

- Twitter 4 PB / yr | 500 PB total (1, 2) [2024]

- Netflix 3 PB (1) [2013] - 20 GB x 15,000 movies -> 300 TB (2)

- Google Search 62 PB [2021] (1)

- Facebook 250 PB/yr (1)

- Youtube 250 PB/yr (1)

- Google photos 2e12 pictures in 2025 (7) - 4e12 pictures in 2020 (wiki)

- What app 7e9/day -> 2e12/yr pictures in 2023 (7)

- Number of smartphone in the world in 2025 : 7.4e9 (8) with 2,000 pictures on average (7) -> 15e12 pictures

Building maps

Sumerian map | -2500

Tabula Rogeriana | 1154

a multi-millennial story

70 sheets

Global vs. local

Mercator map

1569

18 sheets

1.2 m x 60 cm

Cassini map

1756 - 1815

(4 generations!)

181 sheets at 1:86 400

11 m x 11 m

1 km

Print

130 000 x 130 000 pixels

17 000 Mpix ~ 50 GB

Screen

32 000 x 32 000 pixels

1 000 Mpix ~ 3 GB

IGN map

2011 - 2025

1 200 maps at 1:25 000

38 m x 38 m

300 m

Print

450 000 x 450 000 pixels

200 000 Mpix ~ 0.5 TB

Screen

110 000 x 110 000 pixels

12 000 Mpix ~ 33 GB

Mercator projection

Global vs. local - as of today

1:1 000

40 km x 20 km

Print

450 000 000 x 225 000 000 pixels

100 000 000 000 Mpix ~ 300 PB

Screen

110 000 000 x 55 000 000 pixels

6 000 000 000 Mpix ~ 18 PB

4 000 km

Open Street Map
Level 0

Nantes

10 m

Open Street Map
Level 19

1:1 000

40 km x 20 km

Print

450 000 000 x 225 000 000 pixels

100 000 000 000 Mpix ~ 300 PB

Screen

110 000 000 x 55 000 000 pixels

6 000 000 000 Mpix ~ 18 PB

Global vs. local - as of today

How to store it?

 

🗺️ 🤔

and…

how to do this!

Wikipedia / S. Viinamäki

Building maps at different scales

IGN / Géoportail

1 : 10,000

1 : 100,000

1 : 1,000,000

1 : 10,000,000

1 cm = 100 km

1 cm = 10 km

1 cm = 1 km

1 cm = 100 m

Tileing

method

Tile size:

Number of tiles:

Tiles indexing:

/Z/X/Y.[jpg|png]
N(Z) = 22 x Z
256 x 256 pixels
Z=
Z=
Z=
Z=
N=1
N=4
N=16
N=22n
200 ko

WMTS (Web Map Tile Service)

Client side

1 x 256 x 256 pix
200 ko

Server side

256 x 256 pix
200 ko
256 x 256 pix
200 ko
256 x 256 pix
200 ko
256 x 256 pix
200 ko
256 x 256 pix
200 ko
256 x 256 pix
200 ko
1.2 Mo
0.5%
4 x 256 x 256 pix
800 ko
16 x 256 x 256 pix
3.2 Mo
64 x 256 x 256 pix
13 Mo
256 x 256 x 256 pix
51 Mo
1024 x 256 x 256 pix
324 Mo
+26 %

256 Mo
(Z, X, Y)

(0, 0)

(0, 1)

(1, 0)

(1, 1)

(0, 0)

(0, 1)

(0, 2)

(0, 3)

(1, 0)

(1, 1)

(1, 2)

(1, 3)

(2, 0)

(2, 1)

(2, 2)

(2, 3)

(3, 0)

(3, 1)

(3, 2)

(3, 3)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Map tiles demo</title>
     <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"/>
</head>
<body>
    <div id="map" style="height: 800px"></div>
    <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
    <script>
        const map = L.map('map').setView([47.2386, -1.5554], 0);

        const tiles = L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
            maxZoom: 19,
            attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
        }).addTo(map);
    </script>
  </body>
</html>

How to use the tiles on the web?

Traffic

on the network

🔎

Mapping tiles providers

Apple Maps

Open Street Map

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Map tiles demo</title>
     <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"/>
</head>
<body>
    <div id="map" style="height: 800px"></div>
    <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
    <script>
        const map = L.map('map').setView([47.2386, -1.5554], 0);

        const tiles = L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
            maxZoom: 19,
            attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
        }).addTo(map);
    </script>
  </body>
</html>

Changing the tiles provider

Create a 3D globe

Use the map in a GIS software

Use the map for 3D app

Pourquoi faire du stockage sur S3 ?

Tuilage à petite échelle…

Level # Tuiles Taille du pixel ~ Échelle Couverture # dossiers / fichiers Taille
0 1 160 km 1:500 000 000 Globale 1 / 1 / 1 200 ko 😅
1
4 80 km 1:250 000 000 2 / 2 / 2 0.8 Mo 🌈
2 16 40 km 1:150 000 000 Continent 3 / 4 / 4 3.2 Mo 🦄
3 64 20 km 1:70 000 000 4 / 8 / 8 12 Mo
4 256 10 km 1:35 000 000 4 / 16 / 16 50 Mo 🤘
5 1 024 5 km 1:15 000 000 Pays 5 / 32 / 32 200 Mo 👋
6 4 096 2.5 km 1:8 000 000 6 / 64 / 64 0.8 Go 🤙
7 16 384 1.2 km 1:4 000 000 7 / 128 / 128 3.2 Go 👌
8 65 536 600 m 1:2 000 000 8 / 256 / 256 12 Go ✌️
9 262 144 300 m 1:1 000 000 9 / 512 / 512 50 Go 👊
10 1 048 576 150 m 1:500 000 Métropole 10 / 1024 / 1024 200 Go 💪
11 4 194 304 75 m 1:250 000 Ville 11 / 2 048 / 2 048 0.8 To 🏋️
... ... ... ... ... ... ...
15 1 073 741 824 5 m 1:15 000 Route 15 / 32 768 / 32 768 200 To 💣
16 4 294 967 296 2.5 m 1:8 000 16 / 65 536 / 65 536 0.8 Po 💥
17 17 179 869 184 1.2 m 1:4 000 Adresse 17 / 131 072 / 131 072 3.2 Po 🔥
18 68 719 476 736 60 cm 1:2 000 18 / 262 144 / 262 144 12 Po 😵
19 274 877 906 944 30 cm 1:1 000 Passage piéton 19 / 524 288 / 524 288 50 Po 💀
256 x 256 pixels

200 ko

Impossible de stocker des cartes

à haute résolution sans stockage objet !

Canonical

🗺️ Faire des cartes interactives en S3 🪣

Capacité à stocker des très grandes volumétries

Capacité à stocker un très grand nombre de fichiers de petites tailles

Pas de limite de dossiers / fichiers

 

Stockage web natif (gateway)

Stockage statique (pas besoin de serveur)

Adressage par des objets par clé : /{z}/{x}/{y}.fmt

 

Parallélisation des requêtes: excellente performance

Utilisation en CDN : réplication / synchronisation / haute disponibilité / régionalisation

Coût du stockage faible mais… ⚠️ au egress-cost 💸

Résolution temporelle ⏳

/{t}/{z}/{x}/{y}.fmt

2025

2002

1943

Google Earth

Résolution multi/hyper-spectrale 🌈

Eumetsat
Meteosat FCI
/{w}/{z}/{x}/{y}.fmt

0.6 µm

10.5 µm

Cloud Optimized GeoTiff ☁️

/{z}/{x}/{y}.tiff 👉 /cog.tiff

Cloud Optimized GeoTiff ☁️

/{z}/{x}/{y}.tiff 👉 /cog.tiff +
🙋 HTTP range requests
$ curl -r 128 https://example.org/cog.tiff
Start : 256
Length : 256
Nb tiles : 1
Start : 1024
Length : 256
Nb tiles : 16

Cloud Optimized GeoTiff ☁️

/{z}/{x}/{y}.tiff 👉 /cog.tiff +
🙋 HTTP range requests
$ curl -r 256-512 https://example.org/cog.tiff
Start : 256
Length : 256

Cloud Optimized GeoTiff ☁️

/{z}/{x}/{y}.tiff 👉 /cog.tiff +
🙋 HTTP range requests
$ curl -r 1024-5120 https://example.org/cog.tiff
Start : 1024
Length : 16 * 256 = 4096

Cloud Optimized GeoTiff ☁️

/{z}/{x}/{y}.tiff 👉 /cog.tiff +
🙋 HTTP range requests
$ curl -r 1280-1536 https://example.org/cog.tiff
Start : 1024
Length : 1 * 256 = 256
Offset : 1 * 256 = 256

Base de données géographique native S3 📍

Base de données géographique native S3 📍

Base de données géographique native S3 📍

ATTACH 's3://example.org/stations.duckdb' AS stations_db;

SELECT count(*) AS num_stations FROM stations_db.stations;
num_stations
578
ID_PARCEL geometry
123563 POLYGON ((3.33896 49.84122, 3.33948 49.8...
5527076 POLYGON ((-1.44483 49.61280, -1.44467 49...
11479241 POLYGON ((2.87821 46.53674, 2.87820 46.5...
... ...
SELECT PARCEL_ID, geometry FROM stations_db.stations
	WHERE ST_Contains(ST_Point(0, 45), geometry) LIMIT 100;

Quelques exemples dans le système solaire 🌘

Lune

Mars

50 cm /pix

22 000 000 x 11 000 000 pixels

240 000 000 Mpix ~ 720 To

30 cm /pix

70 000 000 x 35 000 000 pixels

2 500 000 000 Mpix ~ 7 Po

Backup

STAC catalogue 📚

Standard Open Geospatial Consortium (OGC) pour décrire les jeux de données

Modèle numérique de Terrain (MNT) 🏔️

/{z}/{x}/{y}.fmt

The underside of planetary maps

By Benoît Seignovert

The underside of planetary maps

LPG Seminars | Nantes | 2026-03-19

  • 0